Import se05x_mw_v03.00.05_apache2_20201105_012315 Change-Id: I545bd6314e6479fb315edad7a11f059aceb10d0a
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..dd8c3f9 --- /dev/null +++ b/CMakeLists.txt
@@ -0,0 +1,129 @@ +# Copyright 2018,2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# + +CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0) + +IF( + ${CMAKE_SOURCE_DIR} + STREQUAL + ${CMAKE_BINARY_DIR} +) + MESSAGE("\nUSAGE_ERROR:\n\n\tRun with cmake -S <SOURCE_DIR> -B <BUILD_DIR>\n") + MESSAGE( + FATAL_ERROR + "In-source builds not allowed. Please make a new directory and run CMake from there.\n!!!IMPORTANT!!! Remove CMakeCache.txt and CMakeFiles!" + ) +ENDIF() + +PROJECT(PlugAndTrustMW) + +INCLUDE(scripts/cmake_options.cmake) + +SET(CMAKE_MODULE_PATH "./scripts") + +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) + +CONFIGURE_FILE(sss/inc/fsl_sss_ftr.h.in fsl_sss_ftr.h) +CONFIGURE_FILE(scripts/cmake_options.mak.in cmake_options.mak) +CONFIGURE_FILE(scripts/cmake_options_installed.cmake.in cmake_options_installed.cmake) + +IF(NXPInternal) + CONFIGURE_FILE(sss/tst/inc/pt_tst_ftr.h.in pt_tst_ftr.h) +ENDIF() + +INSTALL(FILES ${CMAKE_BINARY_DIR}/fsl_sss_ftr.h DESTINATION ${SIMW_INSTALL_INC_DIR}) +INSTALL(FILES ${CMAKE_BINARY_DIR}/cmake_options.mak DESTINATION ${SIMW_INSTALL_SHARE_DIR}) +INSTALL(FILES ${CMAKE_BINARY_DIR}/cmake_options_installed.cmake DESTINATION ${SIMW_INSTALL_SHARE_DIR}) + +# EXT and DOC should not be dependent on any compile time variables/depednencies +# ESPECIALLY, SSS_USE_FTR_FILE and FLOW_VERBOSE + +ADD_DEFINITIONS(-DSSS_USE_FTR_FILE) +ADD_DEFINITIONS(-DmqttconfigENABLE_METRICS=0) + +IF(WithLog_Silent) + MESSAGE(STATUS "FLOW_SILENT is ON!!!") + ADD_DEFINITIONS(-DFLOW_SILENT) +ENDIF() + +ADD_SUBDIRECTORY(ext) + +IF(NXPInternal) + IF( + "${CMAKE_CXX_COMPILER_ID}" + STREQUAL + "MSVC" + ) + # Macros won't work for MSVC + ELSE() + ADD_SUBDIRECTORY(exhaledocs) + ENDIF() +ENDIF() + +IF(WithLog_Verbose) + MESSAGE(STATUS "FLOW_VERBOSE is ON!!!") + ADD_DEFINITIONS(-DFLOW_VERBOSE) +ENDIF() + +IF(WithCodeCoverage) + IF(CMAKE_COMPILER_IS_GNUCXX) + INCLUDE(scripts/CodeCoverage.cmake) + APPEND_COVERAGE_COMPILER_FLAGS() + ENDIF() +ENDIF() + +ADD_SUBDIRECTORY(hostlib) + +ADD_SUBDIRECTORY(sss) + +IF(NXPProprietary) + IF(NOT SSS_HAVE_HOST_LPCXPRESSO55S_NS) + IF(SSS_HAVE_SE05X_VER_GTE_06_00) + ADD_SUBDIRECTORY(semslite) + ENDIF() + ENDIF() +ENDIF() + +IF(WithExtCustomerCode) + add_subdirectory(../customer extcust) +ENDIF() + +ADD_SUBDIRECTORY(demos) + +IF(NXPProprietary) + IF(WithHostCrypto_OPENSSL) + IF(WithApplet_SE05X) + IF(WithHost_PCWindows AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + # NOTE-PGH: 2020.01.32 SimpleServer.exe does not compile + ELSE() + ADD_SUBDIRECTORY(nxp_iot_agent) + ENDIF() + ENDIF() + ELSEIF(WithHostCrypto_MBEDTLS AND WithmbedTLS_ALT_SSS AND WithApplet_SE05X) + # Build for FreeRTOS + IF(WithHost_PCWindows OR WithRTOS_FreeRTOS) + # Build for Windows or Windows 10 IoT or RTOS + ADD_SUBDIRECTORY(nxp_iot_agent) + ENDIF() + ENDIF() +ENDIF() + +IF(WithHostCrypto_MBEDCRYPTO) + IF( + "${CMAKE_CXX_COMPILER_ID}" + STREQUAL + "MSVC" + ) + SET(MBEDTLS_DIR ${CMAKE_SOURCE_DIR}/ext/mbed-crypto) + SET(USE_CRYPTO_SUBMODULE "1") + ENDIF() +ENDIF() + +IF(NXPProprietary) + IF(WithApplet_SE05X) + ADD_SUBDIRECTORY(nxp_iot_agent/src/common) + ENDIF() +ENDIF()
diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..75b5248 --- /dev/null +++ b/LICENSE.txt
@@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License.
diff --git a/PlugAndTrustMW.pdf b/PlugAndTrustMW.pdf new file mode 100644 index 0000000..f75df86 --- /dev/null +++ b/PlugAndTrustMW.pdf Binary files differ
diff --git a/README.First.txt b/README.First.txt new file mode 100644 index 0000000..51d9d80 --- /dev/null +++ b/README.First.txt
@@ -0,0 +1,13 @@ + + +Plug & Trust Middleware +================================================ + +Extensive Documentation is in doc\index.html / PlugAndTrustMW.pdf + +Platform specific quick start guides are at: +- MCU/RTOS: https://www.nxp.com/docs/en/application-note/AN12396-Quick_start_guide_kinetis_k64.pdf +- MPU/Linux: https://www.nxp.com/docs/en/application-note/AN12397-Quick_start_guide_i.mx6ultralite.pdf +- Windows: https://www.nxp.com/docs/en/application-note/AN12398-Quick_start_guide_se050_vs_projects.pdf + +More details regarding SE050 and other detailed application notes can be found at https://www.nxp.com/products/:SE050
diff --git a/SW_Content_Register.txt b/SW_Content_Register.txt new file mode 100644 index 0000000..d4f3c81 --- /dev/null +++ b/SW_Content_Register.txt
@@ -0,0 +1,107 @@ +---------------------------------- + +NXP Software Content Register + +Package: Plug&Trust SW +Version: 03.00.05_apache2 + +----------------------------------- + +HostLib +- Name: HostLib +- Version: 03.00.01 +- License: Apache-2.0 +- Format: source code +- Description: Contains communication protocol stack, A71CH/SE050/SE051 APIs, etc. +- Origin: Copyright 2020 NXP +- Location: \hostlib + +Demos +- Name: Demos +- Version: 02.17.00 +- License: Apache-2.0 +- Format: source code +- Description: Contains examples using A71CH/SE050/SE051. +- Origin: Copyright 2020 NXP +- Location: \demos + +PyCli +- Name: PyCli +- Version: 03.00.05 +- License: Apache-2.0 +- Format: source code +- Description: Python based command line tool to access secure element. +- Origin: Copyright 2020 NXP +- Location: \pycli + +SSS Apis +- Name: SSS +- Version: 03.04.00 +- License: Apache-2.0 +- Format: source code +- Description: Contains the **SSS APIs** interface to the Application Layer. +- Origin: Copyright 2020 NXP +- Location: \sss + +Amazon FreeRTOS +- Name: Amazon FreeRTOS +- Version: 202002.00 +- License: MIT License +- Format: source code +- Description: FreeRTOS stack. +- Origin: Copyright (C) 2017 Amazon.com, Inc. or its affiliates +- Location: \ext\amazon-freertos + +Mbed Crypto +- Name: Mbed Crypto +- Version: 2.20.0 +- License: Apache 2.0 +- Format: source code +- Description: Mbed Crypto stack. +- Origin: Copyright (C) 2006-2015, ARM Limited +- Location: \ext\mbed-crypto + +MbedTLS +- Name: MbedTLS +- Version: 2.16.2 +- License: Apache 2.0 +- Format: source code +- Description: MbedTLS stack. +- Origin: Copyright (C) 2006-2015, ARM Limited +- Location: \ext\mbedtls + +Open62541 +- Name: Open62541 +- Version: +- License: Mozilla Public License Version 2.0; Creative Commons CCZero 1.0 Universal +- Format: source code +- Description: OPC-UA implementation stack +- Origin: \ext\open62541\AUTHORS +- Location: \ext\open62541 + +openssl +- Name: openssl +- Version: OpenSSL 1.1.1d 10 Sep 2019 +- License: OpenSSL License +- Format: Binary (Windows) +- Description: Openssl stack Libraries (Windows) +- Origin: Copyright (c) 1998-2019 The OpenSSL Project. +- Location: \ext\openssl + +paho mqtt +- Name: paho mqtt +- Version: 1.3.5 +- License: Eclipse Public License - v 2.0 +- Format: source code +- Description: paho mqtt stack +- Origin: +- Location: \ext\paho.mqtt.c + +unity +- Name: unity +- Version: +- License: MIT License +- Format: source code +- Description: unity code +- Origin: Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams +- Location: \ext\unity
diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt new file mode 100644 index 0000000..043772f --- /dev/null +++ b/demos/CMakeLists.txt
@@ -0,0 +1,79 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +IF( + WithApplet_A71CH_SIM + OR WithApplet_A71XX + OR WithApplet_SE05X + OR WithApplet_SE050_L + OR WithApplet_LoopBack + OR WithKSDK +) + IF(NXPProprietary) + ADD_SUBDIRECTORY(ksdk) + ENDIF() +ENDIF() + +IF(NXPInternal AND (NOT SSS_HAVE_HOST_LPCXPRESSO55S_NS)) + ADD_SUBDIRECTORY(aws) +ENDIF() + +IF(WithApplet_SE05X) + IF(WithLargePrograms) # Skip larger programs. e.g. + ADD_SUBDIRECTORY(se05x) + IF(NXPInternal) + ADD_SUBDIRECTORY(se05x_nxp) + ENDIF() + ENDIF() +ENDIF() + +IF(WithApplet_A71CH OR WithApplet_A71CH_SIM) + ADD_SUBDIRECTORY(a71ch) +ENDIF() + +IF(NXPProprietary) + IF(WithNXPNFCRdLib) + ADD_SUBDIRECTORY(nxpnfcrdlib) + ENDIF() +ENDIF() + +IF(WithHost_WithFileSystem) + IF(WithApplet_SE05X AND (SSS_HAVE_SE05X_Auth_None OR SSS_HAVE_SE05X_Auth_PlatfSCP03)) + ADD_SUBDIRECTORY(apdu_player) + ENDIF() +ENDIF() + +IF(WithHost_lpcxpresso55s_ns OR WithHost_lpcxpresso55s_s OR WithHost_lpcxpresso55s) + ADD_SUBDIRECTORY(lpc55s) +ENDIF() + +IF(WithHostCrypto_MBEDTLS) + IF(WithRTOS_Default AND WithHost_LinuxLike) + ADD_SUBDIRECTORY(linux/sss_pkcs11) + ENDIF() +ENDIF() + +IF(WithOPCUA_open62541) + IF( + WithHostCrypto_MBEDTLS + AND + (WithHost_PCWindows + OR WithHost_iMXLinux + OR WithHost_PCLinux64 + OR WithHost_Raspbian + ) + ) + ADD_SUBDIRECTORY(opc_ua) + ENDIF() +ENDIF() + +IF(WithHostCrypto_None) + # PASS +ELSE() + IF(NOT SSS_HAVE_HOST_LPCXPRESSO55S_NS) + ADD_SUBDIRECTORY(test_Crypto) + ENDIF(NOT SSS_HAVE_HOST_LPCXPRESSO55S_NS) +ENDIF()
diff --git a/demos/Certificate_Chains/Readme.rst b/demos/Certificate_Chains/Readme.rst new file mode 100644 index 0000000..c92cbeb --- /dev/null +++ b/demos/Certificate_Chains/Readme.rst
@@ -0,0 +1,30 @@ +.. + Copyright 2020 NXP + + +.. _certificate-chains: + +================================== + Certificate Chains +================================== + +SE050 Certificate Chains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + + SE050/ROOT/Readme + + SE050/0004_A1F4/Readme + + +SE051 Certificate Chains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. toctree:: + :maxdepth: 2 + + SE051/ROOT/Readme + + SE051/0001_A201/Readme
diff --git a/demos/a71ch/CMakeLists.txt b/demos/a71ch/CMakeLists.txt new file mode 100644 index 0000000..d2205ab --- /dev/null +++ b/demos/a71ch/CMakeLists.txt
@@ -0,0 +1,37 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(ex_a71ch_sss_ecc) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common + a7x_utils + a71ch +) + +CREATE_BINARY(${PROJECT_NAME}) + +PROJECT(ex_a71ch_sss_aes_wrap_key) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common + a7x_utils + a71ch +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(NXPInternal) + ADD_SUBDIRECTORY(tst) +ENDIF(NXPInternal)
diff --git a/demos/a71ch/ex_a71ch_sss_aes_wrap_key.c b/demos/a71ch/ex_a71ch_sss_aes_wrap_key.c new file mode 100644 index 0000000..f55cb1f --- /dev/null +++ b/demos/a71ch/ex_a71ch_sss_aes_wrap_key.c
@@ -0,0 +1,229 @@ +/* + * + * Copyright 2018-2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <a71ch_api.h> +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define EC_KEY_BIT_LEN 256 +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* clang-format off */ +const uint8_t aesKey[32] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + }; + +const uint8_t aesKey1[32] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + }; + +/* wrapped first 16 bytes of aesKey1 key with first 16 bytes of aesKey*/ +const uint8_t wapped_AesKey1_0[24] = { 0xb2, 0x68, 0x75, 0x57, 0xa1, 0x4e, 0xc8, 0xa8, + 0x2f, 0xe0, 0x7b, 0x8d, 0xc1, 0xe6, 0xf9, 0xf9, + 0x8c, 0xe7, 0x4a, 0x4b, 0xf5, 0x7, 0xf3, 0xa9 + }; +/* wrapped last 16 bytes of aesKey1 key with last 16 bytes of aesKey*/ +const uint8_t wapped_AesKey1_1[24] = { 0x6b, 0x53, 0x16, 0xe4, 0x72, 0x64, 0x02, 0x18, + 0x7f, 0x7c, 0x1e, 0x5b, 0x70, 0x16, 0xab, 0xab, + 0xa2, 0x35, 0xc8, 0xd2, 0x06, 0xaa, 0xb3, 0x82 + }; + +/* clang-format on */ + +static ex_sss_boot_ctx_t gex_sss_aes_wrap_key_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_aes_wrap_key_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> +#include "a71ch_util.h" +#include "sm_types.h" +#include "tst_sm_util.h" + +sss_status_t calculate_hkdf_key( + ex_sss_boot_ctx_t *pCtx, sss_object_t aeskeyObject, uint32_t hkdfKeyId, uint8_t *outHkdfKey, size_t *outHkdfKeyLen); + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Success; + sss_object_t aesObj1; + sss_object_t aesObj2; + uint8_t HkdfKey1[128] = { + 0, + }; + size_t HkdfKey1Len = sizeof(HkdfKey1); + uint8_t HkdfKey2[128] = { + 0, + }; + size_t HkdfKey2Len = sizeof(HkdfKey2); + + // Variables used by calls to legacy API + U16 sw = 0; + SST_Index_t keyIdx = 0; + + LOG_I( + "Running Set AES Wrapped Key Example " + "ex_a71ch_sss_aes_wrap_key.c"); + + /* doc:start ex_sss-set-aes-key */ + status = sss_key_object_init(&aesObj1, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&aesObj1, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Default, + kSSS_CipherType_AES, + sizeof(aesKey), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &aesObj1, aesKey, sizeof(aesKey), sizeof(aesKey) * 8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* doc:end ex_sss-set-aes-key */ + + /* doc:start ex_hostlib-set-wrapped-aes-key */ + keyIdx = (((sss_sscp_object_t *)&aesObj1)->slotId) & 0x0F; + + /* Set wrapped aes key - aesKey1 */ + sw = A71_SetRfc3394WrappedAesKey(keyIdx, wapped_AesKey1_0, sizeof(wapped_AesKey1_0)); + status = ((sw == SW_OK) ? kStatus_SSS_Success : kStatus_SSS_Fail); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + sw = A71_SetRfc3394WrappedAesKey(keyIdx + 1, wapped_AesKey1_1, sizeof(wapped_AesKey1_1)); + status = ((sw == SW_OK) ? kStatus_SSS_Success : kStatus_SSS_Fail); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* doc:end ex_hostlib-set-wrapped-aes-key */ + + /* Verify if the wrapped key is injected properly */ + + /* doc:start ex_verify-wrapped-key */ + /* 1 - Calculate HKDF key with wrapped AES key injected - aesKey1 */ + status = calculate_hkdf_key(pCtx, aesObj1, MAKE_TEST_ID(__LINE__), HkdfKey1, &HkdfKey1Len); + + /* 2 - Inject aesKey1 AES key and calculate HKDF key */ + status = sss_key_object_init(&aesObj2, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&aesObj2, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Default, + kSSS_CipherType_AES, + sizeof(aesKey1), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &aesObj2, aesKey1, sizeof(aesKey1), sizeof(aesKey1) * 8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = calculate_hkdf_key(pCtx, aesObj2, MAKE_TEST_ID(__LINE__), HkdfKey2, &HkdfKey2Len); + + /* 3 - compare both hkdf keys generated */ + if (0 != memcmp(HkdfKey1, HkdfKey2, HkdfKey1Len)) { + status = kStatus_SSS_Fail; + } + /* doc:end ex_verify-wrapped-key */ + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("ex_a71ch_sss_aes_wrap_key Example Success !!!..."); + } + else { + LOG_E("ex_a71ch_sss_aes_wrap_key Example Failed !!!..."); + } + return status; +} + +sss_status_t calculate_hkdf_key( + ex_sss_boot_ctx_t *pCtx, sss_object_t aeskeyObject, uint32_t hkdfKeyId, uint8_t *outHkdfKey, size_t *outHkdfKeyLen) +{ + sss_status_t status; + /* HKDF Extract and Expand*/ + sss_algorithm_t algorithm = kAlgorithm_SSS_HMAC_SHA256; + uint8_t info[DERIVE_KEYDATA_FROM_SHARED_SECRET_MAX_INFO] = { + 0, + }; + uint8_t infoLen = sizeof(info); + sss_object_t derived_key; + sss_derive_key_t ctx_derv = {0}; + uint16_t deriveDataLen = 128; + + /* clang-format off */ + static uint8_t salt[32] = { 0xAA, 0x1A, 0x2A, 0xE3, 0xB2, 0x76, 0x15, 0x4D, + 0x67, 0xF9, 0xD8, 0x4C, 0xB9, 0x35, 0x54, 0x56, + 0xBB, 0x1B, 0x2B, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f + }; + /* clang-format on */ + + /* Store derived key in host */ + status = sss_key_object_init(&derived_key, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle( + &derived_key, hkdfKeyId, kSSS_KeyPart_Default, kSSS_CipherType_AES, *outHkdfKeyLen, kKeyObject_Mode_Transient); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = + sss_derive_key_context_init(&ctx_derv, &pCtx->session, &aeskeyObject, algorithm, kMode_SSS_ComputeSharedSecret); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_derive_key_go( + &ctx_derv, salt, sizeof(salt), info, infoLen, &derived_key, deriveDataLen, outHkdfKey, outHkdfKeyLen); + +#if SSS_HAVE_FIPS + ENSURE_OR_GO_CLEANUP(status != kStatus_SSS_Success); + status = kStatus_SSS_Success; + goto cleanup; +#else + + size_t hkdfKeyLenBits = *outHkdfKeyLen * 8; + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->host_ks, &derived_key, outHkdfKey, outHkdfKeyLen, &hkdfKeyLenBits); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I(" Key Derivation successful !!!"); + LOG_MAU8_I("hkdfOutput", outHkdfKey, *outHkdfKeyLen); +#endif + +cleanup: + if (ctx_derv.session != NULL) + sss_derive_key_context_free(&ctx_derv); + return status; +}
diff --git a/demos/a71ch/ex_a71ch_sss_ecc.c b/demos/a71ch/ex_a71ch_sss_ecc.c new file mode 100644 index 0000000..2ed1140 --- /dev/null +++ b/demos/a71ch/ex_a71ch_sss_ecc.c
@@ -0,0 +1,197 @@ +/* + * + * Copyright 2018-2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <a71ch_api.h> +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define EC_KEY_BIT_LEN 256 +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* clang-format off */ +const uint8_t keyPairData[] = { 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, + 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, + 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, + 0x03, 0x01, 0x07, 0x04, 0x6D, 0x30, 0x6B, 0x02, + 0x01, 0x01, 0x04, 0x20, 0x78, 0xE5, 0x20, 0x6A, + 0x08, 0xED, 0xD2, 0x52, 0x36, 0x33, 0x8A, 0x24, + 0x84, 0xE4, 0x2F, 0x1F, 0x7D, 0x1F, 0x6D, 0x94, + 0x37, 0xA9, 0x95, 0x86, 0xDA, 0xFC, 0xD2, 0x23, + 0x6F, 0xA2, 0x87, 0x35, 0xA1, 0x44, 0x03, 0x42, + 0x00, 0x04, 0xED, 0xA7, 0xE9, 0x0B, 0xF9, 0x20, + 0xCF, 0xFB, 0x9D, 0xF6, 0xDB, 0xCE, 0xF7, 0x20, + 0xE1, 0x23, 0x8B, 0x3C, 0xEE, 0x84, 0x86, 0xD2, + 0x50, 0xE4, 0xDF, 0x30, 0x11, 0x50, 0x1A, 0x15, + 0x08, 0xA6, 0x2E, 0xD7, 0x49, 0x52, 0x78, 0x63, + 0x6E, 0x61, 0xE8, 0x5F, 0xED, 0xB0, 0x6D, 0x87, + 0x92, 0x0A, 0x04, 0x19, 0x14, 0xFE, 0x76, 0x63, + 0x55, 0xDF, 0xBD, 0x68, 0x61, 0x59, 0x31, 0x8E, + 0x68, 0x7C }; + +const uint8_t extPubKeyData[] = { + 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, + 0x42, 0x00, 0x04, 0xED, 0xA7, 0xE9, 0x0B, 0xF9, + 0x20, 0xCF, 0xFB, 0x9D, 0xF6, 0xDB, 0xCE, 0xF7, + 0x20, 0xE1, 0x23, 0x8B, 0x3C, 0xEE, 0x84, 0x86, + 0xD2, 0x50, 0xE4, 0xDF, 0x30, 0x11, 0x50, 0x1A, + 0x15, 0x08, 0xA6, 0x2E, 0xD7, 0x49, 0x52, 0x78, + 0x63, 0x6E, 0x61, 0xE8, 0x5F, 0xED, 0xB0, 0x6D, + 0x87, 0x92, 0x0A, 0x04, 0x19, 0x14, 0xFE, 0x76, + 0x63, 0x55, 0xDF, 0xBD, 0x68, 0x61, 0x59, 0x31, + 0x8E, 0x68, 0x7C +}; + +/* clang-format on */ + +static ex_sss_boot_ctx_t gex_sss_ecc_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_ecc_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> +#include "a71ch_util.h" +#include "sm_types.h" +#include "tst_sm_util.h" + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Success; + uint8_t digest[32] = "Hello World"; + size_t digestLen; + uint8_t signature[256] = {0}; + size_t signatureLen; + sss_object_t keyPair; + sss_object_t key_pub; + sss_asymmetric_t ctx_asymm = {0}; + sss_asymmetric_t ctx_verify = {0}; + + // Variables used by calls to legacy API + U16 sw = 0; + + LOG_I( + "Running Mixed SSS/A71CH Host API Elliptic Curve Cryptography Example " + "ex_a71ch_sss_ecc.c"); + digestLen = sizeof(digest); + + /* doc:start ex_sss_asymmetric-allocate-key */ + /* Pre-requisite for Signing Part*/ + status = sss_key_object_init(&keyPair, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&keyPair, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Pair, + kSSS_CipherType_EC_NIST_P, + sizeof(keyPairData), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &keyPair, keyPairData, sizeof(keyPairData), EC_KEY_BIT_LEN, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* doc:end ex_sss_asymmetric-allocate-key */ + + /* doc:start ex_sss_asymmetric-asym-sign */ + status = sss_asymmetric_context_init(&ctx_asymm, &pCtx->session, &keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + signatureLen = sizeof(signature); + /* Do Signing */ + LOG_I("Do Signing"); + LOG_MAU8_I("digest", digest, digestLen); + status = sss_asymmetric_sign_digest(&ctx_asymm, digest, digestLen, signature, &signatureLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_MAU8_I("signature", signature, signatureLen); + LOG_I("Signing Successful !!!"); + sss_asymmetric_context_free(&ctx_asymm); + /* doc:end ex_sss_asymmetric-asym-sign */ + + /* Pre requiste for Verifying Part*/ + status = sss_key_object_init(&key_pub, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&key_pub, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Public, + kSSS_CipherType_EC_NIST_P, + sizeof(extPubKeyData), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &key_pub, extPubKeyData, sizeof(extPubKeyData), EC_KEY_BIT_LEN, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* doc:start ex_sss_asymmetric-asym-verify */ + status = + sss_asymmetric_context_init(&ctx_verify, &pCtx->session, &key_pub, kAlgorithm_SSS_SHA256, kMode_SSS_Verify); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Do Verify"); + LOG_MAU8_I("digest", digest, digestLen); + LOG_MAU8_I("signature", signature, signatureLen); + status = sss_asymmetric_verify_digest(&ctx_verify, digest, digestLen, signature, signatureLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_I("Verification Successful !!!"); + /* doc:end ex_sss_asymmetric-asym-verify */ + + /* doc:start a71ch-with-hostlib-apis */ + /* Access the A71CH with the (legacy) Host API */ + SST_Index_t keyIdx = (((sss_sscp_object_t *)&keyPair)->slotId) & 0x0F; + U8 pubEccKeyScratch[128]; + U16 pubEccKeyScratchLen = 0; + + LOG_I("A71_GetPublicKeyEccKeyPair(0x%02x)", keyIdx); + pubEccKeyScratchLen = sizeof(pubEccKeyScratch); + sw = A71_GetPublicKeyEccKeyPair(keyIdx, pubEccKeyScratch, &pubEccKeyScratchLen); + status = ((sw == SW_OK) ? kStatus_SSS_Success : kStatus_SSS_Fail); + /* doc:end a71ch-with-hostlib-apis */ + ENSURE_OR_GO_CLEANUP(sw == SW_OK); + LOG_MAU8_I("Pub Key from pair", pubEccKeyScratch, pubEccKeyScratchLen); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("ex_a71ch_sss_ecc Example Success !!!..."); + } + else { + LOG_E("ex_a71ch_sss_ecc Example Failed !!!..."); + } + if (ctx_asymm.session != NULL) + sss_asymmetric_context_free(&ctx_asymm); + if (ctx_verify.session != NULL) + sss_asymmetric_context_free(&ctx_verify); + return status; +}
diff --git a/demos/apdu_player/CMakeLists.txt b/demos/apdu_player/CMakeLists.txt new file mode 100644 index 0000000..d806a18 --- /dev/null +++ b/demos/apdu_player/CMakeLists.txt
@@ -0,0 +1,28 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# TODO: Get rid of -Wno-format -Wno-format-security + +IF(CMAKE_COMPILER_IS_GNUCC) + ADD_DEFINITIONS("-Wno-unused-function -Wno-format -Wno-format-security") +ENDIF() + +PROJECT(apdu_player_demo) + +ADD_EXECUTABLE(${PROJECT_NAME} apdu_player.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common + smCom +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/apdu_player/Readme.rst b/demos/apdu_player/Readme.rst new file mode 100644 index 0000000..a1e574b --- /dev/null +++ b/demos/apdu_player/Readme.rst
@@ -0,0 +1,26 @@ +.. + Copyright 2019 NXP + + +.. highlight:: shell + +.. _apdu-player-demo: + +========================================================== + APDU Player Demo +========================================================== + +This demo is to transceive raw APDUs to the SE. It takes a command line argument as the input file containing APDUs to be sent, followed by the reponse. An example of command to be in the file is +``/send 00A4040000 6F108408A000000151000000A5049F6501FF9000`` + + +In this, the ``00A4040000`` is the command to be transmitted and ``6F108408A000000151000000A5049F6501FF9000`` is the expected response. + +.. note :: + Ensure that authentication with the SE is either plain or platform SCP + This demo only supports only SE05x devices + +How to use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Run the demo as ``apdu_player_demo [Input-file] <Port>``
diff --git a/demos/apdu_player/apdu_player.c b/demos/apdu_player/apdu_player.c new file mode 100644 index 0000000..e0558f2 --- /dev/null +++ b/demos/apdu_player/apdu_player.c
@@ -0,0 +1,170 @@ +/* + * + * Copyright 2018,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + * + */ +#include <fsl_sscp_a71ch.h> +#include <fsl_sss_api.h> +#include <smCom.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#if defined(SSS_USE_FTR_FILE) +#include "fsl_sss_ftr.h" +#else +#include "fsl_sss_ftr_default.h" +#endif + +#if SSS_HAVE_MBEDTLS +#include <fsl_sss_mbedtls_apis.h> +#include <mbedtls/version.h> +#endif + +#if SSS_HAVE_OPENSSL +#include <fsl_sss_openssl_apis.h> +#include <openssl/opensslv.h> +#endif + +#if SSS_HAVE_SSCP +#include <fsl_sss_sscp.h> +#include <sm_types.h> +#endif + +#if SSS_HAVE_SE05X +#include <fsl_sss_se05x_apis.h> +#endif + +#if SSS_HAVE_A71XX +#include <HLSEAPI.h> +#include <fsl_sscp_a71ch.h> +#endif +#if SSS_HAVE_A71CL || SSS_HAVE_SE050_L +#include <a71cl_api.h> +#include <fsl_sscp_a71cl.h> +#endif /* SSS_HAVE_A71CH / EAR */ + +#include <ex_sss_boot.h> +#include "sm_apdu.h" + +#include "nxLog_App.h" + +#define MAX_TX_RX_BUFFER 1024 + +static ex_sss_boot_ctx_t gex_sss_gen_cert; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_gen_cert) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_inc.h> + +void print_usage() +{ + printf("Execute APDUs on a SE\n"); + printf(" Usage:\n"); + printf("apdu_player [apdu-file] <port>\n"); + printf("\n"); + printf( + "The apdu file contains hex strings of APDUs, one APDU per line in the " + "following format:\n"); + printf("/send APDU [EXPECTED_RESPONSE]\n"); + printf("All lines not following this format are ignored.\n"); +} + + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + void * conn_ctx = NULL; + if (argc < 2) { + print_usage(); + return status; + } + +#if SSS_HAVE_SE05X + conn_ctx = &((sss_se05x_session_t *)&pCtx->session)->s_ctx; +#endif + + FILE *fp = fopen(argv[1], "r"); + if (fp == NULL) { + LOG_E("error opening file %s\n", argv[1]); + print_usage(); + return status; + } + + char buf[MAX_TX_RX_BUFFER * 8] = {0}; + char apdu_str[MAX_TX_RX_BUFFER * 8] = {0}; + char resp_str[MAX_TX_RX_BUFFER * 8] = {0}; + + while (fgets(buf, sizeof(buf), fp) != NULL) { + size_t len = strlen(buf) - 1; + + if (buf[len] == '\r' || buf[len] == '\n') { + buf[len] = '\0'; // eat the newline fgets() stores + } + + int found = sscanf(buf, "/send %s %s", apdu_str, resp_str); + if (found <= 0) { + LOG_I("discarding [%s]\n", buf); + continue; + } + + uint8_t apdu[SE05X_MAX_BUF_SIZE_CMD] = { 0 }; + uint8_t resp[SE05X_MAX_BUF_SIZE_RSP] = { 0 }; + size_t apdu_len = 0; + size_t resp_len = 0; + + bool compare_full_response = true; + char *resp_to_compare_str = resp_str; + + if (!smApduGetArrayBytes(apdu_str, &apdu_len, apdu, SE05X_MAX_BUF_SIZE_CMD)) { + LOG_E("invalid hexstr in [%s]\n", buf); + return 1; + } + if (found > 1) { + // the response CAN be prepended with a star signifying that + // there can be more characters. ignore those. + if (resp_str[0] == '*') { + compare_full_response = false; + resp_to_compare_str = &resp_str[1]; + } + smApduGetArrayBytes(resp_to_compare_str, &resp_len, resp, SE05X_MAX_BUF_SIZE_RSP); + } + + uint8_t rx[MAX_TX_RX_BUFFER]; + size_t rlen = sizeof(rx); + printf("Executing [%s]\n", buf); + if (SM_OK != DoAPDUTxRx(conn_ctx, apdu, (uint16_t)apdu_len, &rx[0], &rlen)) + { + LOG_E("Unable to send apdu [%s]\n", buf); + return status; + } + + if (resp_len != 0) { + if ((rlen < resp_len) || + ((compare_full_response) ? + (memcmp(resp, rx, resp_len) != 0) : + (memcmp(resp, rx + (rlen - resp_len), resp_len) != + 0))) { + LOG_E("Unexpected response for apdu [%s]\n", buf); + return status; + } + else { + LOG_I("Success"); + } + } + else { + LOG_W("resp is null. Not checking response"); + } + } + + fclose(fp); + status = kStatus_SSS_Success; + LOG_I("Example finished successfully"); + return status; +}
diff --git a/demos/linux/aws/AmazonRootCA1.pem b/demos/linux/aws/AmazonRootCA1.pem new file mode 100644 index 0000000..61ae256 --- /dev/null +++ b/demos/linux/aws/AmazonRootCA1.pem
@@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- \ No newline at end of file
diff --git a/demos/linux/aws/SampleConfig.json b/demos/linux/aws/SampleConfig.json new file mode 100644 index 0000000..d10113d --- /dev/null +++ b/demos/linux/aws/SampleConfig.json
@@ -0,0 +1,27 @@ +{ + "endpoint": "a29rg0ytflhg6y-ats.iot.eu-central-1.amazonaws.com", + "mqtt_port": 8883, + "https_port": 443, + "greengrass_discovery_port": 8443, + "root_ca_relative_path": "certs/AmazonRootCA1.pem", + "device_certificate_relative_path": "certs/<device_certificate>", + "device_private_key_relative_path": "certs/<device_key_reference_file>", + "tls_handshake_timeout_msecs": 60000, + "tls_read_timeout_msecs": 2000, + "tls_write_timeout_msecs": 2000, + "aws_region": "", + "aws_access_key_id": "", + "aws_secret_access_key": "", + "aws_session_token": "", + "client_id": "CppSDKTesting", + "thing_name": "CppSDKTesting", + "is_clean_session": true, + "mqtt_command_timeout_msecs": 20000, + "keepalive_interval_secs": 600, + "minimum_reconnect_interval_secs": 1, + "maximum_reconnect_interval_secs": 128, + "maximum_acks_to_wait_for": 32, + "action_processing_rate_hz": 5, + "maximum_outgoing_action_queue_length": 32, + "discover_action_timeout_msecs": 300000 +}
diff --git a/demos/linux/aws/buildScript.sh b/demos/linux/aws/buildScript.sh new file mode 100644 index 0000000..0a6172a --- /dev/null +++ b/demos/linux/aws/buildScript.sh
@@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Determine directory where script is stored +AWS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${AWS_DIR} + +cd aws-iot-device-sdk-cpp +mkdir build +sed -i '31 a ADD_DEFINITIONS\(\-DOPENSSL_LOAD_CONF\)' CMakeLists.txt +cd build +cmake ../. +make pub-sub-sample + +cp -f ${AWS_DIR}/SampleConfig.json ${AWS_DIR}/aws-iot-device-sdk-cpp/build/bin/config +cp -f ${AWS_DIR}/../../../pycli/Provisioning/aws/*_device_key.pem ${AWS_DIR}/aws-iot-device-sdk-cpp/build/bin/certs +cp -f ${AWS_DIR}/../../../pycli/Provisioning/aws/*_device_certificate.cer ${AWS_DIR}/aws-iot-device-sdk-cpp/build/bin/certs +cp -f ${AWS_DIR}/../../../pycli/Provisioning/aws/*_device_reference_key.pem ${AWS_DIR}/aws-iot-device-sdk-cpp/build/bin/certs +cp -f ${AWS_DIR}/AmazonRootCA1.pem ${AWS_DIR}/aws-iot-device-sdk-cpp/build/bin/certs
diff --git a/demos/linux/aws/readme.rst b/demos/linux/aws/readme.rst new file mode 100644 index 0000000..67916b0 --- /dev/null +++ b/demos/linux/aws/readme.rst
@@ -0,0 +1,156 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: shell + +.. _linux-demos-aws: + +AWS Demo for iMX Linux / RaspberryPi +================================================== + +This demo demonstrates connection to AWS IoT Console using pre-provisioned +device credentials and publish/subscribe procedure using MQTT. + +Prerequisites +------------- + +- AWS account +- SD Card image with SE050 Middleware pre-installed. The application is + built on the iMX platform. +- IMX6UL-EVK platform or Raspberry pi connected to the Internet + +Preparing the credentials and Provisioning the secure element +------------------------------------------------------------- + +Use ssscli tool from iMX/Rpi platform + +1) Complete :numref:`cli-doc-pre-steps` :ref:`cli-doc-pre-steps` + +#) To create certificates on imx and Raspberry Pi, call:: + + cd simw-top/pycli/Provisioning/ + python3 GenerateAWSCredentials.py + python3 ResetAndUpdate_AWS.py + +#) Certificates and Keys are generated at ``simw-top/pycli/Provisioning/aws`` + + +Build the OpenSSL engine [Optional] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. note:: + This step is optional in case you are using a prepared SD card + image from NXP. + +The OpenSSL engine uses the sss abstraction layer to access the crypto +services of the secure element, the implementation remains dependent on +the secure element attached. The following illustrates compiling the +OpenSSL engine for SE050 connected over I2C. + +:: + + cd simw-top + python scripts/create_cmake_projects.py + cd ../simw-top_build/imx_native_se050_t1oi2c + cmake --build . + make install + ldconfig /usr/local/lib + + +.. note:: + Replace ``imx_native_se050_t1oi2c`` with ``raspbian_native_se050_t1oi2c`` + when building for Raspberry Pi. + +Run the example +--------------- + +1) Clone the Code :: + + cd /simw-top/demos/linux/aws/ + git clone https://github.com/aws/aws-iot-device-sdk-cpp.git + + .. note:: If curl is not installed - run ``sudo apt-get install libcurl4-openssl-dev`` + + +.. highlight:: cmake + +#) Modify the ``CMakeLists.txt`` file under ``samples/PubSub`` so it ensures ``OPENSSL_LOAD_CONF`` is defined (see excerpt below):: + + if (UNIX AND NOT APPLE) + ADD_DEFINITIONS(-DOPENSSL_LOAD_CONF) + # Prefer pthread if found + set(THREADS_PREFER_PTHREAD_FLAG ON) + set(CUSTOM_COMPILER_FLAGS "-fno-exceptions -Wall -Werror") + elseif (APPLE) + set(CUSTOM_COMPILER_FLAGS "-fno-exceptions -Wall -Werror") + elseif (WIN32) + set(CUSTOM_COMPILER_FLAGS "/W4") + endif () + +.. highlight:: shell + +#) Use 'buildScript.sh' script at simw-top/demos/linux/aws/ to build the mqtt application for aws call:: + + ./buildScript.sh + +.. highlight:: json + +#) Adapt the PubSub example specific configuration file so that it refers to the reference key and the device certificate. + - Update the endpoint to match your AWS account + - Ensure the AmazonRootCA1.pem certificate is in place (it is used by the iMX/rpi to validate the AWS IoT counterpart\ + - Update the configuration file (/simw-top/demos/linux/aws/aws-iot-device-sdk-cpp/build/bin/config/SampleConfig.json) with endpoint, device_certificate_relative_path, device_private_key_relative_path (Ensure the value for "endpoint" matches your setup, you must replace "xxxxiukfoyyyy-ats.iot.eu-central-1.amazonaws.com") + - Sample Json file :: + + { + "endpoint": "xxxxiukfoyyyy-ats.iot.eu-central-1.amazonaws.com", + "mqtt_port": 8883, + "https_port": 443, + "greengrass_discovery_port": 8443, + "root_ca_relative_path": "certs/AmazonRootCA1.pem", + "device_certificate_relative_path": "<UID>_device_certificate.crt", + "device_private_key_relative_path": "<UID>_device_reference_key.pem", + "tls_handshake_timeout_msecs": 60000, + "tls_read_timeout_msecs": 2000, + "tls_write_timeout_msecs": 2000, + "aws_region": "", + "aws_access_key_id": "", + "aws_secret_access_key": "", + "aws_session_token": "", + "client_id": "CppSDKTesting", + "thing_name": "CppSDKTesting", + "is_clean_session": true, + "mqtt_command_timeout_msecs": 20000, + "keepalive_interval_secs": 600, + "minimum_reconnect_interval_secs": 1, + "maximum_reconnect_interval_secs": 128, + "maximum_acks_to_wait_for": 32, + "action_processing_rate_hz": 5, + "maximum_outgoing_action_queue_length": 32, + "discover_action_timeout_msecs": 300000 + } + +.. highlight:: cfg + +#) Search for `default_algorithms` in ``/simw-top/demos/linux/common/openssl_sss_se050.cnf`` file and set it as :: + + default_algorithms = RSA,RAND,ECDSA,ECDH ----- For openssl 1.0.0 + default_algorithms = RSA,RAND,EC ----- For openssl 1.1.1 + +.. highlight:: shell + +#) Set the openssl config path as call:: + + $ export OPENSSL_CONF=/simw-top/demos/linux/common/openssl_sss_se050.cnf + +#) Upload the root certificate (/simw-top/pycli/Provisioning/aws/rootCA_certificate.cer) to AWS account. Refer :ref:`prepare-aws-cloud` + + +#) Run the application:: + + cd /simw-top/demos/linux/aws/aws-iot-device-sdk-cpp/build/bin + ./pub-sub-sample + + +.. note:: + 1) Export the OpenSSL conf path to the exact location of the file. The above example is for illustrative purpose
diff --git a/demos/linux/aws_eou/AmazonRootCA1.pem b/demos/linux/aws_eou/AmazonRootCA1.pem new file mode 100644 index 0000000..61ae256 --- /dev/null +++ b/demos/linux/aws_eou/AmazonRootCA1.pem
@@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF +ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 +b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL +MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv +b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj +ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM +9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw +IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 +VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L +93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm +jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA +A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI +U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs +N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv +o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU +5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy +rqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- \ No newline at end of file
diff --git a/demos/linux/aws_eou/aws_c_sdk_eou.patch b/demos/linux/aws_eou/aws_c_sdk_eou.patch new file mode 100644 index 0000000..62f3991 --- /dev/null +++ b/demos/linux/aws_eou/aws_c_sdk_eou.patch
@@ -0,0 +1,52 @@ +diff --git a/demos/CMakeLists.txt b/demos/CMakeLists.txt +index 8fda1c7..38c560d 100644 +--- a/demos/CMakeLists.txt ++++ b/demos/CMakeLists.txt +@@ -65,6 +65,15 @@ foreach( i RANGE ${DEMO_COUNT} ) + ${DEMO_COMMON_HEADERS} + ${CONFIG_HEADER} ) + ++ FIND_PACKAGE(OpenSSL) # Find the OpenSSL Package ++ IF(OPENSSL_FOUND) ++ MESSAGE("Found: " ${OPENSSL_LIBRARIES}) ++ INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) ++ TARGET_COMPILE_DEFINITIONS(${DEMO_EXE_NAME} PUBLIC OPENSSL_LOAD_CONF) ++ TARGET_LINK_LIBRARIES(${DEMO_EXE_NAME} PUBLIC ${OPENSSL_LIBRARIES}) ++ ELSE() ++ MESSAGE(WARNING "Building with OpenSSL Engine expected to fail") ++ ENDIF() + # Set the demo function to run. + target_compile_definitions( ${DEMO_EXE_NAME} + PRIVATE RunDemo=${CURRENT_DEMO_FUNCTION} ) +diff --git a/demos/app/iot_demo.c b/demos/app/iot_demo.c +index 27b7dd5..337e587 100644 +--- a/demos/app/iot_demo.c ++++ b/demos/app/iot_demo.c +@@ -37,7 +37,11 @@ + + /* Error handling include. */ + #include "iot_error.h" +- ++#include "openssl/conf.h" ++#include "openssl/err.h" ++#include "openssl/ssl.h" ++#include "openssl/ec.h" ++#include "openssl/evp.h" + /* Common demo includes. */ + #include "iot_demo_arguments.h" + #include "iot_demo_logging.h" +@@ -135,6 +139,14 @@ int main( int argc, + pCredentials = &credentials; + } + ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) ++ OPENSSL_config(NULL); ++#else ++ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); ++#endif ++ ++ OpenSSL_add_all_algorithms(); ++ + /* Call the SDK initialization function. */ + sdkInitialized = IotSdk_Init(); +
diff --git a/demos/linux/aws_eou/buildScript.sh b/demos/linux/aws_eou/buildScript.sh new file mode 100644 index 0000000..ce4a869 --- /dev/null +++ b/demos/linux/aws_eou/buildScript.sh
@@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Determine directory where script is stored +AWS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${AWS_DIR} + +git clone https://github.com/aws/aws-iot-device-sdk-embedded-C.git +cd aws-iot-device-sdk-embedded-C +git checkout v4_beta +git submodule update --init --recursive +mkdir build +cp ../aws_c_sdk_eou.patch . +git apply aws_c_sdk_eou.patch +cd build +cmake ../. +cmake -DIOT_NETWORK_USE_OPENSSL:BOOL=ON . +make iot_demo_mqtt -j +cp ../../AmazonRootCA1.pem output/bin/
diff --git a/demos/linux/azure/Makefile b/demos/linux/azure/Makefile new file mode 100644 index 0000000..8a9f0ad --- /dev/null +++ b/demos/linux/azure/Makefile
@@ -0,0 +1,20 @@ +CC=gcc # gcc || clang +CCOPTIONS=-std=c11 -Wall -Wextra -pedantic -Wstrict-overflow -fno-strict-aliasing -g -MMD -MP -lpthread + +JSMN_DIR := ../../../ext/amazon-freertos/libraries/3rdparty/jsmn + +SSLPATH=-L/openssl +INCLUDEDIR=-I../common/ -I$(JSMN_DIR) -I/usr/local_azure/include/ + +all: azure_imx_register azure_imx_connect + +azure_imx_register: azure_imx_register.c Makefile + $(CC) $(CCOPTIONS) $(SSLPATH) azure_imx_register.c mqtt_azure.c $(JSMN_DIR)/jsmn.c $(INCLUDEDIR) $(BUILDARGS) -ljwt -lcrypto -lssl -lpaho-mqtt3cs -o azure_imx_register + +azure_imx_connect: azure_imx_connect.c Makefile + $(CC) $(CCOPTIONS) $(SSLPATH) azure_imx_connect.c mqtt_azure.c $(JSMN_DIR)/jsmn.c $(INCLUDEDIR) $(BUILDARGS) -ljwt -lcrypto -lssl -lpaho-mqtt3cs -o azure_imx_connect + +clean: + -rm azure_imx_connect azure_imx_register *.d + +.PHONY: all
diff --git a/demos/linux/azure/azureRootCA.pem b/demos/linux/azure/azureRootCA.pem new file mode 100644 index 0000000..bf8e10a --- /dev/null +++ b/demos/linux/azure/azureRootCA.pem
@@ -0,0 +1,68 @@ +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- \ No newline at end of file
diff --git a/demos/linux/azure/azure_imx_connect.c b/demos/linux/azure/azure_imx_connect.c new file mode 100644 index 0000000..136b95c --- /dev/null +++ b/demos/linux/azure/azure_imx_connect.c
@@ -0,0 +1,270 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +// [START iot_mqtt_include] +#define _XOPEN_SOURCE 500 +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "MQTTClient.h" +#include "jwt.h" +#include "openssl/conf.h" +#include "openssl/ec.h" +#include "openssl/evp.h" + +#include "mqtt_azure.h" +// [END iot_mqtt_include] + +#define TRACE 1 /* Set to 1 to enable tracing */ + +void Usage() +{ + printf("azure_imx_connect \\\n"); + printf("\t--payload \"Message to publish\"\\\n"); + printf("\t--deviceid <your device id>\\\n"); + printf("\t--keypath <e.g. ./ec_private.pem>\\\n"); + printf("\t--rootpath root CA file of Azure in PEM format\n\n"); + printf("\t--devcert device certificate in PEM format\n\n"); + printf("\t--hubname azure IoT hub name\n\n"); + printf("\t--username azure IoT user name\n\n"); +} + +bool calculate_url(char* hubname, char * deviceid) +{ + size_t n = snprintf(opts.address, + sizeof(opts.address), + "ssl://%s:8883", + hubname); + size_t m = snprintf(opts.username, + sizeof(opts.username), + "%s/%s/?api-version=2018-06-30", + hubname, + deviceid); + + if (n > sizeof(opts.address) || m > sizeof(opts.username)) { + printf( + "Error, buffer for storing hubname/username was too small.\n"); + return false; + } + return true; +} + +bool calculate_topic(char * deviceid) +{ + size_t n = snprintf(opts.topic, + sizeof(opts.topic), + "devices/%s/messages/events/", + deviceid); + if (n > sizeof(opts.topic)) { + printf("Error, buffer for storing device ID was too small.\n"); + return false; + } + return true; +} + +bool get_connection_params_file(char * filename) +{ + FILE *fk = fopen(filename, "rb"); + if (fk == NULL) + { + printf("Can not open the file [%s]\n", filename); + return false; + } + fseek(fk, 0, SEEK_END); + long json_file_len = ftell(fk); + fseek(fk, 0, SEEK_SET); + char *json_file = malloc(json_file_len +1); + fread(json_file, 1, json_file_len, fk); + json_file[json_file_len] = 0; + fclose(fk); + + printf("file contents %s\n", json_file); + + char assignedHub[256]; + char deviceId[256]; + char payload[256]; + char key[256]; + char cert[256]; + char root[256]; + + if (!get_json_tagValue(json_file, "deviceId", deviceId) || + !get_json_tagValue(json_file, "assignedHub", assignedHub) || + !get_json_tagValue(json_file, "payload", payload) || + !get_json_tagValue(json_file, "keypath", key) || + !get_json_tagValue(json_file, "devcert", cert) || + !get_json_tagValue(json_file, "rootpath", root)) + { + printf("File missing required parameters!\n"); + free(json_file); + return false; + } + + free(json_file); + + strcpy((char *restrict) & opts.payload, payload); + strcpy((char *restrict) & opts.clientid, deviceId); + strcpy((char *restrict) & opts.keypath, key); + strcpy((char *restrict) & opts.devcert, cert); + strcpy((char *restrict) & opts.rootpath, root); + + if (!calculate_url(assignedHub, deviceId) || !calculate_topic(deviceId)) + { + return false; + } + return true; +} + +/** + * Helper to parse arguments passed to app. Returns false if there are missing + * or invalid arguments; otherwise, returns true indicating the caller should + * free the calculated client ID placed on the opts structure. + * + * TODO: (class) Consider getopt + */ +// [START iot_mqtt_opts] +bool GetOpts(int argc, char **argv) +{ + int pos = 1; + if (argc < 2) { + return false; + } + + if (strcmp(argv[pos], "--json") == 0) { + if (++pos < argc) { + char * filename = argv[pos]; + printf("Reading parameters from json file %s\n", filename); + if (get_connection_params_file(filename)) + { + return true; + } + } + exit(EXIT_FAILURE); + } + char *deviceid; + char hubname[257]; + bool hasPayload = false; + + while (pos < argc) { + if (strcmp(argv[pos], "--payload") == 0) { + if (++pos < argc) { + //opts.payload = argv[pos]; + strcpy((char *restrict) & opts.payload, argv[pos]); + hasPayload = true; + } + else { + return false; + } + } + if (strcmp(argv[pos], "--deviceid") == 0) { + if (++pos < argc) { + deviceid = argv[pos]; + } + else + return false; + } + else if (strcmp(argv[pos], "--keypath") == 0) { + if (++pos < argc) + strcpy((char *restrict) & opts.keypath, argv[pos]); + //opts.keypath = argv[pos]; + else + return false; + } + else if (strcmp(argv[pos], "--devcert") == 0) { + if (++pos < argc) + strcpy((char *restrict) & opts.devcert, argv[pos]); + //opts.devcert = argv[pos]; + else + return false; + } + else if (strcmp(argv[pos], "--rootpath") == 0) { + if (++pos < argc) + strcpy((char *restrict) & opts.rootpath, argv[pos]); + //opts.rootpath = argv[pos]; + else + return false; + } + else if (strcmp(argv[pos], "--topic") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.topic, argv[pos]); + } + else + return false; + } + else if (strcmp(argv[pos], "--hubname") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & hubname, argv[pos]); + } + else + return false; + } + else if (strcmp(argv[pos], "--username") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.username, argv[pos]); + } + else + return false; + } + + pos++; + } + + if (!hasPayload) { + printf("Payload not passed\n"); + return false; + } + + if (!calculate_url(hubname, deviceid) || !calculate_topic(deviceid)) + { + return false; + } + + strcpy((char *restrict) & opts.clientid, deviceid); + return true; +} +// [END iot_mqtt_opts] + +/** + * Connects MQTT client and transmits payload. + */ +// [START iot_mqtt_run] +int main(int argc, char *argv[]) +{ + if (GetOpts(argc, argv)) { +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + OPENSSL_config(NULL); +#else + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); +#endif + OpenSSL_add_all_algorithms(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); + int rc = -1; + + rc = register_device(false); + printf("Publish done with error code : %d\n", rc); + } + else { + Usage(); + } + + EVP_cleanup(); +} +// [END iot_mqtt_run]
diff --git a/demos/linux/azure/azure_imx_register.c b/demos/linux/azure/azure_imx_register.c new file mode 100644 index 0000000..3f196be --- /dev/null +++ b/demos/linux/azure/azure_imx_register.c
@@ -0,0 +1,255 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +// [START iot_mqtt_include] +#define _XOPEN_SOURCE 500 +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "MQTTClient.h" +#include "jwt.h" +#include "openssl/conf.h" +#include "openssl/ec.h" +#include "openssl/evp.h" + +#include "mqtt_azure.h" +// [END iot_mqtt_include] + +#define TRACE 1 /* Set to 1 to enable tracing */ + +#define OPT_REGISTRATION_ID "registration_id" +#define OPT_JSON_FILE "json" +#define OPT_KEY_FILE "keypath" +#define OPT_ROOT_CERT_FILE "rootpath" +#define OPT_DEVICE_CERT_FILE "devcert" +#define OPT_ID_SCOPE "id_scope" + + +void Usage() +{ + printf("azure_imx_register \n"); + printf("\t--%-25s configuration file containing options\n", OPT_JSON_FILE " <filename>"); + printf("\t--%-25s registration id\n", OPT_REGISTRATION_ID " <id>"); + printf("\t--%-25s private key file in PEM format\n", OPT_KEY_FILE " <filename>"); + printf("\t--%-25s root CA file of Azure in PEM format\n", OPT_ROOT_CERT_FILE " <filename>"); + printf("\t--%-25s device certificate in PEM format\n", OPT_DEVICE_CERT_FILE " <filename>"); + printf("\t--%-25s id scope of NXP-DPS in azure IoT\n", OPT_ID_SCOPE " <id_scope>"); +} + + +bool calculate_username(const char * idscope, const char *deviceid) +{ + size_t n = snprintf(opts.username, + sizeof(opts.username), + "%s/registrations/%s/api-version=2018-11-01&ClientVersion=1.4.0", + idscope, + deviceid); + if (n > sizeof(opts.username)) { + printf( + "Error, buffer for storing idscope in address was too " + "small.\n"); + return false; + } + return true; +} + + +bool get_registration_params_file(char * filename) +{ + FILE *fk = fopen(filename, "rb"); + if (fk == NULL) + { + printf("Can not open the file [%s]\n", filename); + return false; + } + fseek(fk, 0, SEEK_END); + long json_file_len = ftell(fk); + fseek(fk, 0, SEEK_SET); + char *json_file = malloc(json_file_len +1); + fread(json_file, 1, json_file_len, fk); + json_file[json_file_len] = 0; + fclose(fk); + + printf("file contents %s\n", json_file); + + char idscope[256]; + char registrationId[256]; + char key[256]; + char cert[256]; + char root[256]; + + if (!get_json_tagValue(json_file, OPT_REGISTRATION_ID, registrationId) || + !get_json_tagValue(json_file, OPT_ID_SCOPE, idscope) || + !get_json_tagValue(json_file, OPT_KEY_FILE, key) || + !get_json_tagValue(json_file, OPT_DEVICE_CERT_FILE, cert) || + !get_json_tagValue(json_file, OPT_ROOT_CERT_FILE, root)) + { + printf("File missing required parameters!\n"); + free(json_file); + return false; + } + + free(json_file); + + strcpy(opts.address, MQTT_REGISTER_URL_AZURE); + strcpy((char *restrict) & opts.clientid, registrationId); + strcpy((char *restrict) & opts.keypath, key); + strcpy((char *restrict) & opts.devcert, cert); + strcpy((char *restrict) & opts.rootpath, root); + + if (!calculate_username(idscope, opts.clientid)) + { + return false; + } + + return true; +} + +/** + * Helper to parse arguments passed to app. Returns false if there are missing + * or invalid arguments; otherwise, returns true indicating the caller should + * free the calculated client ID placed on the opts structure. + * + * TODO: (class) Consider getopt + */ +// [START iot_mqtt_opts] +bool GetOpts(int argc, char **argv) +{ + if (argc < 2) { + return false; + } + int pos = 1; + if (strcmp(argv[pos], "--" OPT_JSON_FILE) == 0) { + if (++pos < argc) { + char * filename = argv[pos]; + printf("Reading parameters from json file %s\n", filename); + if (get_registration_params_file(filename)) + { + return true; + } + } + exit(EXIT_FAILURE); + } + + char *deviceid; + char idscope[257]; + bool hasIdScope = false; + bool hasRegisterId = false; + bool hasKeyPath = false; + bool hasCertPath = false; + bool hasRootCertPath = false; + + while (pos < argc) { + if (strcmp(argv[pos], "--" OPT_REGISTRATION_ID) == 0) { + if (++pos < argc) { + deviceid = argv[pos]; + printf("Registration ID: %s \n", deviceid); + hasRegisterId = true; + } + else + return false; + } + else if (strcmp(argv[pos], "--" OPT_KEY_FILE) == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.keypath, argv[pos]); + hasKeyPath = true; + } + else + return false; + } + else if (strcmp(argv[pos], "--" OPT_DEVICE_CERT_FILE) == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.devcert, argv[pos]); + hasCertPath = true; + } + else + return false; + } + else if (strcmp(argv[pos], "--" OPT_ROOT_CERT_FILE) == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.rootpath, argv[pos]); + hasRootCertPath = true; + } + else + return false; + } + else if (strcmp(argv[pos], "--" OPT_ID_SCOPE) == 0) { + if (++pos < argc) { + strcpy((char *restrict) & idscope, argv[pos]); + hasIdScope = true; + } + else + return false; + } + + pos++; + } + + if (!hasRegisterId || !hasKeyPath || !hasCertPath || !hasRootCertPath || !hasIdScope) + { + printf("See usage\n"); + return false; + } + + strcpy((char *restrict) & opts.clientid, deviceid); + strcpy(opts.address, MQTT_REGISTER_URL_AZURE); + + if (!calculate_username(idscope, opts.clientid)) + { + return false; + } + + return true; +} +// [END iot_mqtt_opts] + +/** + * Connects MQTT client and transmits payload. + */ +// [START iot_mqtt_run] +int main(int argc, char *argv[]) +{ + + if (GetOpts(argc, argv)) { + printf("keyref: %s\n", opts.keypath); + printf("rootCA: %s\n", opts.rootpath); + printf("devCert: %s\n", opts.devcert); + +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + OPENSSL_config(NULL); +#else + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); +#endif + OpenSSL_add_all_algorithms(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); + int rc = -1; + + rc = register_device(true); + printf("Publish done with error code : %d\n", rc); + } + else { + Usage(); + } + + EVP_cleanup(); +} +// [END iot_mqtt_run]
diff --git a/demos/linux/azure/buildScript.sh b/demos/linux/azure/buildScript.sh new file mode 100644 index 0000000..26e75f0 --- /dev/null +++ b/demos/linux/azure/buildScript.sh
@@ -0,0 +1,64 @@ +#!/bin/sh +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Determine directory where script is stored +DEMO_DIR="$( cd "$(dirname "$0")" ; pwd -P )" +echo ${DEMO_DIR} +cd ${DEMO_DIR} + +COMMON_DIR=${DEMO_DIR}/../common/ +cd ${COMMON_DIR} +# building jansson +if [ ! -d jansson ]; then + git clone https://github.com/akheron/jansson.git + cd jansson + autoreconf -i + ./configure + make + sudo make install + cd .. +fi + +sudo ldconfig /usr/local/lib + +# building libjwt +if [ ! -d libjwt ]; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + git clone https://github.com/benmcollins/libjwt.git + cd libjwt + autoreconf -i + ./configure + make all + sudo make install + cd .. +fi + +sudo ldconfig /usr/local/lib + +# building paho c client +# NOTE: Building the paho c client requires a filesystem +# that supports symbolic links +# There is an alignment issue with the packaged version of paho.mqtt +# Hence we clone and build it to usr/local_azure/ folder +# +if [ ! -d paho.mqtt.c ]; then + git clone https://github.com/eclipse/paho.mqtt.c.git + cd paho.mqtt.c + sudo mkdir -p /usr/local_azure/lib + sudo mkdir -p /usr/local_azure/bin + sudo make prefix=/usr/local_azure + sudo make install prefix=/usr/local_azure + sudo ldconfig /usr/local/lib + cd .. +fi + +sudo ldconfig /usr/local_azure/lib /usr/local/lib +# export LD_RUN_PATH=/usr/local/lib +#building the app +cd ${DEMO_DIR} + +make all
diff --git a/demos/linux/azure/mqtt_azure.c b/demos/linux/azure/mqtt_azure.c new file mode 100644 index 0000000..144ff1e --- /dev/null +++ b/demos/linux/azure/mqtt_azure.c
@@ -0,0 +1,344 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019,2020 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ +#define _XOPEN_SOURCE 500 +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "MQTTClient.h" +#include "jwt.h" +#include "jsmn.h" +#include "openssl/conf.h" +#include "openssl/ec.h" +#include "openssl/evp.h" + +#include "mqtt_azure.h" + +static const int kQos = 1; +static const unsigned long kTimeout = 10000L; + +static const unsigned long kInitialConnectIntervalMillis = 500L; +static const unsigned long kMaxConnectIntervalMillis = 6000L; +static const unsigned long kMaxConnectRetryTimeElapsedMillis = 900000L; +static const float kIntervalMultiplier = 1.5f; + +volatile MQTTClient_deliveryToken deliveredtoken; +register_state state = ASSIGNING; +volatile uint16_t msgnum = 0; + +/** + * 1) Register Azure device: + * Required parameters (either in JSON file or via command line): + * -Registration ID of the device + * -Id_Scope the Azuer IoTHub DPS + * -Path to keyref file + * -Path to device certificate file + * -Path to azure root certificate file + * 2) Publish a given message, passed in as payload, to Cloud IoT Core using the + * values passed to the sample, stored in the global opts structure. Returns + * the result code from the MQTT client + */ +// [START iot_mqtt_register] + +bool get_json_tagValue(char *js, const char * key, char * value) +{ + jsmn_parser p; + jsmntok_t tokens[50]; /* We expect no more than 50 JSON tokens */ + jsmn_init(&p); + int count = jsmn_parse(&p, js, strlen(js), tokens, 50); + for (int i = 1; i < count; i += 2) + { + jsmntok_t *t = &tokens[i]; + char *tag = js + t->start; + if (!memcmp(tag, key, t->end - t->start)) + { + t = &tokens[i + 1]; + memcpy(value, js + t->start, t->end - t->start); + value[t->end - t->start] = '\0'; + return true; + } + } + printf("%s not found\n", key); + return false; +} + +bool write_registration_configuration(char* payload) +{ + char assignedhub[256]; + char deviceId[256]; + char registrationId[256]; + char status[256]; + if (!get_json_tagValue(payload, "registrationId", registrationId) || + !get_json_tagValue(payload, "status", status) || + !get_json_tagValue(payload, "assignedHub", assignedhub) || + !get_json_tagValue(payload, "deviceId", deviceId)) + { + return false; + } + char * filename = malloc(strlen(deviceId) + 4); + strcpy(filename, deviceId); + filename = strcat(filename, ".txt"); + + FILE* fp = fopen(filename, "wb"); + fprintf(fp, "{\n"); + fprintf(fp, " \"assignedHub\": \"%s\",\n", assignedhub); + fprintf(fp, " \"deviceId\": \"%s\",\n", deviceId); + fprintf(fp, " \"registration_id\": \"%s\",\n", registrationId); + fprintf(fp, " \"status\": \"%s\",\n", status); + fprintf(fp, " \"keypath\": \"%s\",\n", opts.keypath); + fprintf(fp, " \"devcert\": \"%s\",\n", opts.devcert); + fprintf(fp, " \"rootpath\": \"%s\",\n", opts.rootpath); + fprintf(fp, " \"payload\": \"hello message from device %s\"\n", deviceId); + fprintf(fp, "}"); + fclose(fp); + return true; +} + +void delivered(void *context, MQTTClient_deliveryToken dt) +{ + (void) (context); + printf("Message with token value %d delivery confirmed\n", dt); + deliveredtoken = dt; +} + +int msgarrvd( + void *client, char *topicName, int topicLen, MQTTClient_message *message) +{ + (void) (topicLen); + int i; + char *payloadptr; + MQTTClient_deliveryToken token = { 0 }; + MQTTClient_message pubmsg = MQTTClient_message_initializer; + pubmsg.payload = ""; + pubmsg.payloadlen = 0; + pubmsg.qos = 1; + pubmsg.retained = 0; + + printf("Message #%d arrived \n", msgnum++); + printf(" topic: %s\n", topicName); + printf(" message: "); + payloadptr = message->payload; + for (i = 0; i < message->payloadlen; i++) { + putchar(*payloadptr++); + } + putchar('\n'); + switch (state) + { + case ASSIGNING: + pubmsg.qos = 1; + char *message_ptr = malloc(message->payloadlen + 1); + memcpy(message_ptr, message->payload, message->payloadlen); + message_ptr[message->payloadlen] = '\0'; + char opid[256]; + char status[64]; + if (!(get_json_tagValue(message_ptr, "status", status) && + get_json_tagValue(message_ptr, "operationId", opid))) + { + printf("Registartion failed with message: %s\n", message_ptr); + exit(EXIT_FAILURE); + } + if (!strcmp(status, "assigning")) + { + char *topicOperationId = malloc(strlen(MQTT_PUBLISH_MSG_OPID_AZURE) + strlen(opid) + 1); // +1 for the null-terminator + if (topicOperationId == NULL) + { + printf("malloc error\n"); + exit(EXIT_FAILURE); + } + strcpy(topicOperationId, MQTT_PUBLISH_MSG_OPID_AZURE); + strcat(topicOperationId, opid); + // Prevent Throttling by backend: As per this link, maximum 5 requests per 10 seconds allowed: + // https://github.com/MicrosoftDocs/azure-docs/blob/master/includes/iot-dps-limits.md + // A better approach would be to react appropriately in case throttling occurs + { + struct timespec req; + const struct timespec *pReq; + + req.tv_sec = 1; + req.tv_nsec = 0; + pReq = &req; + for (unsigned int i = 0; i < (msgnum % 5); i++) + { + nanosleep(pReq, NULL); + } + } + int rc = MQTTClient_publishMessage((MQTTClient *)client, topicOperationId, &pubmsg, &token); + if (rc != MQTTCLIENT_SUCCESS) { + free(topicOperationId); + exit(EXIT_FAILURE); + } + printf("Device State is assigning\n"); + state = ASSIGNING; + free(topicOperationId); + } + else if (!strcmp(status, "assigned")) + { + printf("Device State is now ASSIGNED\n"); + if (!write_registration_configuration(message_ptr)) + { + printf("Error while writing file\n"); + free(message_ptr); + exit(EXIT_FAILURE); + } + state = STOP; + } + else + { + free(message_ptr); + printf("Error while assigning\n"); + exit(EXIT_FAILURE); + } + free(message_ptr); + break; + case STOP: + break; + default: + printf("Error state\n"); + exit(EXIT_FAILURE); + break; + } + MQTTClient_freeMessage(&message); + MQTTClient_free(topicName); + return 1; +} + +void connlost(void *context, char *cause) +{ + (void) (context); + printf("\nConnection lost\n"); + printf(" cause: %s\n", cause); +} + +int register_device(bool registerDevice) +{ + int rc = -1; + MQTTClient client = {0}; + MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; + MQTTClient_message pubmsg = MQTTClient_message_initializer; + MQTTClient_deliveryToken token = {0}; + +#ifdef DEBUG + printf("MQTTClient_create opts.address = %s \n", opts.address); + printf("MQTTClient_create opts.username = %s \n", opts.username); + printf("MQTTClient_create opts.clientid = %s \n", opts.clientid); + printf("MQTTClient_create opts.keypath = %s \n", opts.keypath); + printf("MQTTClient_create opts.devcert = %s \n", opts.devcert); + printf("MQTTClient_create opts.rootpath = %s \n", opts.rootpath); +#endif + if ((MQTTClient_create(&client, + opts.address, + opts.clientid, + MQTTCLIENT_PERSISTENCE_NONE, + NULL)) != MQTTCLIENT_SUCCESS) { + printf("MQTTClient_create failed \n"); + exit(EXIT_FAILURE); + } + conn_opts.keepAliveInterval = 60; + conn_opts.cleansession = 1; + conn_opts.reliable = 0; + conn_opts.username = opts.username; + conn_opts.password = NULL; + MQTTClient_SSLOptions sslopts = MQTTClient_SSLOptions_initializer; + + sslopts.enableServerCertAuth = 0; + sslopts.trustStore = opts.rootpath; + sslopts.privateKey = opts.keypath; + sslopts.keyStore = opts.devcert; + conn_opts.ssl = &sslopts; + + unsigned long retry_interval_ms = kInitialConnectIntervalMillis; + unsigned long total_retry_time_ms = 0; + MQTTClient_setCallbacks(client, client, connlost, msgarrvd, delivered); + while ( + (rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { + if (rc == 3) { // connection refused: server unavailable + sleep(retry_interval_ms / 1000); + total_retry_time_ms += retry_interval_ms; + if (total_retry_time_ms >= kMaxConnectRetryTimeElapsedMillis) { + printf("Failed to connect, maximum retry time exceeded."); + exit(EXIT_FAILURE); + } + retry_interval_ms *= kIntervalMultiplier; + if (retry_interval_ms > kMaxConnectIntervalMillis) { + retry_interval_ms = kMaxConnectIntervalMillis; + } + } + else { + printf("Failed to connect, return code %d\n", rc); + exit(EXIT_FAILURE); + } + } + pubmsg.qos = kQos; + pubmsg.retained = 0; + + if (registerDevice) + { + pubmsg.payload = ""; + pubmsg.payloadlen = 0; + rc = MQTTClient_publishMessage(client, MQTT_REGISTRATION_MSG_AZURE, &pubmsg, &token); + + if (rc != MQTTCLIENT_SUCCESS) { + exit(EXIT_FAILURE); + } + + MQTTClient_subscribe(client, MQTT_SUBSCRIBE_MSG_AZURE, 1); + struct timespec req; + const struct timespec *pReq; + + req.tv_sec = 1; + req.tv_nsec = 0; + pReq = &req; + + unsigned int registration_time_sec = 0; + while (state != STOP) { + nanosleep(pReq, NULL); + registration_time_sec++; + if (registration_time_sec > REGISTRATION_TIMEOUT) + { + printf("Failed to complete registration, maximum wait time exceeded.\n"); + exit(EXIT_FAILURE); + } + } + MQTTClient_unsubscribe(client, MQTT_SUBSCRIBE_MSG_AZURE); + } + else + { + pubmsg.payload = opts.payload; + pubmsg.payloadlen = strlen(opts.payload); + state = STOP; + rc = MQTTClient_publishMessage(client, opts.topic, &pubmsg, &token); + printf("MQTTClient_publishMessage done with error %d\n", rc); + if (rc != MQTTCLIENT_SUCCESS) { + exit(EXIT_FAILURE); + } + printf( + "Waiting for up to %lu seconds for publication of %s\n" + "on topic %s for client with ClientID: %s\n", + (kTimeout / 1000), + opts.payload, + opts.topic, + opts.clientid); + } + MQTTClient_disconnect(client, 10000); + MQTTClient_destroy(&client); + + return rc; +} +// [END iot_mqtt_register]
diff --git a/demos/linux/azure/mqtt_azure.h b/demos/linux/azure/mqtt_azure.h new file mode 100644 index 0000000..200bfc7 --- /dev/null +++ b/demos/linux/azure/mqtt_azure.h
@@ -0,0 +1,76 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019,2020 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +#ifndef _MQTT_PUBLISH +#define _MQTT_PUBLISH + +//Azure IoTHub global endpoint URL +#define MQTT_REGISTER_URL_AZURE "ssl://global.azure-devices-provisioning.net:8883" + +//string for publishing initial request for registration +#define MQTT_REGISTRATION_MSG_AZURE "$dps/registrations/PUT/iotdps-register/?$rid=1" + +//string for publishing with operationID after initail request +#define MQTT_PUBLISH_MSG_OPID_AZURE "$dps/registrations/GET/iotdps-get-operationstatus/?$rid=2&operationId=" + +//string for subscribing topic to receive registration messages from Azure +#define MQTT_SUBSCRIBE_MSG_AZURE "$dps/registrations/res/#" + +//Fixed timeout in seconds for registration +#define REGISTRATION_TIMEOUT 30 + +//global states for registration process +typedef enum { ASSIGNING, STOP } register_state; + +enum +{ + address_maxlen = 256, + address_size +}; +enum +{ + clientid_maxlen = 256, + clientid_size +}; +enum +{ + topic_maxlen = 256, + topic_size +}; +enum +{ + username_maxlen = 256, + username_size +}; + +struct +{ + char address[address_size]; + char clientid[clientid_size]; + char keypath[256]; + char rootpath[256]; + char topic[topic_size]; + char payload[256]; + char devcert[256]; + char username[username_size]; +} opts; + +int register_device(bool registerDevice); +bool get_json_tagValue(char *js, const char * key, char * value); +bool write_registration_configuration(char* payload); + + +#endif //_MQTT_PUBLISH
diff --git a/demos/linux/azure/readme.rst b/demos/linux/azure/readme.rst new file mode 100644 index 0000000..380a206 --- /dev/null +++ b/demos/linux/azure/readme.rst
@@ -0,0 +1,203 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: shell + +.. _linux-demos-azure: + +Azure Demo for iMX Linux / Raspberry Pi +======================================================================== + +This demo demonstrates connection to Azure IoTHub using pre-provisioned +device credentials and demonstrates publish/subscribe procedure using MQTT. + +Prerequisites +---------------------------------- + +- Azure account +- SD Card image with SE050 Middleware pre-installed. The application is + built on the iMX platform. +- IMX6UL-EVK platform or Raspberry pi connected to the Internet + +Preparing the credentials and Provisioning the secure element +------------------------------------------------------------------------- + +Use ssscli tool from iMX/Rpi platform + +1) Complete :numref:`cli-doc-pre-steps` :ref:`cli-doc-pre-steps` + +#) To create certificates on imx and Raspberry Pi, call:: + + cd simw-top/pycli/Provisioning + python3 GenerateAZURECredentials.py + python3 ResetAndUpdate_AZURE.py + +#) Certificates and Keys are generated at ``simw-top/pycli/Provisioning/azure`` + + +Registering Device +------------------------------------------------------------- + +To register the device onto the IoT Hub portal, we can either upload Root credentials manually +or we can register an individual device using ``azure_imx_register`` application. If you wish +to upload Root credentials, skip the next steps and proceed to :ref:`azure-imx-upload-root`. + + +.. _azure-register-device: + +Create device enrollment in azure IoT Hub portal +------------------------------------------------------------- +**This step is only for individual device enrollment.** + +Prerequisite: Azure IOT hub and Azure IOT HUB DPS account which are linked. + +Refer: https://docs.microsoft.com/en-us/azure/iot-dps/tutorial-set-up-cloud + +https://docs.microsoft.com/en-us/azure/iot-dps/quick-setup-auto-provision + +Once required accounts exist we can enroll the devices. +For this we only need device certificate which we created in above steps. + +Follow the steps to enroll the device: https://docs.microsoft.com/en-us/azure/iot-dps/tutorial-provision-device-to-hub + +.. note:: When creating device certificates be sure to use only lower-case alphanumerics and hyphens in your device name. + +Run ``azure_imx_register`` application to register the device onto your IoT Hub. + +``azure_imx_register`` application can take parameters either via JSON file or via command line. +The required parameters are: + +- registerid: Registration id of the device (common name of device certificate) +- keypath: Path to reference key pem file +- devcert: Path to device certificate +- rootpath: Path to azure root CA certificate +- idscope: IDScope (can found in Azure IoT-DPS account - Overview) + +Run via command line as:: + + ./azure_imx_register --registerid test-device --keypath keyref.pem --rootpath azureRootCA.pem --devcert cert.pem --idscope 0ne00068F95 + +Or pass JSON file as:: + + ./azure_imx_register --json json_register_config.json + +Sample JSON file:: + + { + "devcert": "cert.pem", + "keypath": "keyref.pem", + "id_scope": "0ne00068F95", + "registration_id": "test-device", + "rootpath": "azureRootCA.pem" + } + +Upon successful registration, "DeviceID".txt file is created with DeviceID, assigned hub along with keyref, device certificate and root certificate path. +This file can be given as input to connect to device and send messages. + +The device is now registered and appears on IoT Azure hub under devices tab + +We can pass this JSON file to ``azure_imx_connect`` application to connect to IoT Hub. You can skip the next step and proceed to :ref:`azure-openssl-build`. + + +.. _azure-imx-upload-root: + +Uploading root certificates to IoT Hub +------------------------------------------------------------- + +1) On Azure IoT Hub portal, Navigate to ``Dashboard --> <Your IoT Hub> --> Certificates``. Click on Add + +#) Enter a friendly name and upload the root certificate created in the previous step. Location - ``simw-top/pycli/Provisioning/azure/RootCA.cer`` -> Save + +#) Your certificate will show in the Certificate Explorer list. Click on certificate added + +#) In Certificate Details, click Generate Verification Code + +#) The provisioning service creates a Verification Code that you can use to validate the certificate ownership. Copy the code to your clipboard + +#) Use the verification_certificate.py to generate a verify certificate (verifyCert4.cer) :: + + cd simw-top/pycli/Provisioning + python verification_certificate.py <RootCA_Certificate> <RootCA_Keypair> <Verification Code> + +#) On ``Azure portal -> Certificate Details``, upload the verifyCert4.cer file generated and click Verify. + + STATUS of your certificate should change to ``Verified`` in the Certificate Explorer list + + +.. _azure-openssl-build: + + +Build the OpenSSL engine [Optional] +------------------------------------------------------------- + +.. note:: + This step is optional in case you are using a prepared + SD card image from NXP. + +The OpenSSL engine uses the sss abstraction layer to access the crypto +services of the secure element, the implementation remains dependent on +the secure element attached. The following illustrates compiling the +OpenSSL engine for SE050 connected over I2C. + +:: + + cd simw-top + python scripts/create_cmake_projects.py + cd ../simw-top_build/imx_native_se050_t1oi2c + cmake --build . + make install + ldconfig /usr/local/lib + +.. note:: + Replace ``imx_native_se050_t1oi2c`` with ``raspbian_native_se050_t1oi2c`` + when building for Raspberry Pi. + +Run the example +--------------- + +1) Use 'buildScript.sh' script at simw-top/demos/linux/azure/ to download all dependencies and build the mqtt application for azure call:: + + cd /simw-top/demos/linux/azure + ./buildScript.sh + +#) Based on OpenSSL version and applicable Secure Element, select the appropriate configuration file in + ``<MW_SRC_DIR>/simw-top/demos/linux/common`` directory:: + + openssl11_sss_a71ch.cnf ----- OpenSSL 1.1.1 and A71CH + openssl11_sss_se050.cnf ----- OpenSSL 1.1.1 and SE050 + openssl_sss_a71ch.cnf ----- OpenSSL 1.0.0 and A71CH + openssl_sss_se050.cnf ----- OpenSSL 1.0.0 and SE050 + +#) Set the openssl config path as call:: + + $ export OPENSSL_CONF=/simw-top/demos/linux/common/<appropriate-cnf-file> + +#) To run the application, call:: + + $ ./azure_imx_connect --deviceid "<devive_name>" --keypath simw-top/pycli/Provisioning/azure/<UID>_device_reference_key.pem --rootpath simw-top/demos/linux/azure/azureRootCA.pem --devcert simw-top/pycli/Provisioning/azure/<UID>_device_certificate.cer --hubname <IotHubName>.azure-devices.net --username <IotHubName> --payload "<MESSAGE>" + + + Or pass JSON file as:: + + ./azure_imx_connect --json json_connect_config.json + + Sample json_connect_config.json:: + + { + "assignedHub": "ABCD.azure-devices.net", + "deviceId": "test-device", + "registration_id": "test-device", + "status": "assigned", + "keypath": "keyref.pem", + "devcert": "cert.pem", + "rootpath": "azureRootCA.pem", + "payload": "hello message from device test-device" + } + + .. note:: If you have used ``azure_imx_register`` application, ``json_connect_config.json`` is same as ``"DeviceID".txt`` + + +.. note:: + 1) Export the OpenSSL conf path to the exact location of the file. The above example is for illustrative purpose + 2) While executing the application, use the appropriate values for device cert, Device id, Path, hubname and username
diff --git a/demos/linux/common/mqtt_publish.c b/demos/linux/common/mqtt_publish.c new file mode 100644 index 0000000..5625492 --- /dev/null +++ b/demos/linux/common/mqtt_publish.c
@@ -0,0 +1,158 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "MQTTClient.h" +#include "jwt.h" +#include "openssl/conf.h" +#include "openssl/ec.h" +#include "openssl/evp.h" + +#include "mqtt_publish.h" + +static const int kQos = 1; +static const unsigned long kTimeout = 10000L; + +static const unsigned long kInitialConnectIntervalMillis = 500L; +static const unsigned long kMaxConnectIntervalMillis = 6000L; +static const unsigned long kMaxConnectRetryTimeElapsedMillis = 900000L; +static const float kIntervalMultiplier = 1.5f; + +volatile MQTTClient_deliveryToken deliveredtoken; +/** + * Publish a given message, passed in as payload, to Cloud IoT Core using the + * values passed to the sample, stored in the global opts structure. Returns + * the result code from the MQTT client + */ +// [START iot_mqtt_publish] + +void delivered(void *context, MQTTClient_deliveryToken dt) +{ + (void) (context); + printf("Message with token value %d delivery confirmed\n", dt); + deliveredtoken = dt; +} + +int msgarrvd( + void *context, char *topicName, int topicLen, MQTTClient_message *message) +{ + (void) (context); + (void) (topicLen); + int i; + char *payloadptr; + + printf("Message arrived\n"); + printf(" topic: %s\n", topicName); + printf(" message: "); + + payloadptr = message->payload; + for (i = 0; i < message->payloadlen; i++) { + putchar(*payloadptr++); + } + putchar('\n'); + MQTTClient_freeMessage(&message); + MQTTClient_free(topicName); + return 1; +} + +void connlost(void *context, char *cause) +{ + (void) (context); + printf("\nConnection lost\n"); + printf(" cause: %s\n", cause); +} + +int Publish(char *payload, int payload_size) +{ + int rc = -1; + MQTTClient client = {0}; + MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer; + MQTTClient_message pubmsg = MQTTClient_message_initializer; + MQTTClient_deliveryToken token = {0}; + + if ((MQTTClient_create(&client, + opts.address, + opts.clientid, + MQTTCLIENT_PERSISTENCE_NONE, + NULL)) != MQTTCLIENT_SUCCESS) { + printf("MQTTClient_create failed \n"); + exit(EXIT_FAILURE); + } + conn_opts.keepAliveInterval = 60; + conn_opts.cleansession = 1; + conn_opts.reliable = 0; + conn_opts.username = opts.username; + conn_opts.password = NULL; + MQTTClient_SSLOptions sslopts = MQTTClient_SSLOptions_initializer; + + sslopts.enableServerCertAuth = 0; + sslopts.trustStore = opts.rootpath; + sslopts.privateKey = opts.keypath; + sslopts.keyStore = opts.devcert; + conn_opts.ssl = &sslopts; + + unsigned long retry_interval_ms = kInitialConnectIntervalMillis; + unsigned long total_retry_time_ms = 0; + MQTTClient_setCallbacks(client, NULL, connlost, msgarrvd, delivered); + while ( + (rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) { + if (rc == 3) { // connection refused: server unavailable + sleep(retry_interval_ms / 1000); + total_retry_time_ms += retry_interval_ms; + if (total_retry_time_ms >= kMaxConnectRetryTimeElapsedMillis) { + printf("Failed to connect, maximum retry time exceeded."); + exit(EXIT_FAILURE); + } + retry_interval_ms *= kIntervalMultiplier; + if (retry_interval_ms > kMaxConnectIntervalMillis) { + retry_interval_ms = kMaxConnectIntervalMillis; + } + } + else { + printf("Failed to connect, return code %d\n", rc); + exit(EXIT_FAILURE); + } + } + + pubmsg.payload = payload; + pubmsg.payloadlen = payload_size; + pubmsg.qos = kQos; + pubmsg.retained = 0; + rc = MQTTClient_publishMessage(client, opts.topic, &pubmsg, &token); + printf("MQTTClient_publishMessage done with error %d\n", rc); + if (rc != MQTTCLIENT_SUCCESS) { + exit(EXIT_FAILURE); + } + printf( + "Waiting for up to %lu seconds for publication of %s\n" + "on topic %s for client with ClientID: %s\n", + (kTimeout / 1000), + opts.payload, + opts.topic, + opts.clientid); + MQTTClient_disconnect(client, 10000); + MQTTClient_destroy(&client); + + return rc; +} +// [END iot_mqtt_publish] \ No newline at end of file
diff --git a/demos/linux/common/mqtt_publish.h b/demos/linux/common/mqtt_publish.h new file mode 100644 index 0000000..e56341c --- /dev/null +++ b/demos/linux/common/mqtt_publish.h
@@ -0,0 +1,55 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +#ifndef _MQTT_PUBLISH +#define _MQTT_PUBLISH + +enum +{ + address_maxlen = 256, + address_size +}; +enum +{ + clientid_maxlen = 256, + clientid_size +}; +enum +{ + topic_maxlen = 256, + topic_size +}; +enum +{ + username_maxlen = 256, + username_size +}; + +struct +{ + char address[address_size]; + char clientid[clientid_size]; + char *keypath; + char *rootpath; + char topic[topic_size]; + char *payload; + char *devcert; + char username[username_size]; +} opts; + +int Publish(char *payload, int payload_size); + +#endif //_MQTT_PUBLISH \ No newline at end of file
diff --git a/demos/linux/common/openssl11_sss_a71ch.cnf b/demos/linux/common/openssl11_sss_a71ch.cnf new file mode 100644 index 0000000..2c10066 --- /dev/null +++ b/demos/linux/common/openssl11_sss_a71ch.cnf
@@ -0,0 +1,377 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# Note that you can include other files from the main configuration +# file using the .include directive. +#.include filename + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# System default +openssl_conf = nxp_engine + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several certs with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key + +x509_extensions = usr_cert # The extensions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extensions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +basicConstraints = critical,CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) +signer_digest = sha256 # Signing digest to use. (Optional) +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) +ess_cert_id_alg = sha1 # algorithm to compute certificate + # identifier (optional, default: sha1) +[default_conf] +ssl_conf = ssl_sect + +[ssl_sect] +system_default = system_default_sect + +[system_default_sect] +MinProtocol = TLSv1.2 +CipherString = DEFAULT@SECLEVEL=2 +Options = ServerPreference + +[nxp_engine] +engines = engine_section +ssl_conf = ssl_sect + +[engine_section] +e4sss_se050 = e4sss_se050_section + +[e4sss_se050_section] +engine_id = e4sss_a71ch +dynamic_path = /usr/local/lib/libsss_engine.so +init = 1 +default_algorithms = RAND,EC +
diff --git a/demos/linux/common/openssl11_sss_se050.cnf b/demos/linux/common/openssl11_sss_se050.cnf new file mode 100644 index 0000000..2a4f99e --- /dev/null +++ b/demos/linux/common/openssl11_sss_se050.cnf
@@ -0,0 +1,375 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# Note that you can include other files from the main configuration +# file using the .include directive. +#.include filename + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# System default +openssl_conf = nxp_engine + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several certs with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key + +x509_extensions = usr_cert # The extensions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extensions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +basicConstraints = critical,CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) +signer_digest = sha256 # Signing digest to use. (Optional) +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = sha1, sha256, sha384, sha512 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) +ess_cert_id_alg = sha1 # algorithm to compute certificate + # identifier (optional, default: sha1) +[default_conf] +ssl_conf = ssl_sect + +[ssl_sect] +system_default = system_default_sect + +[system_default_sect] +MinProtocol = TLSv1.2 +CipherString = DEFAULT@SECLEVEL=2 + +[nxp_engine] +engines = engine_section + +[engine_section] +e4sss_se050 = e4sss_se050_section + +[e4sss_se050_section] +engine_id = e4sss +dynamic_path = /usr/local/lib/libsss_engine.so +init = 1 +default_algorithms = RAND,RSA,EC +
diff --git a/demos/linux/common/openssl_sss_a71ch.cnf b/demos/linux/common/openssl_sss_a71ch.cnf new file mode 100644 index 0000000..d787a84 --- /dev/null +++ b/demos/linux/common/openssl_sss_a71ch.cnf
@@ -0,0 +1,367 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . +RANDFILE = $ENV::HOME/.rnd +openssl_conf = nxp_engine + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extentions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extentions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) + +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = md5, sha1 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) + +[nxp_engine] +engines = engine_section + +[engine_section] +e4sss_se050 = e4sss_se050_section + +[e4sss_se050_section] +engine_id = e4sss_a71ch +dynamic_path = /usr/local/lib/libsss_engine.so +init = 1 +# For OpenSSL 1.0.2 +default_algorithms = RAND,ECDSA,ECDH +# ###################################### +# For OpenSSL 1.1.0 and 1.1.1 +# default_algorithms = RAND,EC
diff --git a/demos/linux/common/openssl_sss_se050.cnf b/demos/linux/common/openssl_sss_se050.cnf new file mode 100644 index 0000000..edcbe10 --- /dev/null +++ b/demos/linux/common/openssl_sss_se050.cnf
@@ -0,0 +1,369 @@ +# +# OpenSSL example configuration file. +# This is mostly being used for generation of certificate requests. +# + +# This definition stops the following lines choking if HOME isn't +# defined. +HOME = . +RANDFILE = $ENV::HOME/.rnd +openssl_conf = nxp_engine + +# Extra OBJECT IDENTIFIER info: +#oid_file = $ENV::HOME/.oid +oid_section = new_oids + +# To use this configuration file with the "-extfile" option of the +# "openssl x509" utility, name here the section containing the +# X.509v3 extensions to use: +# extensions = +# (Alternatively, use a configuration file that has only +# X.509v3 extensions in its main [= default] section.) + +[ new_oids ] + +# We can add new OIDs in here for use by 'ca', 'req' and 'ts'. +# Add a simple OID like this: +# testoid1=1.2.3.4 +# Or use config file substitution like this: +# testoid2=${testoid1}.5.6 + +# Policies used by the TSA examples. +tsa_policy1 = 1.2.3.4.1 +tsa_policy2 = 1.2.3.4.5.6 +tsa_policy3 = 1.2.3.4.5.7 + +#################################################################### +[ ca ] +default_ca = CA_default # The default ca section + +#################################################################### +[ CA_default ] + +dir = ./demoCA # Where everything is kept +certs = $dir/certs # Where the issued certs are kept +crl_dir = $dir/crl # Where the issued crl are kept +database = $dir/index.txt # database index file. +#unique_subject = no # Set to 'no' to allow creation of + # several ctificates with same subject. +new_certs_dir = $dir/newcerts # default place for new certs. + +certificate = $dir/cacert.pem # The CA certificate +serial = $dir/serial # The current serial number +crlnumber = $dir/crlnumber # the current crl number + # must be commented out to leave a V1 CRL +crl = $dir/crl.pem # The current CRL +private_key = $dir/private/cakey.pem# The private key +RANDFILE = $dir/private/.rand # private random number file + +x509_extensions = usr_cert # The extentions to add to the cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default # Subject Name options +cert_opt = ca_default # Certificate field options + +# Extension copying option: use with caution. +# copy_extensions = copy + +# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs +# so this is commented out by default to leave a V1 CRL. +# crlnumber must also be commented out to leave a V1 CRL. +# crl_extensions = crl_ext + +default_days = 365 # how long to certify for +default_crl_days= 30 # how long before next CRL +default_md = default # use public key default MD +preserve = no # keep passed DN ordering + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = match +stateOrProvinceName = match +organizationName = match +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = privkey.pem +distinguished_name = req_distinguished_name +attributes = req_attributes +x509_extensions = v3_ca # The extentions to add to the self signed cert + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString (PKIX recommendation before 2004) +# utf8only: only UTF8Strings (PKIX recommendation after 2004). +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings. +string_mask = utf8only + +# req_extensions = v3_req # The extensions to add to a certificate request + +[ req_distinguished_name ] +countryName = Country Name (2 letter code) +countryName_default = AU +countryName_min = 2 +countryName_max = 2 + +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default = Some-State + +localityName = Locality Name (eg, city) + +0.organizationName = Organization Name (eg, company) +0.organizationName_default = Internet Widgits Pty Ltd + +# we can do this but it is not needed normally :-) +#1.organizationName = Second Organization Name (eg, company) +#1.organizationName_default = World Wide Web Pty Ltd + +organizationalUnitName = Organizational Unit Name (eg, section) +#organizationalUnitName_default = + +commonName = Common Name (e.g. server FQDN or YOUR name) +commonName_max = 64 + +emailAddress = Email Address +emailAddress_max = 64 + +# SET-ex3 = SET extension number 3 + +[ req_attributes ] +challengePassword = A challenge password +challengePassword_min = 4 +challengePassword_max = 20 + +unstructuredName = An optional company name + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This is required for TSA certificates. +# extendedKeyUsage = critical,timeStamping + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + + +# PKIX recommendation. + +subjectKeyIdentifier=hash + +authorityKeyIdentifier=keyid:always,issuer + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +# Key usage: this is typical for a CA certificate. However since it will +# prevent it being used as an test self-signed certificate it is best +# left out by default. +# keyUsage = cRLSign, keyCertSign + +# Some might want this also +# nsCertType = sslCA, emailCA + +# Include email address in subject alt name: another PKIX recommendation +# subjectAltName=email:copy +# Copy issuer details +# issuerAltName=issuer:copy + +# DER hex encoding of an extension: beware experts only! +# obj=DER:02:03 +# Where 'obj' is a standard or added object +# You can even override a supported extension: +# basicConstraints= critical, DER:30:03:01:01:FF + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always + +[ proxy_cert_ext ] +# These extensions should be added when creating a proxy certificate + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# Here are some examples of the usage of nsCertType. If it is omitted +# the certificate can be used for anything *except* object signing. + +# This is OK for an SSL server. +# nsCertType = server + +# For an object signing certificate this would be used. +# nsCertType = objsign + +# For normal client use this is typical +# nsCertType = client, email + +# and for everything including object signing: +# nsCertType = client, email, objsign + +# This is typical in keyUsage for a client certificate. +# keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +# This will be displayed in Netscape's comment listbox. +nsComment = "OpenSSL Generated Certificate" + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer + +# This stuff is for subjectAltName and issuerAltname. +# Import the email address. +# subjectAltName=email:copy +# An alternative to produce certificates that aren't +# deprecated according to PKIX. +# subjectAltName=email:move + +# Copy subject details +# issuerAltName=issuer:copy + +#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +# This really needs to be in place for it to be a proxy certificate. +proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo + +#################################################################### +[ tsa ] + +default_tsa = tsa_config1 # the default TSA section + +[ tsa_config1 ] + +# These are used by the TSA reply generation only. +dir = ./demoCA # TSA root directory +serial = $dir/tsaserial # The current serial number (mandatory) +crypto_device = builtin # OpenSSL engine to use for signing +signer_cert = $dir/tsacert.pem # The TSA signing certificate + # (optional) +certs = $dir/cacert.pem # Certificate chain to include in reply + # (optional) +signer_key = $dir/private/tsakey.pem # The TSA private key (optional) + +default_policy = tsa_policy1 # Policy if request did not specify it + # (optional) +other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) +digests = md5, sha1 # Acceptable message digests (mandatory) +accuracy = secs:1, millisecs:500, microsecs:100 # (optional) +clock_precision_digits = 0 # number of digits after dot. (optional) +ordering = yes # Is ordering defined for timestamps? + # (optional, default: no) +tsa_name = yes # Must the TSA name be included in the reply? + # (optional, default: no) +ess_cert_id_chain = no # Must the ESS cert id chain be included? + # (optional, default: no) + +[nxp_engine] +engines = engine_section + +[ engine_section ] +e4sss_se050 = e4sss_se050_section + +[ e4sss_se050_section ] +dynamic_path = /usr/local/lib/libsss_engine.so +engine_id = e4sss +init = 1 +# For OpenSSL 1.0.2 +# default_algorithms = RAND,ECDSA,ECDH +default_algorithms = RSA,RAND,ECDSA,ECDH + +# For OpenSSL 1.1.0 and 1.1.1 +# default_algorithms = RAND,EC +# default_algorithms = RSA,RAND,EC
diff --git a/demos/linux/common/snw_common.h b/demos/linux/common/snw_common.h new file mode 100644 index 0000000..a7aad24 --- /dev/null +++ b/demos/linux/common/snw_common.h
@@ -0,0 +1,97 @@ +/** + * @file snw_util.c + * @author NXP Semiconductors + * @version 1.0 + * @par License + * + * Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + * + * @par Description: + * Wrappers for basic network functionality + * + */ + +#ifndef SNW_COMMON_H_ +#define SNW_COMMON_H_ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <fcntl.h> +#include <openssl/ssl.h> +#include <openssl/engine.h> + +#define SSS_USE_FTR_FILE +#define FTR_FILE_SYSTEM + +#include <se05x/fsl_sss_ftr.h> +#include <se05x/sm_types.h> +#include <se05x/fsl_sss_api.h> +#include <se05x/ex_sss_boot.h> + +#if SSS_HAVE_APPLET_SE05X_IOT +#include <se05x/fsl_sss_se05x_types.h> +#endif + + +#define SE_TLS_CLIENT_OK 0 +#define SE_TLS_CLIENT_CMDLINE_ARGS 1 +#define SE_TLS_CLIENT_BUFFER_TOO_SMALL 2 +#define SE_TLS_CLIENT_ILLEGAL_PORT_NR 3 + +#define SE_TLS_CLIENT_TCP_SETUP_ERROR 100 +#define SE_TLS_CLIENT_TCP_CONNECT_ERROR 101 + +#define SE_TLS_CLIENT_SSL_LIB_INIT_ERROR 200 +#define SE_TLS_CLIENT_SSL_INIT_ERROR 201 +#define SE_TLS_CLIENT_SSL_CERT_ERROR 202 +#define SE_TLS_CLIENT_SSL_KEY_ERROR 203 +#define SE_TLS_CLIENT_SSL_CONNECT_ERROR 204 +#define SE_TLS_CLIENT_SSL_CONNECT_TIMEOUT_ERROR 205 +#define SE_TLS_CLIENT_SSL_WRITE_TIMEOUT_ERROR 206 +#define SE_TLS_CLIENT_SSL_WRITE_ERROR 207 + +#define SE_ERR_SE_GP_ACCESS 300 +#define SE_ERR_SE_GP_NO_CERT 301 +#define SE_ERR_SE_LOADING_ENGINE_ERR 302 + +// The certificate must be provisioned on this Object ID +#define OBJID_DEMO_EC_TLS_CLIENT_CERT 0x7DCCBB11 // EC +#define OBJID_DEMO_RSA_TLS_CLIENT_CERT 0X7DCCBB31 // RSA + +#define OK_STATUS 0 +#define FAILURE_STATUS 1 + +#define SSL_CONNECTED 1 +#define SELECT_TIMEOUT 0 +#define SELECT_ERROR -1 + +#if defined(__cplusplus) +extern "C" { +#endif + +int snwTcpConnect(int socket_fd, char *pURLString, int port); +int snwSetSocketNonBlocking(int server_fd); +int snwSslConnect(SSL *pSSL, int server_fd, int timeout_ms); +int snwSslWrite(SSL *pSSL, int server_fd, unsigned char *msg, int *totalLen, int timeout_ms); + +int wrapConnectToSe(ex_sss_boot_ctx_t *pSeBootCtx); +void wrapDisconnectFromSe(ex_sss_boot_ctx_t *pSeBootCtx); +int seGetClientCertificate(sss_key_store_t *keyStore, int certId, U8 *clientCertDer, size_t *clientCertDerLen); + +void snwPrintDataAsHex(U8* data, U16 dataLen); + +#if defined(__cplusplus) +} +#endif + +#endif /* SNW_COMMON_H_ */
diff --git a/demos/linux/common/snw_sss.cpp b/demos/linux/common/snw_sss.cpp new file mode 100644 index 0000000..410a887 --- /dev/null +++ b/demos/linux/common/snw_sss.cpp
@@ -0,0 +1,89 @@ +/** + * @file snw_util.c + * @author NXP Semiconductors + * @version 1.0 + * @par License + * + * Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + * + * @par Description: + * Wrappers for basic network functionality + * + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <fcntl.h> +#include <openssl/ssl.h> +#include <openssl/engine.h> + +#include "snw_common.h" + +int wrapConnectToSe(ex_sss_boot_ctx_t *pSeBootCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + const char *portName; + + status = ex_sss_boot_connectstring(0, NULL, &portName); + if (status != kStatus_SSS_Success) { + fprintf(stdout, "ex_sss_boot_connectstring failed ..."); + return status; + } + + status = ex_sss_boot_open(pSeBootCtx, portName); + if (status != kStatus_SSS_Success) { + fprintf(stdout, "ex_sss_boot_open failed ..."); + return status; + } + + status = ex_sss_key_store_and_object_init(pSeBootCtx); + if (status != kStatus_SSS_Success) { + fprintf(stdout, "ex_sss_key_store_and_object_init failed ..."); + return status; + } + + return SE_TLS_CLIENT_OK; +} + +void wrapDisconnectFromSe(ex_sss_boot_ctx_t *pSeBootCtx) { + sss_key_store_context_free(&(pSeBootCtx->ks)); + sss_session_close(&(pSeBootCtx->session)); +} + +int seGetClientCertificate(sss_key_store_t *keyStore, int certId, U8 *clientCertDer, size_t *clientCertDerLen) +{ + sss_object_t certObject; + size_t certDerLenBits = *clientCertDerLen * 8; + sss_status_t status; + + status = sss_key_object_init(&certObject, keyStore); + if (status != kStatus_SSS_Success) + { + printf("Failed to initialize certObject: status code = 0x%04x.\n", status); + return SE_ERR_SE_GP_NO_CERT; + } + certObject.objectType = kSSS_KeyPart_Default; + certObject.cipherType = kSSS_CipherType_Binary; + certObject.keyId = certId; + + status = sss_key_store_get_key(keyStore, &certObject, clientCertDer, clientCertDerLen, &certDerLenBits); + if (status != kStatus_SSS_Success) + { + printf("Fetching client certificate fails with status code: 0x%04x.\n", status); + return SE_ERR_SE_GP_NO_CERT; + } + + printf("Size of certificate retrieved: %zu byte\n", *clientCertDerLen); + // snwPrintDataAsHex(clientCertDer, *clientCertDerLen); + + return SE_TLS_CLIENT_OK; +}
diff --git a/demos/linux/common/snw_util.cpp b/demos/linux/common/snw_util.cpp new file mode 100644 index 0000000..9be454e --- /dev/null +++ b/demos/linux/common/snw_util.cpp
@@ -0,0 +1,183 @@ +/** + * @file snw_util.c + * @author NXP Semiconductors + * @version 1.0 + * @par License + * + * Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + * + * @par Description: + * Wrappers for basic network functionality + * + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <fcntl.h> +#include <openssl/ssl.h> +#include <openssl/engine.h> + +#include "snw_common.h" + +int snwTcpConnect(int socket_fd, char *pURLString, int port) +{ + int nRet = SE_TLS_CLIENT_TCP_CONNECT_ERROR; + int connect_status = -1; + struct hostent *host; + struct sockaddr_in dest_addr; + + host = gethostbyname(pURLString); + + if (NULL != host) { + dest_addr.sin_family = AF_INET; + dest_addr.sin_port = htons(port); + dest_addr.sin_addr.s_addr = *(long*) (host->h_addr); + memset(&(dest_addr.sin_zero), '\0', 8); + + connect_status = connect(socket_fd, (struct sockaddr *) &dest_addr, + sizeof(struct sockaddr)); + if (connect_status != -1) { + nRet = SE_TLS_CLIENT_OK; + } + } + return nRet; +} + +int snwSetSocketNonBlocking(int server_fd) +{ + int flags, status; + int nRet = SE_TLS_CLIENT_OK; + + flags = fcntl(server_fd, F_GETFL, 0); + // set underlying socket to non blocking + if (flags < 0) { + nRet = SE_TLS_CLIENT_TCP_CONNECT_ERROR; + } + + status = fcntl(server_fd, F_SETFL, flags | O_NONBLOCK); + if (status < 0) { + printf("fcntl - %s", strerror(errno)); + nRet = SE_TLS_CLIENT_TCP_CONNECT_ERROR; + } + + return nRet; +} + +int snwSslConnect(SSL *pSSL, int server_fd, int timeout_ms) +{ + int nRet = SE_TLS_CLIENT_OK; + int rc = 0; + fd_set readFds; + fd_set writeFds; + struct timeval timeout = { timeout_ms / 1000, (timeout_ms % 1000) * 1000 }; + int errorCode = 0; + int nSelect = SELECT_TIMEOUT; + + do { + printf("Invoke SSL_connect()...\n"); + rc = SSL_connect(pSSL); + + if (SSL_CONNECTED == rc) { + nRet = SE_TLS_CLIENT_OK; + break; + } + + errorCode = SSL_get_error(pSSL, rc); + + if (errorCode == SSL_ERROR_WANT_READ) { + FD_ZERO(&readFds); + FD_SET(server_fd, &readFds); + nSelect = select(server_fd + 1, (fd_set *) &readFds, NULL, NULL, &timeout); + if (SELECT_TIMEOUT == nSelect) { + printf("sslConnectWrapper: time out while waiting for read.\n"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_TIMEOUT_ERROR; + } + else if (SELECT_ERROR == nSelect) { + printf("sslConnectWrapper: select error for read %d.\n", nSelect); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + } + } + else if (errorCode == SSL_ERROR_WANT_WRITE) { + FD_ZERO(&writeFds); + FD_SET(server_fd, &writeFds); + nSelect = select(server_fd + 1, NULL, (fd_set *) &writeFds, NULL, &timeout); + if (SELECT_TIMEOUT == nSelect) { + printf("sslConnectWrapper: time out while waiting for write.\n"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_TIMEOUT_ERROR; + } + else if (SELECT_ERROR == nSelect) { + printf("sslConnectWrapper: select error for write %d.\n", nSelect); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + } + } + else { + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + } + + } while ( (SE_TLS_CLIENT_SSL_CONNECT_ERROR != nRet) && + (SE_TLS_CLIENT_SSL_CONNECT_TIMEOUT_ERROR != nRet) ); + + return nRet; +} + +int snwSslWrite(SSL *pSSL, int server_fd, unsigned char *msg, int *totalLen, int timeout_ms) +{ + int nRet = SE_TLS_CLIENT_OK; + fd_set writeFds; + int errorCode = 0; + int nSelect; + int writtenLen = 0; + int rc = 0; + struct timeval timeout = { timeout_ms / 1000, (timeout_ms % 1000) * 1000 }; + + do { + rc = SSL_write(pSSL, msg, *totalLen); + + errorCode = SSL_get_error(pSSL, rc); + + if (0 < rc) { + writtenLen += rc; + } + else if (errorCode == SSL_ERROR_WANT_WRITE) { + FD_ZERO(&writeFds); + FD_SET(server_fd, &writeFds); + nSelect = select(server_fd + 1, NULL, (fd_set *) &writeFds, NULL, &timeout); + if (SELECT_TIMEOUT == nSelect) { + nRet = SE_TLS_CLIENT_SSL_WRITE_TIMEOUT_ERROR; + } + else if (SELECT_ERROR == nSelect) { + nRet = SE_TLS_CLIENT_SSL_WRITE_ERROR; + } + } + else { + nRet = SE_TLS_CLIENT_SSL_WRITE_ERROR; + } + + } while ( (SE_TLS_CLIENT_SSL_WRITE_ERROR != nRet) && + (SE_TLS_CLIENT_SSL_WRITE_TIMEOUT_ERROR != nRet) && + (writtenLen < *totalLen) ); + + *totalLen = writtenLen; + return nRet; +} + +/* Print a hex array utility */ +void snwPrintDataAsHex(U8* data, U16 dataLen) +{ + int i; + for (i=0; i<(int)dataLen; i++) + { + if ( (i%16 == 0) && (i != 0) ) { printf("\n"); } + printf("%02x:", data[i]); + } + printf("\n"); +}
diff --git a/demos/linux/gcp/app.patch b/demos/linux/gcp/app.patch new file mode 100644 index 0000000..8946b06 --- /dev/null +++ b/demos/linux/gcp/app.patch
@@ -0,0 +1,36 @@ +diff --git a/iot/mqtt-ciotc/Makefile b/iot/mqtt-ciotc/Makefile +index 7efc82c..ca1c4ad 100644 +--- a/iot/mqtt-ciotc/Makefile ++++ b/iot/mqtt-ciotc/Makefile +@@ -1,6 +1,6 @@ + OPENSSL_DIR ?= /usr/local/lib + CC=gcc # gcc || clang +-CCOPTIONS=-std=c11 -Werror -Wall -Wextra -pedantic -Wstrict-overflow -fno-strict-aliasing -fdiagnostics-show-option ++CCOPTIONS=-std=c11 -Werror -Wall -Wextra -pedantic -Wstrict-overflow -fno-strict-aliasing -fdiagnostics-show-option -lpthread + SSLPATH=-L$(OPENSSL_DIR) + + all: mqtt_ciotc.c +diff --git a/iot/mqtt-ciotc/mqtt_ciotc.c b/iot/mqtt-ciotc/mqtt_ciotc.c +index 3b85866..4349791 100644 +--- a/iot/mqtt-ciotc/mqtt_ciotc.c ++++ b/iot/mqtt-ciotc/mqtt_ciotc.c +@@ -25,6 +25,7 @@ + #include "jwt.h" + #include "openssl/ec.h" + #include "openssl/evp.h" ++#include "openssl/conf.h" + // [END iot_mqtt_include] + + #define TRACE 1 /* Set to 1 to enable tracing */ +@@ -345,6 +346,11 @@ int Publish(char* payload, int payload_size) { + */ + // [START iot_mqtt_run] + int main(int argc, char* argv[]) { ++#if (OPENSSL_VERSION_NUMBER < 0x10100000L) ++ OPENSSL_config(NULL); ++#else ++ OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); ++#endif + OpenSSL_add_all_algorithms(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers();
diff --git a/demos/linux/gcp/buildScript.sh b/demos/linux/gcp/buildScript.sh new file mode 100644 index 0000000..15fb048 --- /dev/null +++ b/demos/linux/gcp/buildScript.sh
@@ -0,0 +1,58 @@ +#!/bin/sh +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Determine directory where script is stored +DEMO_DIR="$( cd "$(dirname "$0")" ; pwd -P )" +echo ${DEMO_DIR} +cd ${DEMO_DIR} + +COMMON_DIR=${DEMO_DIR}/../common/ +cd ${COMMON_DIR} +# building jansson +if [ ! -d jansson ]; then + git clone https://github.com/akheron/jansson.git + cd jansson + autoreconf -i + ./configure + make + sudo make install + cd .. +fi + +sudo ldconfig /usr/local/lib + +# building libjwt +if [ ! -d libjwt ]; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + git clone https://github.com/benmcollins/libjwt.git + cd libjwt + autoreconf -i + ./configure + make all + sudo make install + cd .. +fi + + +#building the app +sudo ldconfig /usr/local/lib +cd ${DEMO_DIR} +mkdir gcp +cd gcp +git clone https://github.com/GoogleCloudPlatform/cpp-docs-samples.git +cp ../app.patch cpp-docs-samples/iot/mqtt-ciotc/ +cd cpp-docs-samples/iot/mqtt-ciotc/ +perl -p -e 's/\r$//' < app.patch > unix_app.patch +git apply unix_app.patch +make + + + + + + +
diff --git a/demos/linux/gcp/readme.rst b/demos/linux/gcp/readme.rst new file mode 100644 index 0000000..004509b --- /dev/null +++ b/demos/linux/gcp/readme.rst
@@ -0,0 +1,108 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: shell + +.. _linux-demos-gcp: + +================================================== +GCP Demo for iMX Linux / Raspberry Pi +================================================== + +This demo demonstrates connection to Google Cloud Platform using +pre-provisioned device credentials and publish/subscribe procedure +using MQTT. + +Prerequisites +================================================== + +- GCP account +- SD Card image with SE050 Middleware pre-installed. The application is built on the iMX platform. +- IMX6UL-EVK/RPi platform connected to the Internet +- Install autoconf and libtool. Execute - ``sudo apt-get install autoconf libtool`` + +For additional information: + +- Refer to :ref:`dev-platforms` for hardware setup and iMX setup +- Refer to :ref:`cli-tool` for ssscli tool setup + +Preparing the credentials and Provision the SE +================================================== + +1) Complete :numref:`cli-doc-pre-steps` :ref:`cli-doc-pre-steps` + +#) To create certificates on imx and Raspberry Pi, call:: + + cd simw-top/pycli/Provisioning + python3 GenerateGCPCredentials.py + python3 ResetAndUpdate_GCP.py + +#) Certificates and Keys are generated at ``simw-top/pycli/Provisioning/gcp`` + + +Build the OpenSSL engine [Optional] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. note:: + This step is optional in case you are using a prepared + SD card image from NXP. + +The OpenSSL engine uses the sss abstraction layer to access the crypto +services of the secure element, the implementation remains dependent on +the secure element attached. The following illustrates compiling the +OpenSSL engine for SE050 connected over I2C. + +:: + + cd simw-top + python scripts/create_cmake_projects.py + cd ../simw-top_build/imx_native_se050_t1oi2c + cmake --build . + make install + ldconfig /usr/local/lib + +.. note:: + Replace ``imx_native_se050_t1oi2c`` with ``raspbian_native_se050_t1oi2c`` + when building for Raspberry Pi. + + +.. _linux-gcp-run: + +Building the application +================================================== + +#) Use 'buildScript.sh' script at simw-top/demos/linux/gcp/ to download all dependencies and build the mqtt application for gcp call:: + + cd /simw-top/demos/linux/gcp/ + ./buildScript.sh + +#) Search for `default_algorithms` in ``/simw-top/demos/linux/common/openssl_sss_se050.cnf`` file and set it as :: + + default_algorithms = RSA,RAND,ECDSA,ECDH ----- For openssl 1.0.0 + default_algorithms = RSA,RAND,EC ----- For openssl 1.1.1 + +#) Set the openssl config path. Skip if already done:: + + $ export OPENSSL_CONF=/simw-top/demos/linux/common/openssl_sss_se050.cnf + +#) Upload the root certificate (/simw-top/pycli/Provisioning/gcp/rootCA_certificate.cer) and device certificate (/simw-top/pycli/Provisioning/gcp/<UID>_device_certificate.cer) to GCP account. Refer :ref:`prepare-gcp-cloud`. Skip if already done. + +#) Run the application call:: + + cd /simw-top/demos/linux/gcp/gcp/cpp-docs-samples/iot/mqtt-ciotc + $ ./mqtt_ciotc --deviceid "nxp-ecc-dev-01" --region "us-central1" --registryid "nxp-se-demo-reg" --projectid "pgh-cloud-iot" --keypath /simw-top/pycli/Provisioning/gcp/<UID>_device_reference_key.pem --rootpath /simw-top/demos/linux/gcp/keys/roots.pem --algorithm ES256 + + +.. note:: + #. The above example is for illustrative purpose + #. Export the open ssl conf path to the exact location of the file. + #. While executing the application, use the appropriate values for registryid, projectid, keypath, rootpath and algorithm + + +Appendix +======== + +1. For more information, refer to https://github.com/GoogleCloudPlatform/cpp-docs-samples/tree/master/iot/mqtt-ciotc +
diff --git a/demos/linux/ibm_watson_iot/Makefile b/demos/linux/ibm_watson_iot/Makefile new file mode 100644 index 0000000..0877756 --- /dev/null +++ b/demos/linux/ibm_watson_iot/Makefile
@@ -0,0 +1,10 @@ +CC=gcc # gcc || clang +CCOPTIONS=-std=c11 -Wall -Wextra -pedantic -Wstrict-overflow -fno-strict-aliasing -g + +JSMN_DIR := ../../../ext/amazon-freertos/libraries/3rdparty/jsmn + +SSLPATH=-L/openssl +INCLUDEDIR=-I../common/ -I$(JSMN_DIR) + +all: watson_imx_linux.c + $(CC) $(CCOPTIONS) $(SSLPATH) watson_imx_linux.c ../common/mqtt_publish.c $(JSMN_DIR)/jsmn.c $(INCLUDEDIR) $(BUILDARGS) -ljwt -lcrypto -lssl -lpaho-mqtt3cs -o watson_imx_linux
diff --git a/demos/linux/ibm_watson_iot/buildScript.sh b/demos/linux/ibm_watson_iot/buildScript.sh new file mode 100644 index 0000000..89a46c8 --- /dev/null +++ b/demos/linux/ibm_watson_iot/buildScript.sh
@@ -0,0 +1,51 @@ +#!/bin/sh +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Determine directory where script is stored +DEMO_DIR="$( cd "$(dirname "$0")" ; pwd -P )" +echo ${DEMO_DIR} +cd ${DEMO_DIR} + +COMMON_DIR=${DEMO_DIR}/../common/ +cd ${COMMON_DIR} +# building jansson +if [ ! -d jansson ]; then + git clone https://github.com/akheron/jansson.git + cd jansson + autoreconf -i + ./configure + make + sudo make install + cd .. +fi + +sudo ldconfig /usr/local/lib + +# building libjwt +if [ ! -d libjwt ]; then + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + git clone https://github.com/benmcollins/libjwt.git + cd libjwt + autoreconf -i + ./configure + make all + sudo make install + cd .. +fi + + +#building the app +sudo ldconfig /usr/local/lib +cd ${DEMO_DIR} +make + + + + + + +
diff --git a/demos/linux/ibm_watson_iot/create_credentials.sh b/demos/linux/ibm_watson_iot/create_credentials.sh new file mode 100644 index 0000000..cf1c9b2 --- /dev/null +++ b/demos/linux/ibm_watson_iot/create_credentials.sh
@@ -0,0 +1,434 @@ +#!/bin/bash +# +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# NOTE: This script is based upon 'provisionA71CH_WatsonIoT.sh' included in the project +# hosted on https://github.com/ibm-watson-iot/iot-nxpimxa71ch-c +# +# +######################################################################################################### +## + +# Set global variables to default values +gExecMsg="" +gRetValue=0 + +# Tools +A71CH_CONFIG_TOOL="./a71chConfig_i2c_imx" +SSS_CONFIG_TOOL="ssscli" + +# Customization variables +# For Watson IoT Platform Device and Gateway types +# +devType="NXP-A71CH-D" +gwType="NXP-A71CH-G" +# +# For root CA +# +ROOT_CA_CN="NXP Semiconductors DEMO rootCA v E" +CA_EXISTS="FALSE" +CA_ENC_TYPE="ECC" # Options are RSA or ECC +CA_ECC_CURVE="prime256v1" # Only used if CA_ENC_TYPE is ECC +# CA_ECC_CURVE="secp384r1" # Only used if CA_ENC_TYPE is ECC +# +# For intermediate CA - Intermediate CA will be signed by root CA +# +CREATE_INTERMEDIATE_CA="TRUE" +INTERMEDIATE_CA_CN="NXP Semiconductors DEMO intermediateCA v E" +INTERMEDIATE_CA_EXISTS="FALSE" +INTERMEDIATE_CA_ENC_TYPE="ECC" # Supported type for intermedite CA is ECC +INTERMEDIATE_CA_ECC_CURVE="prime256v1" # Only used if INTERMEDIATE_CA_ENC_TYPE is ECC +# +# Certificate validity +# +CA_CERT_VALIDITY=7300 # 20 years +CLIENT_CERT_VALIDITY=7300 # 20 years + +# Root CA Files +if [ "${CA_ENC_TYPE}" == "RSA" ]; then + rootcaKey="CACertificate_RSA.key" + rootcaCert="CACertificate_RSA.crt" + ca_srl="CACertificate_RSA.srl" +else + rootcaKey="CACertificate_ECC.key" + rootcaCert="CACertificate_ECC.crt" + ca_srl="CACertificate_ECC.srl" +fi +# Intermediate CA files - RSA is not supported yet +intercaKey="interCACertificate_ECC.key" +intercaCsr="interCACertificate_ECC.csr" +intercaCert="interCACertificate_ECC.crt" +inter_srl="interCACertificate_ECC.srl" +# Chain of CA root and intermediate certificate +chaincaCert="CACertificateChain.crt" + +# UTILITY FUNCTIONS +# ----------------- +# xCmd will stop script execution when the program executed does return gRetValue (0 by default) to the shell +xCmd () { + local command="$*" + echo ">> ${gExecMsg}" + echo ">> ${command}" + ${command} + local nRetProc="$?" + if [ ${nRetProc} -ne ${gRetValue} ] + then + echo "\"${command}\" failed to run successfully, returned ${nRetProc}" + echo "** Script execution failed **" + exit 2 + fi + echo "" + # Set global variables to default values + gExecMsg="" + gRetValue=0 +} + +prog_usage() { + echo "Usage:" + echo " $0 [-u <UID-value>] [ip:port]" +} + +# Check command line arguments +if [ "$#" -gt 3 ]; then + echo "Too many arguments" + prog_usage + exit 1 +else + # default values + ip_addr_port_server="" + SE_UID="" + if [ "$1" == "-u" ]; then + if [ "$#" -lt 2 ]; then + prog_usage + exit 1 + else + SE_UID="$2" + if [ "${#SE_UID}" -ne 20 ]; then + echo " The UID (provided as argument) must be exactly 20 characters long" + echo "The current argument is ${#SE_UID} characters long" + echo "Exiting..." + exit 4 + fi + if [ -n "$3" ]; then + ip_addr_port_server="$3" + fi + fi + elif [ "$#" -eq 1 ]; then + ip_addr_port_server="$1" + elif [ "$#" -eq 0 ]; then + # No arguments is fine + echo "Will fetch UID from attached sample" + else + # Wrong command line options + prog_usage + exit 1 + fi +fi + +echo "SE_UID=${SE_UID}" +echo "ip_addr_port_server=${ip_addr_port_server}" + +# Provide UID as argument, or +# attach the SE and have the script retrieve the UID from the IC +if [ -z ${SE_UID} ]; then + echo " Get UID from attached SE" + # ${A71CH_CONFIG_TOOL} info device | grep -e "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" + # SE_UID="$(${A71CH_CONFIG_TOOL} info device | grep -e "\([0-9][0-9]:\)\{17,\}" \ + # | awk 'BEGIN {FS=":"}; {printf $3$4$9$10$11$12$13$14$15$16}')" + xCmd "ssscli disconnect" + xCmd "ssscli connect se05x t1oi2c none" + xCmd "ssscli se05x certuid" + SE_UID="$(ssscli se05x certuid 2>&1 | grep -e 'Cert UID' | grep -o -e '\([0-9a-zA-Z]\)\{20,\}')" + echo "SE_UID: ${SE_UID}" +fi + +# Sanity check on UID +if [ "${#SE_UID}" -ne 20 ]; then + echo " Could not retrieve UID from SE." + echo "Exiting..." + exit 5 +fi + +########################################### +# Create root CA key and certificate. +########################################### + +if [ "${CA_EXISTS}" != "TRUE" ]; then + + if [ "${CA_ENC_TYPE}" == "RSA" ]; then + + # RSA Root Certificates + if [ ! -e ${rootcaKey} ]; then + # Create both the CA keypair and CA certificate + # The root CA is RSA 4096 + echo "## Create RSA Root CA Key: (${rootcaKey})" + xCmd "openssl genrsa -out ${rootcaKey} 4096" + echo "## Create RSA Root CA Certificate: (${rootcaCert})" + openssl req -x509 -new -nodes -key ${rootcaKey} -sha256 -days ${CA_CERT_VALIDITY} -out ${rootcaCert} -subj "/CN=${ROOT_CA_CN}" + fi + + if [ ! -e ${rootcaCert} ]; then + echo "## Create ECC Root CA Certificate: (${rootcaCert}); Root CA keypair was already present" + openssl req -x509 -new -nodes -key ${rootcaKey} -sha256 -days ${CA_CERT_VALIDITY} -out ${rootcaCert} -subj "/CN=${ROOT_CA_CN}" + fi + + else + + # ECC Root Certificates + if [ ! -e ${rootcaKey} ]; then + # Create both the CA keypair and CA certificate + # The root CA is ECC using curve defined in CA_ECC_CURVE variable + echo "## Create ECC Root CA Key: (${rootcaKey}) Curve: (${CA_ECC_CURVE})" + xCmd "openssl ecparam -genkey -name ${CA_ECC_CURVE} -out ${rootcaKey}" + echo "## Create ECC Root CA Certificate: (${rootcaCert})" + openssl req -x509 -new -nodes -key ${rootcaKey} -sha256 -days ${CA_CERT_VALIDITY} -out ${rootcaCert} -subj "/CN=${ROOT_CA_CN}" + fi + + if [ ! -e ${rootcaCert} ]; then + echo "## Create ECC Root CA Certificate: (${rootcaCert}); Root CA keypair was already present" + openssl req -x509 -new -nodes -key ${rootcaKey} -sha256 -days ${CA_CERT_VALIDITY} -out ${rootcaCert} -subj "/CN=${ROOT_CA_CN}" + fi + + fi + +else + # Check whether RootCA key and certificate are present. + if [ ! -e ${rootcaKey} ]; then + if [ "${CA_ENC_TYPE}" == "RSA" ]; then + echo "## No RSA Root CA Key available (${rootcaKey})" + else + echo "## No ECC Root CA Key available (${rootcaKey})" + fi + exit 8 + fi + + if [ ! -e ${rootcaCert} ]; then + if [ "${CA_ENC_TYPE}" == "RSA" ]; then + echo "## No RSA Root CA Certificate available (${rootcaCert})" + else + echo "## No ECC Root CA Certificate available (${rootcaCert})" + fi + exit 9 + fi +fi + + +############################################## +# Create intermediate CA key and certificate. +############################################## + +# echo "Check whether a .srl file of Root CA is present" +if [ -e ${ca_srl} ]; then + echo "## ${ca_srl} already exists, use it" + x509_serial="-CAserial ${ca_srl}" +else + echo "## no ${ca_srl} found, create it" + x509_serial="-CAcreateserial" +fi + +SIGN_BY_INTERMEDIATE_CA="FALSE" + +echo "## CREATE_INTERMEDIATE_CA = ${CREATE_INTERMEDIATE_CA}" + +if [ "${CREATE_INTERMEDIATE_CA}" == "TRUE" ] +then + + echo "## Create Intermediate CA" + + if [ "${INTERMEDIATE_CA_EXISTS}" != "TRUE" ] + then + + # Define the v3 extension that will be included in the intermediate certificate + echo "## Create v3 extension file for Intermediate CA Certificate" + echo "[ v3_req ]" > v3_ext.cnf + echo "basicConstraints = CA:TRUE, pathlen:0" >> v3_ext.cnf + echo "keyUsage = critical, digitalSignature, keyCertSign" >> v3_ext.cnf + + + if [ "${INTERMEDIATE_CA_ENC_TYPE}" == "RSA" ] + then + + echo "## RSA Encryption type is not supported yet." + exit 10 + + else + + # ECC Intemediate Certificates + if [ ! -e ${intercaKey} ] + then + # Create both the CA keypair and CA certificate + # The intermediate CA is ECC using curve defined in INTERMEDIATE_CA_ECC_CURVE variable + echo "## Create ECC intermediate CA Key: (${intercaKey}) Curve: (${INTERMEDIATE_CA_ECC_CURVE})" + xCmd "openssl ecparam -genkey -name ${INTERMEDIATE_CA_ECC_CURVE} -out ${intercaKey}" + echo "## Create ECC Intermediate CA CSR: (${intercaCsr})" + openssl req -new -key ${intercaKey} -out ${intercaCsr} -subj "/CN=${INTERMEDIATE_CA_CN}" + echo "## Sign Intermediate CA CSR with (${rootcaCert})" + openssl x509 -req -days ${CA_CERT_VALIDITY} -in ${intercaCsr} ${x509_serial} -CA ${rootcaCert} \ + -CAkey ${rootcaKey} -extfile ./v3_ext.cnf -extensions v3_req -out ${intercaCert} + fi + + if [ ! -e ${intercaCert} ]; then + echo "## Create ECC Intermediate CA CSR: (${intercaCsr})" + openssl req -new -key ${intercaKey} -out ${intercaCsr} -subj "/CN=${INTERMEDIATE_CA_CN}" + echo "## Sign Intermediate CA CSR with (${rootcaCert})" + openssl x509 -req -days ${CA_CERT_VALIDITY} -in ${intercaCsr} ${x509_serial} -CA ${rootcaCert} \ + -CAkey ${rootcaKey} -extfile ./v3_ext.cnf -extensions v3_req -out ${intercaCert} + fi + + fi + + else + + # Check whether Intermediate CA key and certificate are present. + if [ ! -e ${intercaKey} ]; then + if [ "${INTERMEDIATE_CA_ENC_TYPE}" == "RSA" ]; then + echo "## RSA Encryption type is not supported yet." + else + echo "## No ECC Intermediate CA Key available (${intercaKey})" + fi + exit 11 + fi + + if [ ! -e ${intercaCert} ]; then + if [ "${INTERMEDIATE_CA_ENC_TYPE}" == "RSA" ]; then + echo "## RSA Encryption type is not supported yet." + else + echo "## No ECC Intermediate CA Certificate available (${intercaCert})" + fi + exit 12 + fi + + fi + + SIGN_BY_INTERMEDIATE_CA="TRUE" + +fi + + +############################################ +# Create key and device/gateway certificates +############################################ + +if [ "${SIGN_BY_INTERMEDIATE_CA}" == "TRUE" ]; then + + # Create Chain of CA Certificates for WIoTP CA Certificate upload step + cat ${intercaCert} ${rootcaCert} > ${chaincaCert} +fi + +# Create serial number of gateway and device certificates +# for device 1${SE_UID} +# for gateway 2${SE_UID} +deviceSerial="0x01${SE_UID}" +gatewaySerial="0x02${SE_UID}" + +# Unique ID Key, reference key and CSR files +uidKey="${SE_UID}.key" +uidRefKey="${SE_UID}_ref.pem" +uidCsr="${SE_UID}.csr" + +# Device certificate +deviceCert="${SE_UID}_device_ec_pem.crt" +deviceCertAscii="${SE_UID}_device_ec_crt_ascii_dump.txt" + +# Gateway certificate +gatewayCert="${SE_UID}_gateway_ec_pem.crt" +gatewayCertAscii="${SE_UID}_gateway_ec_crt_ascii_dump.txt" + +echo "## Preparing device certificate ${deviceCert}" +CN_val="${SE_UID}" +GENERIC_val="URI:NXP:${SE_UID}" +SAN_D_val="email:d:${devType}:${SE_UID}, ${GENERIC_val}" +SAN_G_val="email:g:${gwType}:${SE_UID}, ${GENERIC_val}" + +echo "## CN=${CN_val}" +echo "## SAN_D_VAL=${SAN_D_val}" +echo "## SAN_G_VAL=${SAN_G_val}" + +# Create a device key pair & CSR +xCmd "openssl ecparam -genkey -name prime256v1 -out ${uidKey}" +openssl req -new -key ${uidKey} -out ${uidCsr} -subj "/CN=${CN_val}" + +# Define the v3 extension that will be included in the device certificate +echo "[ v3_req ]" > v3_ext.cnf +echo "" >> v3_ext.cnf +echo "# Extensions to add to a certificate request" >> v3_ext.cnf +echo "" >> v3_ext.cnf +echo "basicConstraints = CA:FALSE" >> v3_ext.cnf +echo "# keyUsage = nonRepudiation, digitalSignature, keyEncipherment" >> v3_ext.cnf +echo "keyUsage = digitalSignature" >> v3_ext.cnf +echo "subjectAltName = ${SAN_D_val}" >> v3_ext.cnf + +if [ "${SIGN_BY_INTERMEDIATE_CA}" == "TRUE" ]; then + # Create a Cert signed by Intermediate CA + xCmd "openssl x509 -req -days ${CLIENT_CERT_VALIDITY} -in ${uidCsr} -set_serial ${deviceSerial} -CA ${intercaCert} -CAkey ${intercaKey} \ + -extfile ./v3_ext.cnf -extensions v3_req -out ${deviceCert}" +else + # Create a Cert signed by Root CA + xCmd "openssl x509 -req -days ${CLIENT_CERT_VALIDITY} -in ${uidCsr} -set_serial ${deviceSerial} -CA ${rootcaCert} -CAkey ${rootcaKey} \ + -extfile ./v3_ext.cnf -extensions v3_req -out ${deviceCert}" +fi +openssl x509 -in ${deviceCert} -text -noout > ${deviceCertAscii} +echo "## Device certificate ${deviceCert} created successfully" + + +# Define the v3 extension that will be included in the gateway certificate +echo "[ v3_req ]" > v3_ext.cnf +echo "" >> v3_ext.cnf +echo "# Extensions to add to a certificate request" >> v3_ext.cnf +echo "" >> v3_ext.cnf +echo "basicConstraints = CA:FALSE" >> v3_ext.cnf +echo "# keyUsage = nonRepudiation, digitalSignature, keyEncipherment" >> v3_ext.cnf +echo "keyUsage = digitalSignature" >> v3_ext.cnf +echo "subjectAltName = ${SAN_G_val}" >> v3_ext.cnf +if [ "${SIGN_BY_INTERMEDIATE_CA}" == "TRUE" ]; then + # Create a Cert signed by Intermediate CA + xCmd "openssl x509 -req -days ${CLIENT_CERT_VALIDITY} -in ${uidCsr} -set_serial ${gatewaySerial} -CA ${intercaCert} -CAkey ${intercaKey} \ + -extfile ./v3_ext.cnf -extensions v3_req -out ${gatewayCert}" +else + # Create a Cert signed by Root CA + xCmd "openssl x509 -req -days ${CLIENT_CERT_VALIDITY} -in ${uidCsr} -set_serial ${gatewaySerial} -CA ${rootcaCert} -CAkey ${rootcaKey} \ + -extfile ./v3_ext.cnf -extensions v3_req -out ${gatewayCert}" +fi +openssl x509 -in ${gatewayCert} -text -noout > ${gatewayCertAscii} +echo "## Gateway certificate ${gatewayCert} created successfully" + + +########################################### +# Create config tool script and execute it. +########################################### + +configScript="${SE_UID}_se050ConfigScript.sh" + +echo "## Create config tool script ${configScript}" + +echo "# ################################################" > ${configScript} +echo "# Name: ${configScript}" >> ${configScript} +echo "# Revision 0.9" >> ${configScript} +echo "# Purpose: Provision SE050 matching UID ("${SE_UID}") for Watson IoT" >> ${configScript} +echo "# Pre-condition: " >> ${configScript} +echo "# Post-condition: keypair and certificate injected" >> ${configScript} +echo "# ################################################" >> ${configScript} +echo "ssscli disconnect" >> ${configScript} +echo "ssscli connect se05x t1oi2c none" >> ${configScript} +echo "ssscli se05x reset # Bring secure element in its original state" >> ${configScript} +echo "# key_id=\"0x7DC1B000\"" >> ${configScript} +echo "ssscli set ecc pair 0x7DC1B000 ${uidKey} --format PEM" >> ${configScript} +echo "ssscli refpem ecc pair 0x7DC1B000 ${uidRefKey} # Creates the reference key on the file system" >> ${configScript} +# echo "# dev_cert_id=\"0x7DC1B010\"" >> ${configScript} +# echo "ssscli set cert 0x7DC1B010 ${deviceCert}" >> ${configScript} +# echo "# gw_cert_id=\"0x7DC1B011\"" >> ${configScript} +# echo "ssscli set cert 0x7DC1B011 ${gatewayCert}" >> ${configScript} + +# ssscli set cert [OPTIONS] KEYID KEY + +# xCmd "${A71CH_CONFIG_TOOL} script -f ${configScript}" + +# echo "## Successfully configured A71CH sample ${SE_UID}" + +exit 0 + +
diff --git a/demos/linux/ibm_watson_iot/readme.rst b/demos/linux/ibm_watson_iot/readme.rst new file mode 100644 index 0000000..0eaa6b5 --- /dev/null +++ b/demos/linux/ibm_watson_iot/readme.rst
@@ -0,0 +1,134 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: shell + +.. _linux-demos-watson: + +================================================== +IBM Watson Demo for iMX Linux / Raspberry Pi +================================================== + +This demo demonstrates connection to IBM Watson IoT platform +using pre-provisioned device credentials and publish/subscribe +procedure using MQTT + +Prerequisites +================================================== + +- IBM Cloud account +- SD Card image with SE050 Middleware pre-installed. The application is built on the iMX platform. +- IMX6UL-EVK platform connected to the Internet + +For additional information: + +- Refer to :ref:`dev-platforms` for hardware setup and iMX setup +- Refer to :ref:`cli-tool` for ssscli tool setup + +Preparing the credentials +================================================== + +1) Complete :numref:`cli-doc-pre-steps` :ref:`cli-doc-pre-steps` + +#) To create certificates on imx and Raspberry Pi, call:: + + cd simw-top/pycli/Provisioning + python3 GenerateIBMCredentials.py + python3 ResetAndUpdate_IBM.py + +#) Certificates and Keys are generated at ``simw-top/pycli/Provisioning/ibm`` + +- The subject and subject alternative name of the device certificate must adhere to specific conventions. Both subject and + subject alternative name contain the 10 byte UID value. In addition the Subject Alternative Name contains the device type. + + +Build the OpenSSL engine [Optional] +================================================== + +.. note:: + This step is optional in case you are using a prepared + SD card image from NXP. + +The OpenSSL engine uses the sss abstraction layer to access the crypto +services of the secure element, the implementation remains dependent on +the secure element attached. The following illustrates compiling the +OpenSSL engine for SE050 connected over I2C. + +:: + + cd simw-top + python scripts/create_cmake_projects.py + cd ../simw-top_build/imx_native_se050_t1oi2c + cmake --build . + make install + ldconfig /usr/local/lib + +.. note:: + Replace ``imx_native_se050_t1oi2c`` with ``raspbian_native_se050_t1oi2c`` + when building for Raspberry Pi. + +.. _linux-watson-run: + +Running the Demo on iMX/Raspberry Pi +================================================== + +1) Use 'buildScript.sh' script at ``<MW_SRC_DIR>/simw-top/demos/linux/ibm_watson_iot`` to download all dependencies and build the mqtt application for ibm_watson call:: + + cd /simw-top/demos/linux/ibm_watson_iot + ./buildScript.sh + +#) Based on OpenSSL version and applicable Secure Element, select the appropriate configuration file in + ``<MW_SRC_DIR>/simw-top/demos/linux/common`` directory:: + + openssl11_sss_a71ch.cnf ----- OpenSSL 1.1.1 and A71CH + openssl11_sss_se050.cnf ----- OpenSSL 1.1.1 and SE050 + openssl_sss_a71ch.cnf ----- OpenSSL 1.0.0 and A71CH + openssl_sss_se050.cnf ----- OpenSSL 1.0.0 and SE050 + +#) Set the openssl config path. Skip if already done:: + + $ export OPENSSL_CONF=<MW_SRC_DIR>/simw-top/demos/linux/common/<appropriate-cnf-file> + +#) Upload the root certificate (<MW_SRC_DIR>/simw-top/pycli/Provisioning/ibm/rootCA_certificate.crt) to your IBM account. + Refer to :ref:`prepare-ibm-cloud` for instructions on uploading the Root CA certificate and registering the device. Skip if already done. + +#) Run the application in either of the following two ways: + + - Parameters via commandline:: + + ./watson_imx_linux --org <ORG> --keypath <MW_SRC_DIR>/simw-top/pycli/Provisioning/ibm/<UID>_device_reference_key.pem --devcert simw-top/pycli/Provisioning/ibm/<UID>_device_certificate.cer --topic "iot-2/evt/status/fmt/json" --payload ""{\"d\"\ :\ {\"SensorID\":\ \"Test\"\,\ \"Reading\":\ 7\ }}"" + + where *ORG* is the organization ID, *keypath* is the path to reference key corresponding to the device key and *devcert* is the path to device certificate. + + - Parameters via json file:: + + ./watson_imx_linux --json <input.txt> + + Sample JSON file:: + + { + "hostname": "orgID.messaging.internetofthings.ibmcloud.com", + "protocol": "MQTTS", + "port": "8443", + "devcert": "cert_0000000000000000000000000000000000000000000000000000000000000092.pem", + "keypath": "keyref_0000000000000000000000000000000000000000000000000000000000000092.pem", + "payload": "HelloMessage", + "topic": "iot-2/evt/status/fmt/string", + "rootpath": "rootCA.pem" + } + + +.. note:: + 1) The above example invocation is for illustrative purpose. + #) Export the open ssl conf path to the exact location of the file. + #) While executing the application, use the appropriate values for org, keypath and devcert. + + +Appendix +================================================== + +1. For more information, refer to https://cloud.ibm.com/docs/services/IoT?topic=iot-platform-about_iotplatform + +2. <MW_SRC_DIR> is a placeholder for the path to the Plug & Trust MW. It would typically be /home/root/se050_mw_v02.08.00 (or a later version) on i.MX.
diff --git a/demos/linux/ibm_watson_iot/watson_imx_linux.c b/demos/linux/ibm_watson_iot/watson_imx_linux.c new file mode 100644 index 0000000..e0de1c1 --- /dev/null +++ b/demos/linux/ibm_watson_iot/watson_imx_linux.c
@@ -0,0 +1,341 @@ +/****************************************************************************** + * Copyright 2017 Google + * Copyright 2019 NXP + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *****************************************************************************/ + +// [START iot_mqtt_include] +#define _XOPEN_SOURCE 500 +#include <stdbool.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +#include "MQTTClient.h" +#include "jwt.h" +#include "openssl/conf.h" +#include "openssl/ec.h" +#include "openssl/evp.h" +#include "jsmn.h" + +#include "mqtt_publish.h" + +#define TRACE 1 /* Set to 1 to enable tracing */ + +void Usage() +{ + printf("watson_imx_linux \\\n"); + printf("\t--payload \"Message to publish\"\\\n"); + printf("\t--deviceid <your device id>\\\n"); + printf("\t--keypath <e.g. ./ec_private.pem>\\\n"); + printf("\t--rootpath root CA file of Watson in PEM format\\\n"); + printf("\t--devcert device certificate in PEM format\\\n"); + printf("\t--username Watson IoT user name\\\n"); + printf("\t--topic Watson IoT Publish topic\\\n"); + printf("\t--org Watson IoT org name\\\n"); + printf("\t--type Device type\\\n"); +} + +void Usage_json() +{ + printf("./watson_imx_linux "); + printf("--json <your json file having all requiered parameters>\\\n"); + printf("Sample json as below (one can use same file with updated values)\n"); + printf("\t{\n"); + printf("\t\"hostname\":\"uc3st5.messaging.internetofthings.ibmcloud.com\",\n"); + printf("\t\"keypath\" : \"PATH_TO_KEYREF.PEM\"\n"); + printf("\t\"devcert\" : \"PATH_TO_DEVICE_CERTIFICATE.PEM\", \n"); + printf("\t\"topic\" : \"iot-2/evt/status/fmt/string\", \n"); + printf("\t\"payload\" : \"PAYLOAD TO SEND\", \n"); + printf("\t}\n\n"); + +} + +/** + * Helper to parse arguments passed to app. Returns false if there are missing + * or invalid arguments; otherwise, returns true indicating the caller should + * free the calculated client ID placed on the opts structure. + * + * TODO: (class) Consider getopt + */ +// [START iot_mqtt_opts] +bool get_json_tagValue(char *js, const char * key, char * value) +{ + jsmn_parser p; + jsmntok_t tokens[50]; /* We expect no more than 50 JSON tokens */ + jsmn_init(&p); + int count = jsmn_parse(&p, js, strlen(js), tokens, 50); + for (int i = 1; i < count; i += 2) + { + jsmntok_t *t = &tokens[i]; + char *tag = js + t->start; + if (!memcmp(tag, key, t->end - t->start)) + { + t = &tokens[i + 1]; + memcpy(value, js + t->start, t->end - t->start); + value[t->end - t->start] = '\0'; + return true; + } + } + printf("Tag %s not found\n", key); + return false; +} +char hostname[256]; +char key[256]; +char cert[256]; +char payload[256]; +char topic[256]; + +bool get_connection_params_file(char * filename) +{ + FILE *fk = fopen(filename, "rb"); + if (fk == NULL) + { + printf("Can not open the file [%s]\n", filename); + return false; + } + fseek(fk, 0, SEEK_END); + long json_file_len = ftell(fk); + fseek(fk, 0, SEEK_SET); + char *json_file = malloc(json_file_len +1); + fread(json_file, 1, json_file_len, fk); + fclose(fk); + json_file[json_file_len] = 0; + + printf("json file contents %s\n", json_file); + + bool calcurl = true; + + if (!get_json_tagValue(json_file, "hostname", hostname) || + !get_json_tagValue(json_file, "keypath", key) || + !get_json_tagValue(json_file, "devcert", cert) || + !get_json_tagValue(json_file, "topic", topic) || + !get_json_tagValue(json_file, "payload", payload)) + { + printf("Json file missing above parameters! See usage below for all required parameters\n"); + Usage_json(); + free(json_file); + return false; + } + + free(json_file); + + opts.payload = payload; + opts.keypath = key; + opts.devcert = cert; + strcpy((char *restrict) & opts.clientid, ""); + strcpy((char *restrict) & opts.topic, topic); + + + if (calcurl) { + size_t n = snprintf(opts.address, + sizeof(opts.address), + "ssl://%s:8883", + hostname); + if (n > sizeof(opts.address)) { + printf("Error, buffer for storing URL was too small.\n"); + return false; + } + } + return true; +} + + +bool GetOpts(int argc, char **argv) +{ + int pos = 1; + if (argc < 2) { + return false; + } + + if (strcmp(argv[pos], "--json") == 0) { + if (++pos < argc) { + char * filename = argv[pos]; + printf("Reading parameters from json file %s\n", filename); + if (get_connection_params_file(filename)) + { + return true; + } + } + exit(EXIT_FAILURE); + } + + char *org = NULL; + char *type = NULL; + char *deviceid = NULL; + bool calcurl = true; + bool calcclientid = true; + bool hasPayload = false; + + if (argc < 2) { + return false; + } + + while (pos < argc) { + if (strcmp(argv[pos], "--payload") == 0) { + if (++pos < argc) { + opts.payload = argv[pos]; + hasPayload = true; + } + else { + return false; + } + } + if (strcmp(argv[pos], "--deviceid") == 0) { + if (++pos < argc) { + deviceid = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--org") == 0) { + if (++pos < argc) { + org = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--type") == 0) { + if (++pos < argc) { + type = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--keypath") == 0) { + if (++pos < argc) { + opts.keypath = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--devcert") == 0) { + if (++pos < argc) { + opts.devcert = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--rootpath") == 0) { + if (++pos < argc) { + opts.rootpath = argv[pos]; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--topic") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.topic, argv[pos]); + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--address") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.address, argv[pos]); + calcurl = false; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--clientid") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.clientid, argv[pos]); + calcclientid = false; + } + else { + return false; + } + } + else if (strcmp(argv[pos], "--username") == 0) { + if (++pos < argc) { + strcpy((char *restrict) & opts.username, argv[pos]); + } + else + return false; + } + pos++; + } + + if (!hasPayload) { + printf("Payload not passed\n"); + return false; + } + if (calcurl) { + size_t n = snprintf(opts.address, + sizeof(opts.address), + "ssl://%s.messaging.internetofthings.ibmcloud.com:8883", + org); + if (n > sizeof(opts.address)) { + printf("Error, buffer for storing URL was too small.\n"); + return false; + } + } + + if (calcclientid) { + size_t n = snprintf(opts.clientid, + sizeof(opts.clientid), + "d:%s:%s:%s", + org, + type, + deviceid); + if (n > sizeof(opts.clientid)) { + printf("Error, buffer for storing client ID was too small.\n"); + return false; + } + } + + return true; +} +// [END iot_mqtt_opts] + +/** + * Connects MQTT client and transmits payload. + */ +// [START iot_mqtt_run] +int main(int argc, char *argv[]) +{ +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + OPENSSL_config(NULL); +#else + OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); +#endif + OpenSSL_add_all_algorithms(); + OpenSSL_add_all_digests(); + OpenSSL_add_all_ciphers(); + int rc = -1; + + if (GetOpts(argc, argv)) { + printf("address: %s\n", opts.address); + printf("devCert: %s\n", opts.devcert); + rc = Publish(opts.payload, strlen(opts.payload)); + printf("Publish done with error code : %d\n", rc); + } + else { + Usage(); + } + + EVP_cleanup(); +} +// [END iot_mqtt_run]
diff --git a/demos/linux/sss_pkcs11/CMakeLists.txt b/demos/linux/sss_pkcs11/CMakeLists.txt new file mode 100644 index 0000000..d1ac07b --- /dev/null +++ b/demos/linux/sss_pkcs11/CMakeLists.txt
@@ -0,0 +1,48 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(sss_pkcs11) + +FILE( + GLOB + files + ${PROJECT_NAME}.c +) + +FILE( + GLOB + pkcs11_files + ${CMAKE_SOURCE_DIR}/sss/plugin/pkcs11/*.c +) + +ADD_DEFINITIONS(-DPKCS11_LIBRARY) +ADD_DEFINITIONS(-DPKCS11_SESSION_OPEN) + +ADD_LIBRARY(${PROJECT_NAME} SHARED ${files} ${pkcs11_files}) + +TARGET_INCLUDE_DIRECTORIES( + ${PROJECT_NAME} + PRIVATE ${CMAKE_SOURCE_DIR}/demos/linux/sss_pkcs11/include + #PKCS11 Dependencies + PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/libraries/freertos_plus/standard/pkcs11/include + PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/libraries/3rdparty/pkcs11 + PRIVATE ${CMAKE_SOURCE_DIR}/sss/plugin/pkcs11 +) + +##PKCS11 Dependencies +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${DEMOS_KSDK_DIR}/common) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib) +ENDIF() + +COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/pkcs11 + ${SMCOM} +)
diff --git a/demos/linux/sss_pkcs11/Readme.rst b/demos/linux/sss_pkcs11/Readme.rst new file mode 100644 index 0000000..26b2172 --- /dev/null +++ b/demos/linux/sss_pkcs11/Readme.rst
@@ -0,0 +1,284 @@ +.. + Copyright 2019 NXP + + + +.. _linux-demos-greengrass: + +================================================== +Greengrass Demo for Linux +================================================== + +AWS IoT Greengrass is a software provided by AWS to extend cloud capabilities +to locally connected devices. This allows local devices to publish/subscribe +to a topic even if there is no connectivity with AWS IoT console. A Greengrass +group consists of a Greengrass core, multiple Greengrass devices connected to +that core, and lambda functions and other services running on that core. In +this, the Greengrass core performs the functions of AWS IoT console. + +Also see `What Is AWS IoT Greengrass`_ +for more details about AWS IoT Greengrass. + +This demo is to demonstrate how to integrate SE050 with AWS IoT Greengrass +core and RaspberryPi as hardware security to store core specific credentials +for IoT client and MQTT server. + +.. note:: Hardware security feature is available only for AWS IoT Greengrass + Core v1.7 and later. We have used Greengrass core v1.10.0 for integration + +Prerequisites +================================================== + +- AWS Greengrass account (Also see supported regions for Greengrass) +- RaspberryPi 3 Model B+ or Model B. The architecture of your Pi must be + armv7l or later +- Raspbian Buster operating system +- Python 2.7 +- ssscli Tool. Refer to :ref:`cli-tool` + + +.. _prepare-greengrass: + +Preparing the Greengrass group +================================================== + +1) Follow the modules 1 and 2 as described in `Environment Setup for Greengrass`_ + to set up Greengrass group and Greengrass core. + + .. note:: In Module 2, if you choose Easy Group Creation, AWS will create credentials + for Greengrass IoT core and provision in the registry. Skip the next step + if you choose Easy Group Creation. You could otherwise create your + own credentials and provision AWS registry as explained in the next step. + + +#) If you wish to use your own credentials, upload the your RootCA + and verification certificate in ``Secure->CAs`` tab under IoT Core. + + - While creating Greengrass group, choose ``Advanced group creation``. + - You can either assign IAM role or skip it for later. + - Under Set up your security, choose ``Advanced setup`` and then + choose ``Use my certificate``. + - Select your active RootCA certificate and upload corresponding + device certificate + + +#) If you used your own credentials, download sample :file:`config.json` file + for greengrass available at `AWS IoT Greengrass Core Configuration File`_ + + After completing Module 2, store your device certificate under certs + directory where you have extracted AWS IoT Greengrass core software (by + default :file:`/greengrass` directory) and the downloaded + :file:`config.json` under config directory. + + +#) Do **NOT** run the daemon yet. + + +Provisioning SE050 and Building PKCS#11 library +================================================== + +1) Before running the Greengrass daemon, you would need to + provision your SE050 and build PKCS#11 library. + +#) Complete :numref:`cli-doc-pre-steps` :ref:`cli-doc-pre-steps` for ssscli tool setup + +#) Run the following steps to provision your SE050 with Greengrass core keypair:: + + ssscli connect se050 t1oi2c none + ssscli se05x reset + ssscli set ecc pair 0x20181001 <path-to-core-keypair> + ssscli disconnect + + .. note:: Greengrass uses labels to address objects on tokens. To make the PKCS#11 library + use a specific keyID, the label should start with ``sss:`` followed by 32-bit keyID in + hexadecimal format. For example, the label for the command used above would be + ``sss:20181001``. + +#) Build and install PKCS#11 library for Greengrass core. + Refer to :numref:`pkcs11-standalone` :ref:`pkcs11-standalone` + + +Updating Greengrass configuration +================================================== + +If you have successfully completed :ref:`prepare-greengrass`, you would have +:file:`config.json` under config directory of AWS IoT Greengrass core software +(by default as :file:`/greengrass` directory). A sample of :file:`config.json` +is:: + + { + "coreThing" : { + "caPath" : "root.ca.pem", + "certPath" : "hash.cert.pem", + "keyPath" : "hash.private.key", + "thingArn" : "arn:partition:iot:region:account-id:thing/core-thing-name", + "iotHost" : "host-prefix-ats.iot.region.amazonaws.com", + "ggHost" : "greengrass-ats.iot.region.amazonaws.com", + "keepAlive" : 600 + }, + "runtime" : { + "cgroup" : { + "useSystemd" : "yes" + } + }, + "managedRespawn" : false, + "crypto" : { + "principals" : { + "SecretsManager" : { + "privateKeyPath" : "file:///greengrass/certs/hash.private.key" + }, + "IoTCertificate" : { + "privateKeyPath" : "file:///greengrass/certs/hash.private.key", + "certificatePath" : "file:///greengrass/certs/hash.cert.pem" + } + }, + "caPath" : "file:///greengrass/certs/root.ca.pem" + } + } + +Remove the ``caPath``, ``certPath``, and ``keyPath`` values from the ``coreThing`` object. + +Update the ``certificatePath`` property of ``IoTCertificate`` object to the path of device certificate. + +.. note:: Currently AWS IoT Greengrass core does not support loading certificates from hardware. + These have to be provided as a path to a file on filesystem. + +Update the values of ``privateKeyPath`` under ``SecretsManager`` and ``IoTCertificate`` objects +with *pkcs11:object=sss:20181001;type=private*. + +Add the following ``MQTTServerCertificate`` object under ``principals`` object:: + + "MQTTServerCertificate": { + "privateKeyPath": "pkcs11:object=sss:20181001;type=private" + } + +Add the following ``PKCS11`` object under ``crypto`` object:: + + "PKCS11": { + "P11Provider": "/path/to/libsss_pkcs11.so", + "slotLabel": "SSS_PKCS11", + "slotUserPin": "1234" + } + +Add commas where needed to create a valid JSON document. + +In this file, we have used a shared key for ``MQTTServerCertificate``, +``IoTCertificate`` and ``SecretsManager`` components. In ``PKCS11`` object, we +specify which PKCS#11 module to load and which slot to use in that module. All +PKCS#11 objects specified for different components will refer to the same +token. + + +Running Greengrass Core +================================================== + +Start the Greengrass daemon by running the following command in +:file:`ggc/core` directory under AWS IoT Greengrass core software directory:: + + sudo ./greengrassd start + +The Daemon should start successfully. If you face any problem while starting +the Greengrass daemon, refer to Troubleshooting section below. Also see +runtime logs under :file:`/greengrass/ggc/var/log/system` directory. + + +Connecting Devices to Greengrass Core +================================================== + +Follow steps mentioned from Module 3 to test Greengrass connectivity: +`Lambda Functions on AWS IoT Greengrass`_ + + +Over-The-Air (OTA) Updates +================================================== + +To configure your device for OTA updates, you also need additional +PKCS#11 engine for OpenSSL. You can use OpenSC's ``libp11`` as +the engine. It is recommended that you build the engine manually. + +Run the following commands:: + + git clone https://github.com/OpenSC/libp11.git + cd libp11 + sudo apt install pkgconf libssl-dev libtool + autoreconf --verbose --install --force + ./configure && make && sudo make install + +This will build the PKCS#11 engine for OpenSSL. Next, you have to +specify the paths to the engine in your OpenSSL configuration file. +Instead of editing default OpenSSL configuration file, you can +maintain two separate files. + +Place this line at the top, before any sections are defined:: + + openssl_conf = openssl_init + +At the end of the file add the following configuration:: + + [openssl_init] + engines=engine_section + + [engine_section] + pkcs11 = pkcs11_section + + [pkcs11_section] + engine_id = pkcs11 + dynamic_path = /usr/lib/arm-linux-gnueabihf/engines-1.1/pkcs11.so + MODULE_PATH = /usr/local/lib/libsss_pkcs11.so + init = 0 + +Here, ``dynamic_path`` is the path to PKCS#11 engine *.so* file. +This is installed in :file:`/usr/lib/arm-linux-gnueabihf/` directory. +This path will also be printed out while installing ``libp11`` library. + +``MODULE_PATH`` is the path to the PKCS#11 library installed in +:numref:`pkcs11-standalone` :ref:`pkcs11-standalone`. + +You can also test if OpenSSL is able to load the PKCS#11 library +by executing the following command:: + + openssl engine dynamic -pre SO_PATH:/usr/lib/arm-linux-gnueabihf/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LOAD -pre MODULE_PATH:/usr/local/lib/libsss_pkcs11.so + +You should be able to see the following output:: + + (dynamic) Dynamic engine loading support + [Success]: SO_PATH:/usr/lib/arm-linux-gnueabihf/engines-1.1/pkcs11.so + [Success]: ID:pkcs11 + [Success]: LOAD + [Success]: MODULE_PATH:/usr/local/lib/libsss_pkcs11.so + Loaded: (pkcs11) pkcs11 engine + +Follow the steps listed in `OTA Updates of AWS IoT Greengrass Core Software`_ +to configure the backend for OTA updates. + + +Troubleshooting +================================================== + +1) Error message **greengrass deployment failed too many levels of symbolic links** + + Check if your linux supports OverlayFS. Also confirm that the Raspberry Pi + image version matches the version specified in `Setting Up a Raspberry Pi`_. + Currently, AWS IoT Greengrass Core has been tested on + **2019-07-10-raspbian-buster** image. Greengrass core might not work with + other images like Raspbian Stretch. + +#) Error message **connection reset by peer**. + + Add properties ``iotHttpPort`` and ``ggHttpPort`` to ``coreThing`` object as:: + + "iotHttpPort" : 443, + "ggHttpPort" : 443 + + +If you face any other issue, refer to `Troubleshooting AWS IoT Greengrass`_. + + + +.. _OTA Updates of AWS IoT Greengrass Core Software: https://docs.aws.amazon.com/greengrass/latest/developerguide/core-ota-update.html +.. _Setting Up a Raspberry Pi: https://docs.aws.amazon.com/greengrass/latest/developerguide/setup-filter.rpi.html +.. _Troubleshooting AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-troubleshooting.html +.. _Lambda Functions on AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/module3-I.html +.. _AWS IoT Greengrass Core Configuration File: https://docs.aws.amazon.com/greengrass/latest/developerguide/gg-core.html#config-json +.. _Environment Setup for Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html +.. _What Is AWS IoT Greengrass: https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html
diff --git a/demos/linux/sss_pkcs11/greengrass_client_credential_keys.h b/demos/linux/sss_pkcs11/greengrass_client_credential_keys.h new file mode 100644 index 0000000..a171a06 --- /dev/null +++ b/demos/linux/sss_pkcs11/greengrass_client_credential_keys.h
@@ -0,0 +1,44 @@ +/* + * + * Copyright 2018,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef GREENGRASS_CREDENTIAL_KEYS_H +#define GREENGRASS_CREDENTIAL_KEYS_H + +#if defined(SSS_USE_FTR_FILE) +#include "fsl_sss_ftr.h" +#else +#include "fsl_sss_ftr_default.h" +#endif + +#if !SSS_HAVE_GGC +#error Only with Greengrass +#endif + +#ifdef __GNUC__ +#define USED __attribute__((used)) +#else +#define USED +#endif + +/* +* PEM-encoded client certificate* +* +*/ + +#if SSS_HAVE_ALT +static const char keyCLIENT_CERTIFICATE_PEM[] = {0}; +static const char keyCLIENT_PRIVATE_KEY_PEM[] = {0}; + +#else + +static const char keyCLIENT_CERTIFICATE_PEM[] = {0}; +static const char keyCLIENT_PRIVATE_KEY_PEM[] = {0}; + +#endif + +static const char *USED keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM = ""; + +#endif
diff --git a/demos/linux/sss_pkcs11/include/projdefs.h b/demos/linux/sss_pkcs11/include/projdefs.h new file mode 100644 index 0000000..6756487 --- /dev/null +++ b/demos/linux/sss_pkcs11/include/projdefs.h
@@ -0,0 +1,16 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef _PROJDEFS_H_ +#define _PROJDEFS_H_ + +typedef long BaseType_t; + +#define pdFALSE ((BaseType_t)0) +#define pdTRUE ((BaseType_t)1) + +#define pdPASS (pdTRUE) +#define pdFAIL (pdFALSE) + +#endif /*_PROJDEFS_H_*/
diff --git a/demos/linux/sss_pkcs11/sss_pkcs11.c b/demos/linux/sss_pkcs11/sss_pkcs11.c new file mode 100644 index 0000000..ca9df91 --- /dev/null +++ b/demos/linux/sss_pkcs11/sss_pkcs11.c
@@ -0,0 +1,17 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> + + +static ex_sss_boot_ctx_t gex_sss_demo_boot_ctx; +ex_sss_boot_ctx_t *pex_sss_demo_boot_ctx = &gex_sss_demo_boot_ctx; + +static ex_sss_cloud_ctx_t gex_sss_demo_tls_ctx; +ex_sss_cloud_ctx_t *pex_sss_demo_tls_ctx = &gex_sss_demo_tls_ctx; + +char *g_port_name = NULL; + +#define EX_SSS_BOOT_DO_ERASE 0
diff --git a/demos/linux/tls_client/CMakeLists.txt b/demos/linux/tls_client/CMakeLists.txt new file mode 100644 index 0000000..3ae3db4 --- /dev/null +++ b/demos/linux/tls_client/CMakeLists.txt
@@ -0,0 +1,182 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +CMAKE_MINIMUM_REQUIRED(VERSION 3.5) + +# Don't do an in-source build +# ########################### +#if(${PROJECT_SOURCE_DIR} STREQUAL ${PROJECT_BINARY_DIR}) +# message( " In-source builds are not allowed." ) +# message( "Create a specific build directories under tls_client" ) +# message( " mkdir build" ) +# message( " cd build" ) +# message( " cmake ../." ) +# message( FATAL_ERROR " In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt and CMakeFiles folder." ) +#endif() +# +#MESSAGE("(1) ${PROJECT_SOURCE_DIR}") +#MESSAGE("(2) ${PROJECT_BINARY_DIR}") + +PROJECT(tls_client) + +INCLUDE(/usr/local/share/se05x/cmake_options_installed.cmake) + +SET(CMAKE_CXX_STANDARD 11) +SET(CMAKE_BUILD_TYPE Debug) + +# Applet specific settings +IF(SSS_HAVE_APPLET_A71CH) + MESSAGE("Secure Element: A71CH") + SET(SE_LIB liba71ch) +ELSEIF(SSS_HAVE_APPLET_SE05X_C) + MESSAGE("Secure Element: SE05X") + SET(SE_LIB libse05x) +ELSE() + MESSAGE(ERROR "Either SE05X_C or A71CH required (todo: extend for SE050A/B)") +ENDIF(SSS_HAVE_APPLET_A71CH) + +# Interface specific settings +IF(SSS_HAVE_SMCOM_JRCP_V2) + MESSAGE("JRCP V2 interface") + ADD_DEFINITIONS(-DSMCOM_JRCP_V2) +ELSEIF(SSS_HAVE_SMCOM_JRCP_V1) + MESSAGE("JRCP V1 interface") +ELSEIF(SSS_HAVE_SMCOM_SCI2C) + MESSAGE("SCI2C interface") +ELSEIF(SSS_HAVE_SMCOM_T1OI2C) + MESSAGE("T1oI2C interface") + ADD_DEFINITIONS(-DT1oI2C -DT1oI2C_UM11225) +ELSE() + MESSAGE(ERROR "No supported/known SMCOM implementation available") +ENDIF(SSS_HAVE_SMCOM_JRCP_V2) + +FIND_PACKAGE(OpenSSL) # Find the OpenSSL Package +IF(OPENSSL_FOUND) + MESSAGE("Found: ${OPENSSL_CRYPTO_LIBRARY} and ${OPENSSL_SSL_LIBRARY}") + INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR}) + ADD_DEFINITIONS(-DOPENSSL_LOAD_CONF) +ELSE() + MESSAGE(ERROR "OpenSSL required") +ENDIF() + +INCLUDE_DIRECTORIES(/usr/local/include/se05x ../common) + +ADD_EXECUTABLE( + tlsSe050Client + ../common/snw_sss.cpp + ../common/snw_util.cpp + src/tlsSe050Client.cpp +) + +MESSAGE("OPENSSL_CRYPTO_LIBRARY: " ${OPENSSL_CRYPTO_LIBRARY}) + +MESSAGE("OPENSSL_SSL_LIBRARY: " ${OPENSSL_SSL_LIBRARY}) + +# Comment / put to false to link against static libraries +SET(LINK_TO_SHARED TRUE) + +IF(SSS_HAVE_Host_Cygwin) + MESSAGE("Cygwin Host") + SET(MY_LIBRARIES_PREFIX "/usr/local/lib/") + IF(LINK_TO_SHARED) + MESSAGE("Linking to shared libraries") + SET(MY_LIB_EXTENSION "dll.a") + ELSE() + MESSAGE("Linking to static libraries") + SET(MY_LIB_EXTENSION "a") + ENDIF(LINK_TO_SHARED) +ELSE() + SET(MY_LIBRARIES_PREFIX "") + IF(LINK_TO_SHARED) + MESSAGE("Linking to shared libraries") + SET(MY_LIB_EXTENSION "so") + ELSE() + MESSAGE("Linking to static libraries") + SET(MY_LIB_EXTENSION "a") + ENDIF(LINK_TO_SHARED) +ENDIF(SSS_HAVE_Host_Cygwin) + +TARGET_LINK_LIBRARIES( + tlsSe050Client + ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION} + ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} +) + +IF(SSS_HAVE_SMCOM_JRCP_V2) + TARGET_LINK_LIBRARIES(tlsSe050Client ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION}) +ENDIF(SSS_HAVE_SMCOM_JRCP_V2) + +IF(NXPInternal) + ADD_EXECUTABLE( + tstTlsSe050Client + ../common/snw_sss.cpp + ../common/snw_util.cpp + tst/tstTlsSe050Client.cpp + ) + + TARGET_LINK_LIBRARIES( + tstTlsSe050Client + ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION} + ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + # libstdc++.${MY_LIB_EXTENSION} + ) + + IF(SSS_HAVE_SMCOM_JRCP_V2) + TARGET_LINK_LIBRARIES(tstTlsSe050Client ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION}) + ENDIF(SSS_HAVE_SMCOM_JRCP_V2) + + ADD_EXECUTABLE(ecdhKeyAgreement ../common/snw_sss.cpp tst/ecdhKeyAgreement.c) + + TARGET_LINK_LIBRARIES( + ecdhKeyAgreement + ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION} + # libstdc++.${MY_LIB_EXTENSION} + ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + ) + + IF(SSS_HAVE_SMCOM_JRCP_V2) + TARGET_LINK_LIBRARIES(ecdhKeyAgreement ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION}) + ENDIF(SSS_HAVE_SMCOM_JRCP_V2) + + ADD_EXECUTABLE( + tstTlsSe050ClientConnectionLoop + ../common/snw_sss.cpp + ../common/snw_util.cpp + tst/tstTlsSe050ClientConnectionLoop.cpp + ) + + TARGET_LINK_LIBRARIES( + tstTlsSe050ClientConnectionLoop + ${MY_LIBRARIES_PREFIX}libSSS_APIs.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}${SE_LIB}.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}liba7x_utils.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libsmCom.${MY_LIB_EXTENSION} + ${MY_LIBRARIES_PREFIX}libex_common.${MY_LIB_EXTENSION} + # libstdc++.${MY_LIB_EXTENSION} + ${OPENSSL_CRYPTO_LIBRARY} + ${OPENSSL_SSL_LIBRARY} + ) + + IF(SSS_HAVE_SMCOM_JRCP_V2) + TARGET_LINK_LIBRARIES(tstTlsSe050ClientConnectionLoop ${MY_LIBRARIES_PREFIX}libjrcplib.${MY_LIB_EXTENSION}) + ENDIF(SSS_HAVE_SMCOM_JRCP_V2) + +ENDIF(NXPInternal)
diff --git a/demos/linux/tls_client/build/readme.txt b/demos/linux/tls_client/build/readme.txt new file mode 100644 index 0000000..adaa9de --- /dev/null +++ b/demos/linux/tls_client/build/readme.txt
@@ -0,0 +1,16 @@ +To build the tls_client example program: + +cmake ../. +cmake --build . + +Remarks +(1) Build options will match the features of the installed libraries under + /usr/local/lib. + This is achieved by including /usr/local/share/se05x/cmake_options_installed.cmake + in ../CMakeLists.txt +(2) You can build against either the static (*.a) or shared libaries (*.so). Ensure these + are installed on /usr/local/lib +(3) When building against shared libraries [default] you may have to issue the following + command first: + + (sudo) ldconfig /usr/local/lib
diff --git a/demos/linux/tls_client/credentials/RSA/tls_client.cer b/demos/linux/tls_client/credentials/RSA/tls_client.cer new file mode 100644 index 0000000..0643e6c --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_client.cer
@@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID4DCCAcgCFCaImjxSoYWx5dFkQYDY1oUjew6sMA0GCSqGSIb3DQEBCwUAMDYx +GjAYBgNVBAsMEU5YUCBQbHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENB +dlJ4eHgwHhcNMTkwOTAyMTU1NzA1WhcNMzEwODMwMTU1NzA1WjAjMSEwHwYDVQQD +DBhOWFBfU0UwNTBfVExTX0NMSUVOVF9SU0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCevs/zGVF0c2u/HlaHQOxwMGafuZ5fx2Zz7PuRmao8/yHtI69A +grbfnx3ah8wnPgi/3HoxC5w8gCp4qOzoR5SJRGC4AEZ4qE57PaxkhfI8W2MkjCuL +FeuBF4KL9rAiJvwIcV93yQOO0opk6mtHRJJMzlHH1sn7R4gU40XZNs/wSnaSQB7E +cVyyqLeOt0BWdjsUQZQ1xIpm5cLhT45ZV78P8TshEJ+AX37+KXuOZFiKx/kCy3jK +C246AypWJ9ruqw/CHgT0HyzB6Lau0B3qW48mgv/C+IO1uUOKeIQxqtL3+d+oZ9pE +PTJyFwEJGXa4BzzG3tW7CHFojV5P5LCZtrXxAgMBAAEwDQYJKoZIhvcNAQELBQAD +ggIBAAxTjMtP92YsqmDwRTeRLrtOD0SyqkEvji5qi66pw7L1SoFodsyTe/3Vf/eC +QOq6Z2ba0Fe/ensYnI7BkiXpqHE78fZfjnXMBWT58+fA9c8AwDMwrT02MDktMART +gLFK0XsygqUpbDRLWFIBzdYduO6Epb8OMWaCJJ/tfFU7QSmw2N8pxxvGyjcstgOu +Cb7mulZn/ri4zFoL6T5fbWqDACK1nWqk3f35I1tHDb+kbWXAUj0bQ4bs5iqTGWrX +3APFS9bQ2xsWEmJLtnciWxnfX3kSVxHyEqEnwLukGR6E9/0UrE4PSzsjaOJSDG8b +rq6iomKhnzh16lWmX8AU+w4CoNr1VLaiTa3bwTJr6/NW1BWTQleAYxHNqN8Nix5w +4DBeaML/MYgxmTcoH2tCTtoFM4ph1m5TVNzgwli5egpzOAd3i9ytB7HMID0zdcj+ +o0e7mjDAhK5iVlTXsbUm8w3oTku7G6kHvVwJkVH3unTjJDG1p1rmELA+qjayjuX6 +x9o1eUjzFRQE7uqK1szpjLGlfEqqq53BfB0ZxV1rMf3JY/J/8yWFSDBBV0da7Bmi +fKljjcnz1sro2p3p1/7UckhTVOoltQJiuPeXFnqv4fQwHRMI7jumhnma6CGDus2K +6u9OD9LuuX3EmMWBTfovyqTj8W7zQ9Hnz4B7ibOpt4bCHWXC +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_client_key.pem b/demos/linux/tls_client/credentials/RSA/tls_client_key.pem new file mode 100644 index 0000000..2c84a8b --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_client_key.pem
@@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAnr7P8xlRdHNrvx5Wh0DscDBmn7meX8dmc+z7kZmqPP8h7SOv +QIK2358d2ofMJz4Iv9x6MQucPIAqeKjs6EeUiURguABGeKhOez2sZIXyPFtjJIwr +ixXrgReCi/awIib8CHFfd8kDjtKKZOprR0SSTM5Rx9bJ+0eIFONF2TbP8Ep2kkAe +xHFcsqi3jrdAVnY7FEGUNcSKZuXC4U+OWVe/D/E7IRCfgF9+/il7jmRYisf5Ast4 +ygtuOgMqVifa7qsPwh4E9B8swei2rtAd6luPJoL/wviDtblDiniEMarS9/nfqGfa +RD0ychcBCRl2uAc8xt7VuwhxaI1eT+Swmba18QIDAQABAoIBABqXV/oeyZg6JVhU +WqY5Z+G7GdWzoCXnHvBYSCOxm+Sv0B0LFzY1LzDyVGvgx3/jUk/hPM6uZTN1PKgN +k/Gs2+LKg3EPCr73Yn4ebJxCG7uki0z59elMeLCdIY8UeZie8yTu6NEF6QSpm+kf +o2zCvccD4IsbHaZr6w2krHSgS+CyNOOHDR//NCSZ84bo7P1CnadeVchNYx55bqL5 +PKiEPlCIeUqFMGwXHI0rA1spux8r6sMrAtprEwiEln0kRBWY5+lod8wQ90VW2s88 +KpQiYewHXNn0JsaT2jL2RffzoLpNqKoWko8KOGGw/Z0aG78Tj01ekoUDGjuX9oPs ++mVoFGkCgYEA0tXlc/a/Fhiaz/EBnZTI8mx1Ikay4kEdwbD2cmgGi0X2wPZ3xAzJ +VNzwqke1zBEZOKBRsNBDMT0yc7fgu5LzUzaQ3p+21emRHbaLIodWejSK/wCpP7H3 +K3RqJI+Gumyqh7Gz4TV6tCZ5Z15RMH3IFSvDPQ4o3qCR2VTPyLPzFWsCgYEAwMBR +4kd2Y23WrnapjwYm2YQG5zclKlHLndbCDgzQIjAlP8BjtreM0mVTHAiscX9BSryK +VmCHbFXbgpNktaGnGRGs7eJnm8UfxHtNMdqUQuvgMloYZspI3KZAiP8l5iEawlo/ +dElF702WzqWExK8juOkXNwYCPllN4YO+tcB9HRMCgYEAxn3h298934uilIqNvtHI +rZM2Y+Kznxc28JeuLd+J6a0gtmJUNxrioSaw3V9N5KVkXU9yGUi5Oa4nxZIj3fRn +aLxCf5VWCOYwXQzyyLspyzuUcKcqsHDYBu0+0NTfPrv3gHDorOowb1KZkZvWTBTf +Pi9JTD38dDwvk7CpPodMH6kCgYB6ISGBA5Cy3WS6dHtpIRe6mNoa5KkK0Hr4jpu0 +dU/naaQgadGEc3ap1QO87o38+AmxxhbNNip4bUpByQx1vXB4BOgSbnMBkvxW7V1z +KjDo2jXbEZUGhEN4c2rOowQrdWxUGwS7tLW4M+xLETs3uFUlE6Pe/FKtmL4tFuHe +nZFouwKBgQDMS1j+de3uisAgFdqfcShgjLGXdsRN2p8uCSB7kl/ve4vxvNVOjYIi +uyM31g4yu/WySnerhdDahmMzT5kfpt1slsesodC7575kDuAu70+5O6dWu4IGtlHP +V+s32oeBdU6QGBygCfH66IvYDbboiDoXjBYX6STDNLIN8uBaPWFYxw== +-----END RSA PRIVATE KEY-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_client_key_pub.pem b/demos/linux/tls_client/credentials/RSA/tls_client_key_pub.pem new file mode 100644 index 0000000..c829529 --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_client_key_pub.pem
@@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnr7P8xlRdHNrvx5Wh0Ds +cDBmn7meX8dmc+z7kZmqPP8h7SOvQIK2358d2ofMJz4Iv9x6MQucPIAqeKjs6EeU +iURguABGeKhOez2sZIXyPFtjJIwrixXrgReCi/awIib8CHFfd8kDjtKKZOprR0SS +TM5Rx9bJ+0eIFONF2TbP8Ep2kkAexHFcsqi3jrdAVnY7FEGUNcSKZuXC4U+OWVe/ +D/E7IRCfgF9+/il7jmRYisf5Ast4ygtuOgMqVifa7qsPwh4E9B8swei2rtAd6luP +JoL/wviDtblDiniEMarS9/nfqGfaRD0ychcBCRl2uAc8xt7VuwhxaI1eT+Swmba1 +8QIDAQAB +-----END PUBLIC KEY-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_rootca.cer b/demos/linux/tls_client/credentials/RSA/tls_rootca.cer new file mode 100644 index 0000000..a3d4979 --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_rootca.cer
@@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIIFTTCCAzWgAwIBAgIUbquLQ50/IPBd+lCvNbunNNDk/WMwDQYJKoZIhvcNAQEL +BQAwNjEaMBgGA1UECwwRTlhQIFBsdWcgVHJ1c3QgQ0ExGDAWBgNVBAMMD05YUCBS +b290Q0F2Unh4eDAeFw0xOTA5MDIxNTU3MDRaFw0zMTA4MzAxNTU3MDRaMDYxGjAY +BgNVBAsMEU5YUCBQbHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENBdlJ4 +eHgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDiRoS2Wgb3B+mm1zA0 +0suGOZ2M0LYMJtFFjPux9gSbyIPlM0J5zJvsSalcEKqxVjYFnD5Pc1bwjt/6m0Ql +Oxf6DJJdNSF3erzicTTkSHUoXopTbNkE6svSignN41CxheA71AGdx51mG2CKEAx1 +pmLIEDuTABYbs790eY+r8I6naQspSd3EyFHBzK2vdPgd0Fb4GtVLN4HcppMzkOfH +jDw6CPqzO/ZIX+QB91aiHustEL5zh32lvlG4o8wL+B09W12XxYOnw7sDo4nd8q91 +kAdi05VZ9o0VGrDZ/v7LZMPEZ4jPtARiYyXQgf4H9QRj4XJZpdBzoxOwv0t6XG65 +2GzNHW+T2Hz1xaMjtKpfxlhCPtfnQ5lz2IE9kfc2/ToiNmpMf0qJw/MqxyEYW6dj +UlLHZGB0SFkWy2/fn0mqD4+XZjoVMUcpbVfvk+RsZjbox16x2TXxwiQPfw2l612c +qBRYZcykWi4ywIUCB4j+DZOSiO3XF8N5maH4mcVampyBumaFaNbdhP1ra1iSjdlK +R9zlkq5ucA92lXCPc/emzVCAbtjvXUVi9AVTUFbUGpJQWHkJonUPoAC0CRWEAJEm +sRG3OWXvMpIL8XYRWT9ujWy8qVZDEnkSRdIe46Baxh3wkoA+vMPddOvRqYMR26CL +JhX0MJYSvIwR44pbrvv9pUsCnQIDAQABo1MwUTAdBgNVHQ4EFgQUdH1cw26Jhr4O +UFH7QiYnuogu75IwHwYDVR0jBBgwFoAUdH1cw26Jhr4OUFH7QiYnuogu75IwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAWodxRA08TaYiEWjiZE5B +rlJLUhbdFJiw5WVi0qHKmNV1Ezm1nwsvMn0tc1tfJEFjcgwtupfd6XNUCV+kKziV +3Vbi3C4qle/1CtHSC/xvG6hdiSHWnEbCjgSTlHMr8lNh1pr+Dwh/iaMqA8ceWvBt +LDAH2oiz2TjV84mljO8/rlzr3P+9CKAzP7jmxQyJ0roa4uW7dgP1lBIgcq6Kk6zn +AbCn5l869aJcVmtoOhmuu4eIc5EmlOkRIkBsVTvPWglFaCOHtoEoEJVU9pQkHJCA +fyi8E592viKJrAdy4yXfMZLYuCBnbRD6w/M4TkLfIcQx5SsZAlDKeYLuFsBoIA+D +iBfRKpLDjgxTCXh+MXt+C9nYuTPFvm8qKqCksCCbmbfxYn9XTWVUTaSg0MKGaMWe +iOMASO8tD0H001BvCzdWR/ivIZ+vUkzkprVV3D3h6LEX2Iw4FaRnuArQijy/9U4A +VutIdry9jHpXbR+79ZMjCkbCJspeswywuwbLfkzkWm6GxyQMeuLrTyaY+6R8E0fl +Uf5bo/cd84MvnVG5iH7qQHBIHegdpAAJFDOznOhzydSJKCHhGAK2GqdjL2xD6ugK +tOtCdQu9Iyv0rs8+yn72zVqWhaQxYl9i8kCB0NEWUD7cCStH40ljKByNMc4sT1Lx +7DkrjlBZQuAcsEcq+kAE8AM= +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_rootca_key.pem b/demos/linux/tls_client/credentials/RSA/tls_rootca_key.pem new file mode 100644 index 0000000..a7dcc8c --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_rootca_key.pem
@@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKQIBAAKCAgEA4kaEtloG9wfpptcwNNLLhjmdjNC2DCbRRYz7sfYEm8iD5TNC +ecyb7EmpXBCqsVY2BZw+T3NW8I7f+ptEJTsX+gySXTUhd3q84nE05Eh1KF6KU2zZ +BOrL0ooJzeNQsYXgO9QBncedZhtgihAMdaZiyBA7kwAWG7O/dHmPq/COp2kLKUnd +xMhRwcytr3T4HdBW+BrVSzeB3KaTM5Dnx4w8Ogj6szv2SF/kAfdWoh7rLRC+c4d9 +pb5RuKPMC/gdPVtdl8WDp8O7A6OJ3fKvdZAHYtOVWfaNFRqw2f7+y2TDxGeIz7QE +YmMl0IH+B/UEY+FyWaXQc6MTsL9LelxuudhszR1vk9h89cWjI7SqX8ZYQj7X50OZ +c9iBPZH3Nv06IjZqTH9KicPzKschGFunY1JSx2RgdEhZFstv359Jqg+Pl2Y6FTFH +KW1X75PkbGY26Mdesdk18cIkD38NpetdnKgUWGXMpFouMsCFAgeI/g2Tkojt1xfD +eZmh+JnFWpqcgbpmhWjW3YT9a2tYko3ZSkfc5ZKubnAPdpVwj3P3ps1QgG7Y711F +YvQFU1BW1BqSUFh5CaJ1D6AAtAkVhACRJrERtzll7zKSC/F2EVk/bo1svKlWQxJ5 +EkXSHuOgWsYd8JKAPrzD3XTr0amDEdugiyYV9DCWEryMEeOKW677/aVLAp0CAwEA +AQKCAf9qEKQk1g5tvUfI7RWrrSO5x0gSucKb75YpA+z3flqqq1MoHN8MONzd5al9 +flKEzeSEvLh4hZg7Kr3SuvU2fny+uSXiiwUk/GONwYMJfu1r/uTYNi2EIItqJUpz +OBqbHCX/5WDclLUzJ6IZFWzBuTyUiwdh4Kh8U8Vq05CFCD3WO2b/86AAneW08jx4 +AlxLnV0m720L1PkKdQqLIWGEKDgS/CKH4ZOQWWKHiWkSlWuntDGR9fDvwEaORjlf +Yu5R1IIKoosUGKuRCReW8itM8DaGHKflg6yeN+SuStkkfhdF+UIoGjnz5IXVNxnc +oP1t1D/FxfPwQID6WLEIqks80jYtDe07FS/IlhhIdnmien9wTrnz6qbpMKHTB0Jm +o1nU+02BQPrYYz6BaQIDp8Cbti0cLj8ilwa70pCRDaVoAgTkvURCw8BhPjq/05XB +k0TiFh4JyLNKmOFJ6nBpOgmZAanEv7W0MpYgpI/XXv+YlfK1GwcryKUffzbDWTDi +lF886j5/EEVb+t2LeI2AHrICLwlMaRpQi2EYz5T+I6zuFPP7zbftLVR551nH9bKx +DkHRHiCX7Gq1vul9zJXtEGOm/LQNPQkEyA2aVbPbStyh7cwfKVecbbT7hli0x/mk +aReFEQQiYAyEcSGqt0DncsappbP0R3sg8AAvtNmc3/7Svr4BAoIBAQD2OZRj114W +q+pmutV0I9crDUwwlVGnGMTfK7eaq5vhmjiwXmEFtx66Yh1riwFTJ5hi7ghfPqL1 +szhHfJPfWf1Bir8HnO+PEdBocDBd+62aWZK0v/gvFc1GdeiUFICx1/7w7o0YTaB8 +KHy+a7NGYopCOhGdM/sGqG2azu4JU/IeqLD9ty05dKiKiSoaDkO7hakv8vODZCQI +LaK6HAWdPm0r2NH036cC715NFvvNH5MZQO6t9Gu2rlM+wvZB3L0RLz3EGwiz+hV8 +WEiMNNqdmG/J6XJNMa0BPRmtjPx9zRONtbjDJTogZ26M6okSCqZwFwMTRiwiWqvN +0McAkaUdJp8tAoIBAQDrQjCAjmk8Bm+U2f/A2v6xTlErU29UhCyfapTv4tr0hoGN +42oXpM7rppuoE0mKS5Bgr51TbPZKbwYGR9btKyVTRs2QCeryTqvZrJdscbhIwJbR +0YwjwbO5LGAv7cAierItcnVSUxPpSmvUH37df1cYVVCMBQbN/UFDU8rsd+IyLgTU +J1Hkp6RLRM1q1400x0YZV8y+Y43hJXoe1RTnyWb7GkpuQBLo6/Z708nlBjYMI2Nh +R9J/diOKKHkosuJr7Q7qcMB8TpwHqi0UCrzqpUJLPDvtIkCBvzG9J8xknc/hg7Hw +shE3ZknWXZyfmexXWWRaQBjo2ar56fdmt8om75cxAoIBAQCy6953ur2FTgG0Cton +Xg/yGeSefTLrcKVG4pa1zzQj+RRunPZ11759g+SLDGS3D1O9t+jfhT2Xu1cPI2i0 +6ciNwwvTtWejGDfQXI3ZDZT2T1a6/7CSTo5vQCj0yf1GvoVkgISI/4e6ERWsrciF +Qf/j5hx8lpQ4H1YeI3Z30sdjHgQXKe+0C6CZoti0PF9dud/alvn7JV7FjpvsD4bI +398m+JSBE7BiAp0M+cGaKfKTbErEn5NSGVUmize1XnkJLsH8agSl+/l29RQqxhGC +aY36NCg6DfoAp2ysX4HuzIID/OQ48ilN+LstrRRTxudxFlfGvrw9bpPfqHGjaTKJ +f1I1AoIBAQCcrDba1nyUwgB7U/bz+6QUdoCt5uHEmkWRYQyQ+TYyFIWg9auI1XQM +Eael9jpKhGpBSZLvpSgch/WuJxemWM6BuCxb2Y8DEYt26m7phI5ivQdz8iZvBafo +EPp50M7c53NTut8RFUy0V6CZ4uO9JPnetapvpUVT124oJVyFwIz+OBF1LD5olZBf +pBFdLvHWDUPMyuEKhghNwYSjlepXNpSDc43QAJHXVpWO/4t8H3fM+6BKf+dahVXD +w5J0nTUXBQei77Xw0vUsUZO1vjTz21zb9+A820u0XJ0GSMPg2gxANlFBZ4T5rQBN +Z4hP7dUskta3F+q+337y8nKVkJ5q8bJxAoIBAQCihWoqGORPI6TXwRR4WSkCRvz/ +x8uAsMRmyjKri+WsqXdncyGVt9tzeSBIQLU7vcim9eWwHonhSvq3AB1eoBQixOCd +hpep/V9w1Yzxm8dptnv+8GltbghrBv/s0soY7tE5w/9FpVIMWQTWES9MuUWIs+H2 +uKYIxN60ILWKGdiDRT9rfFo2tBSDd72WJH/Qfa5Xe/q2uYDjmmzZbRLj9bN4xAXg +FoG4hwZdYt8PNxSnOtJaHGy546Id/lhYxFsJ21GVWX6w9j7ucv+L64bWniLfI+OQ +KJ/QYDVhYJQrVpZENV6Hf7JcalzNkDLUyuZccEbT+UoEg31gWIH1mtpViiIX +-----END RSA PRIVATE KEY-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_server.cer b/demos/linux/tls_client/credentials/RSA/tls_server.cer new file mode 100644 index 0000000..f0b9bc0 --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_server.cer
@@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID4DCCAcgCFCaImjxSoYWx5dFkQYDY1oUjew6tMA0GCSqGSIb3DQEBCwUAMDYx +GjAYBgNVBAsMEU5YUCBQbHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENB +dlJ4eHgwHhcNMTkwOTAyMTU1NzA1WhcNMzEwODMwMTU1NzA1WjAjMSEwHwYDVQQD +DBhOWFBfU0UwNTBfVExTX1NFUlZFUl9SU0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQC6ndhW0ZCF+D4f9unYXrO7oOhUA6PSyp3zuu73juvpiF5W+7IJ +Kz6ud9hJs/cGKg+un5vZAAM9LUqfDRawpdQXwLVlExuPfl87SRnp/MFib4QTjSCY +byl5ZPtqew4Lxg6YCbi2+eNdCikZf1hGA+GaUxdkTBdHGxvM7vv90vxAK8Qnv6dH +kavDlhSG7iQddhkJps5eQbedxzy7UKFIIHpW/wuUgTA35JJodpuic95aGDy72fbf +IXXBCQlQE8aj2xolLr+PpcDTHIFDIKDs9iyUA3okdKPqT5gDsOq0aNWrHSXfe6lx +NlJsCgnanOlR4T7w7Rf0vh+8EWjIMshenur3AgMBAAEwDQYJKoZIhvcNAQELBQAD +ggIBANpbU4CqpxOPAqPflnNqYWj7Gn16b04xb3WL4CORvoT2Sp5Nz64onNEhFMBI +7nAqZyb2Dj424Ni4sv3dtgscc5IGgMF+8FV7Eo6Rb6gzFC6VWHeavwSUHG2DRt8v +5CXHvTcecN7iwdQePFIDDrVW+3MBUowSPnRMNlG6FDssEIUkPzIav4JhIwIZbaQp +BmsicKew1aP/xCWrJ/QLJ46X6KAkCbgIqPKSkLoHwZ36B5gi4+Te6pvubtZGNlzc +CSsY77wD6DaQg7+8Bna+TgMjg4v3mNQ7kg5Dwbrlg1d+GMJ9UCHI4trtAtTSvUMG +cHMBfgnUWAvA2M1bZ/r4pE5EZ69NKTum+UZ5UoLR47xWIsH3DrfK2ZEvqlrFYJzR +lefvb6K+erQ1bcPWVSIoCQnGyViAQC4P+2QWGFoqV3fKLx2fIWO6+8WVeB9yKRHy +KV/zLgqrtMnnecGL8i/e6HxJZLvSciCKgmdDnWl3KNx9RHDkkjsdGq3stPfW6xLN +gN6c4MUmCg0vIlXz/t4mMqn6vx8KfFhP7prMwOt9nFFobuFpcPiat4uY96rcdVn6 +sxETRbLPCtBm+U3cqaIKo+cw863q/r2grdF7P83u+Djfq+bdf9g/5IlcRe/9nPeY +YOWc3QsjAax2QLiSNIELODxWDkiSqfqZtAcgGoGZvPbcpAbO +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/RSA/tls_server_key.pem b/demos/linux/tls_client/credentials/RSA/tls_server_key.pem new file mode 100644 index 0000000..02006fe --- /dev/null +++ b/demos/linux/tls_client/credentials/RSA/tls_server_key.pem
@@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAup3YVtGQhfg+H/bp2F6zu6DoVAOj0sqd87ru947r6YheVvuy +CSs+rnfYSbP3BioPrp+b2QADPS1Knw0WsKXUF8C1ZRMbj35fO0kZ6fzBYm+EE40g +mG8peWT7ansOC8YOmAm4tvnjXQopGX9YRgPhmlMXZEwXRxsbzO77/dL8QCvEJ7+n +R5Grw5YUhu4kHXYZCabOXkG3ncc8u1ChSCB6Vv8LlIEwN+SSaHabonPeWhg8u9n2 +3yF1wQkJUBPGo9saJS6/j6XA0xyBQyCg7PYslAN6JHSj6k+YA7DqtGjVqx0l33up +cTZSbAoJ2pzpUeE+8O0X9L4fvBFoyDLIXp7q9wIDAQABAoIBACD4oG9+aTVyTa+i +FWDYIpNE86dcWUZ17ABTB8OPadkB8gEWSTdbf6CdpgYnmL5rEgg9RPDLEsdtSCDf +1CFzuwxTTPlFrfnlTvgPi1ePA6/bmg9GQPsNsNs030LJ6QplfNCZ7xvM/MHEeMx7 +dmIwb1yvz5M16mryvC+yDa2j6FOB2sJ8e7IuuXi7BJhQPIQhpqlhLi6URuIRzSMI +gNP2wc3yHnffViaHB0AxJE8VuQvk52xm0htf3lhqHUEjk0GMSmSWsZ3NArmQX+1R +iWWI7Yjf+S+zmG9r9MSOfr61pSx3xW0hY9PIg131wt7bxQ4p8bUa0nbevpTSqDCF +HOi6lWECgYEA47bOKtmn3LPniDRqJN6Zed3Hh15MLlchxtBC2PzNrREIqyv4EWsa +sxO8eF0UEvcmut67QSkURRJNvtDrEwdlTVZKW4iIO4duHrOwCCLBQ9D5vanYamVE +eDRwX0tTZ/zkLVmY+90Q6kakgSTFnavlhEFOBMROqkGf2KO6r3jtuLECgYEA0cwo +3XN0EGIdjNh6S4NwsLQAL2o0bRRPpqwSwo7D2akwcqBX0RcBJlcVhngRxNnHwiwL +LSO8Gb/PyxlfepyJWH7VZXQ1lfP+puJFn427Pe4YWVPKrDLbDhxtxdy0gVU8Lc7O +Esox8HWr6SLS/HSXgxSxJcR+o0aMbNpDwXtWSCcCgYEA1aRaM6u3qQKFFK4Qc/0A +w2yHWgLnuIZ5Ix2byhcNJPWZS3daK4VwLFk09zxkrBKDnMmBp/XRlahBluhN1LGY +ooF2DADByBAdCeMOIePxrR2wYfirGc9e+ORCFbYHT8XdkorAVHUo/JRAnQWR/ocb +NAVNHH3NTEF7pfafHSh46FECgYEAiGdHAoR4J9bDA7oT+VjiQeEmZa2VnH4iM2mZ +YOnVqIT6POzHa+ibFMR1+FHEq8o0uKhOM/ER8WPmxFQg4eU431LHiAkAdhiHrxVa +0xwha2iMaDe0hDUke448SPLwYU57rATTsx/HTGIVfaTorL9Zax5e9wFEnP/XeUaH +2xpHxO0CgYAfVCYErWcV70Ou2prR/bw8DSwcc5DOGPduj8FnmkFWZHE2eXMS0ErU +rVSh+d1ol5yM9/cOh+ZtDBRiWTMxZI4uzjY81trj1IQHtxtr95eNn0tQ+0MGgdrE +nF4LMSGfYkoDruLA6M+D43pEMiGYl9E5iNG+aEbcjAa/TwaEV/do2Q== +-----END RSA PRIVATE KEY-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/prime256v1.pem b/demos/linux/tls_client/credentials/prime256v1/prime256v1.pem new file mode 100644 index 0000000..a76e47d --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/prime256v1.pem
@@ -0,0 +1,3 @@ +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_client.cer b/demos/linux/tls_client/credentials/prime256v1/tls_client.cer new file mode 100644 index 0000000..acdf437 --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_client.cer
@@ -0,0 +1,9 @@ +-----BEGIN CERTIFICATE----- +MIIBRDCB6wIJAJIkMNGGy2ukMAoGCCqGSM49BAMCMDYxGjAYBgNVBAsMEU5YUCBQ +bHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENBdkV4eHgwHhcNMTkwMjEz +MTUyMTU3WhcNMzEwMjEwMTUyMTU3WjAfMR0wGwYDVQQDDBROWFBfU0UwNTBfVExT +X0NMSUVOVDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABG3FgiEJoCRO78zTP7/x +VjoqVdlyIF5pO2guyYUajcPre/iv3Hxl/CJPkaY55k6xSAcgSM3JbxOL3S9qgcAG +hX0wCgYIKoZIzj0EAwIDSAAwRQIhAMZ2JggsOpcCdcG+rlhtwQQn8QTYOkKSyhE3 +vuTkgvktAiAyD6iYSsM5CAkQ0Xn/JLjCTJGItPTIUU1TVuBQmW/nIA== +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_client_key.pem b/demos/linux/tls_client/credentials/prime256v1/tls_client_key.pem new file mode 100644 index 0000000..d3ce1de --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_client_key.pem
@@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIN5tKBjZhZX2AeZvHWwJ6coWomAeusc0AiLQzJVJHPQEoAoGCCqGSM49 +AwEHoUQDQgAEbcWCIQmgJE7vzNM/v/FWOipV2XIgXmk7aC7JhRqNw+t7+K/cfGX8 +Ik+RpjnmTrFIByBIzclvE4vdL2qBwAaFfQ== +-----END EC PRIVATE KEY-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_client_key_pub.pem b/demos/linux/tls_client/credentials/prime256v1/tls_client_key_pub.pem new file mode 100644 index 0000000..46efd0b --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_client_key_pub.pem
@@ -0,0 +1,4 @@ +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbcWCIQmgJE7vzNM/v/FWOipV2XIg +Xmk7aC7JhRqNw+t7+K/cfGX8Ik+RpjnmTrFIByBIzclvE4vdL2qBwAaFfQ== +-----END PUBLIC KEY-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_rootca.cer b/demos/linux/tls_client/credentials/prime256v1/tls_rootca.cer new file mode 100644 index 0000000..a3cd62c --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_rootca.cer
@@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBszCCAVmgAwIBAgIJAL24Ed8Ph7abMAoGCCqGSM49BAMCMDYxGjAYBgNVBAsM +EU5YUCBQbHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENBdkV4eHgwHhcN +MTkwMjEzMTUxOTM1WhcNMzEwMjEwMTUxOTM1WjA2MRowGAYDVQQLDBFOWFAgUGx1 +ZyBUcnVzdCBDQTEYMBYGA1UEAwwPTlhQIFJvb3RDQXZFeHh4MFkwEwYHKoZIzj0C +AQYIKoZIzj0DAQcDQgAELUFa5efXelN8eL746pi0S3BiWuBfsxFJlsgOSCQ1T7D7 +Y8yLllEKShKrLbCSwCVwzXh4r6gyIIKSKI347T0aQqNQME4wHQYDVR0OBBYEFGXJ +l+PRWPn4RZn0CimIZ+PVGomFMB8GA1UdIwQYMBaAFGXJl+PRWPn4RZn0CimIZ+PV +GomFMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgBSMlLwokvBFB5qYW +467GX0FclavV8u0FaDcWK+ysvuECIQDnRKySKLaTVZbM26kAKbrLqxjdCQ4I762K +1jcrwWFKAg== +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_rootca_key.pem b/demos/linux/tls_client/credentials/prime256v1/tls_rootca_key.pem new file mode 100644 index 0000000..9a312b7 --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_rootca_key.pem
@@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIJN0o8/gfVjkKxDdrVjQ4D0SRpQqFxvkg1zINia8z9DeoAoGCCqGSM49 +AwEHoUQDQgAELUFa5efXelN8eL746pi0S3BiWuBfsxFJlsgOSCQ1T7D7Y8yLllEK +ShKrLbCSwCVwzXh4r6gyIIKSKI347T0aQg== +-----END EC PRIVATE KEY-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_server.cer b/demos/linux/tls_client/credentials/prime256v1/tls_server.cer new file mode 100644 index 0000000..256559a --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_server.cer
@@ -0,0 +1,9 @@ +-----BEGIN CERTIFICATE----- +MIIBRDCB6wIJAJIkMNGGy2ulMAoGCCqGSM49BAMCMDYxGjAYBgNVBAsMEU5YUCBQ +bHVnIFRydXN0IENBMRgwFgYDVQQDDA9OWFAgUm9vdENBdkV4eHgwHhcNMTkwMjEz +MTUyMTU3WhcNMzEwMjEwMTUyMTU3WjAfMR0wGwYDVQQDDBROWFBfU0UwNTBfVExT +X1NFUlZFUjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABOyjEeRhGy40xnXOWiZv ++GjI/iarCPAFUVUF+01eyVsWLn6Tq8TmF+Z9qhy7fsHkGxbiNO97XtSz5x3krT3A +lWQwCgYIKoZIzj0EAwIDSAAwRQIgLNXUY+7Y2q0TjwHGeRP8fUvEfvN6J9pM3+yn +tOyvi9YCIQDMSudCG/SjXy+cyMKmpX/x3mU3RQDvOwFsYbArAISVbg== +-----END CERTIFICATE-----
diff --git a/demos/linux/tls_client/credentials/prime256v1/tls_server_key.pem b/demos/linux/tls_client/credentials/prime256v1/tls_server_key.pem new file mode 100644 index 0000000..9e8950b --- /dev/null +++ b/demos/linux/tls_client/credentials/prime256v1/tls_server_key.pem
@@ -0,0 +1,5 @@ +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIEQ+qH6prHgAAcHCNx7yJ9FWij5zD+L2hDouK4/t/TVWoAoGCCqGSM49 +AwEHoUQDQgAE7KMR5GEbLjTGdc5aJm/4aMj+JqsI8AVRVQX7TV7JWxYufpOrxOYX +5n2qHLt+weQbFuI073te1LPnHeStPcCVZA== +-----END EC PRIVATE KEY-----
diff --git a/demos/linux/tls_client/scripts/createTlsCredentials_Optional.sh b/demos/linux/tls_client/scripts/createTlsCredentials_Optional.sh new file mode 100644 index 0000000..a6de9c6 --- /dev/null +++ b/demos/linux/tls_client/scripts/createTlsCredentials_Optional.sh
@@ -0,0 +1,193 @@ +#!/bin/bash +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# + +ORG_UNIT="NXP Plug Trust CA" + + +CERT_VALIDITY=4380 # 12 years + +# Create either EC or RSA based credential +if [ "$#" -eq 1 ]; then + if [ "$1" == "RSA" ]; then + CA_TYPE="RSA" + elif [ "$1" == "ECC" ]; then + CA_TYPE="ECC" + else + echo " first argument to script must be ECC or RSA" + echo "Exiting ..." + exit 21 + fi +else + echo "Usage createTlsCredentials_Optional [ECC|RSA]" + echo "Exiting ..." + exit 4 +fi + +################################################ +# Set Global variables according to ECC/RSA mode +################################################ +# Root CA Files +if [ "${CA_TYPE}" == "RSA" ]; then + ROOT_CA_CN="NXP RootCAvRxxx" + DEVICE_CN="NXP_SE050_TLS_CLIENT_RSA" + SERVER_CN="NXP_SE050_TLS_SERVER_RSA" + CA_RSA_BITS=4096 + CERT_RSA_BITS=2048 + KEY_DIR=../credentials/RSA +else + ROOT_CA_CN="NXP RootCAvExxx" + DEVICE_CN="NXP_SE050_TLS_CLIENT_ECC" + SERVER_CN="NXP_SE050_TLS_SERVER_ECC" + EC_KEY_TYPE=prime256v1 + KEY_DIR=../credentials/${EC_KEY_TYPE} +fi + +# Cd to directory where script is stored +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${SCRIPT_DIR} +cd ${SCRIPT_DIR} + +if [ ! -d ${KEY_DIR} ]; then + mkdir -p ${KEY_DIR} +fi + + +rootca_key="${KEY_DIR}/tls_rootca_key.pem" +rootca_cer="${KEY_DIR}/tls_rootca.cer" +rootca_srl="tls_rootca.srl" + +client_key="${KEY_DIR}/tls_client_key.pem" +client_key_pub="${KEY_DIR}/tls_client_key_pub.pem" # Contains public key only +client_csr="${KEY_DIR}/tls_client.csr" +client_cer="${KEY_DIR}/tls_client.cer" + +server_key="${KEY_DIR}/tls_server_key.pem" +server_csr="${KEY_DIR}/tls_server.csr" +server_cer="${KEY_DIR}/tls_server.cer" + + +echo "Create or Re-use RootCA" +echo "***********************" +if [ ! -e ${rootca_key} ]; then + if [ "${CA_TYPE}" == "RSA" ]; then + echo ">> Create RSA Root CA Key with ${CA_RSA_BITS} bits: (${rootca_key})" + openssl genrsa -out ${rootca_key} ${CA_RSA_BITS} + else + ecc_param_pem="${KEY_DIR}/${EC_KEY_TYPE}.pem" + if [ ! -e ${ecc_param_pem} ]; then + # echo "Creating ECC parameter file: ${ecc_param_pem} for ${EC_KEY_TYPE}" + openssl ecparam -name ${EC_KEY_TYPE} -out ${ecc_param_pem} + fi + echo ">> Create EC Root CA key (${rootca_key})" + openssl ecparam -in ${ecc_param_pem} -genkey -noout -out ${rootca_key} + # openssl ec -in ${rootca_key} -text -noout + fi + echo ">> Create RootCA certificate (${rootca_cer})" + openssl req -x509 -new -nodes -key ${rootca_key} \ + -subj "/OU=${ORG_UNIT}/CN=${ROOT_CA_CN}" \ + -days ${CERT_VALIDITY} -out ${rootca_cer} + # openssl x509 -in ${rootca_cer} -text -noout +else + if [ ! -e ${rootca_cer} ]; then + echo ">> Create RootCA (${rootca_cer}) certificate" + openssl req -x509 -new -nodes -key ${rootca_key} \ + -subj "/OU=${ORG_UNIT}/CN=${ROOT_CA_CN}" \ + -days ${CERT_VALIDITY} -out ${rootca_cer} + # openssl x509 -in ${rootca_cer} -text -noout + else + echo ">> RootCA key (${rootca_key}) already exists" + echo ">> RootCA certificate (${rootca_cer}) already exist" + fi +fi + + +echo "Prepare Client Side TLS credentials" +echo "***********************************" +# Conditionally create client key +if [ ! -e ${client_key} ]; then + echo ">> Create client key (${client_key})" + if [ "${CA_TYPE}" == "RSA" ]; then + openssl genrsa -out ${client_key} ${CERT_RSA_BITS} + else + openssl ecparam -in ${ecc_param_pem} -genkey -noout -out ${client_key} + fi + # openssl ec -in ${client_key} -text -noout +else + echo ">> Client key (${client_key}) already exists" +fi + +# Create a client key pem file containing ONLY the public key +echo ">> Extract public key from client keypair: ${client_key_pub}" +if [ "${CA_TYPE}" == "RSA" ]; then + openssl rsa -in ${client_key} -pubout -out ${client_key_pub} +else + openssl ec -in ${client_key} -pubout -out ${client_key_pub} +fi + +# echo ">> Create Client CSR" +openssl req -new -key ${client_key} -subj "/CN=${DEVICE_CN}" -out ${client_csr} +# openssl req -in ${client_csr} -text -noout + +# Always create a CA signed client certificate +if [ -e ${rootca_key} ] && [ -e ${rootca_cer} ]; then + # echo "CA cert and key present" + if [ -e ${rootca_srl} ]; then + # echo ">> ${rootca_srl} already exists, use it" + x509_serial="-CAserial ${rootca_srl}" + else + # echo ">> no ${rootca_srl} found, create it" + x509_serial="-CAcreateserial" + fi + echo ">> Create Client Certificate (${client_cer})" + openssl x509 -req -sha256 -days ${CERT_VALIDITY} -in ${client_csr} ${x509_serial} -CA ${rootca_cer} -CAkey ${rootca_key} -out ${client_cer} + openssl x509 -in ${client_cer} -text -noout +else + echo "Did not find CA cert and/or CA key pair: Fatal error" + exit -1 +fi + +echo "Prepare Server Side TLS credentials" +echo "***********************************" +# Conditionally create server key +if [ ! -e ${server_key} ]; then + echo ">> Create server key (${server_key})" + if [ "${CA_TYPE}" == "RSA" ]; then + openssl genrsa -out ${server_key} ${CERT_RSA_BITS} + else + openssl ecparam -in ${ecc_param_pem} -genkey -noout -out ${server_key} + fi + # openssl ec -in ${server_key} -text -noout +else + echo ">> Server key (${server_key}) already exists" +fi + +# echo ">> Create Server CSR" +openssl req -new -key ${server_key} -subj "/CN=${SERVER_CN}" -out ${server_csr} +# openssl req -in ${server_csr} -text -noout + +# Always create a CA signed server certificate +if [ -e ${rootca_key} ] && [ -e ${rootca_cer} ]; then + # echo "CA cert and key present" + if [ -e ${rootca_srl} ]; then + # echo ">> ${rootca_srl} already exists, use it" + x509_serial="-CAserial ${rootca_srl}" + else + # echo ">> no ${rootca_srl} found, create it" + x509_serial="-CAcreateserial" + fi + echo ">> Create Server Certificate (${server_cer})" + openssl x509 -req -sha256 -days ${CERT_VALIDITY} -in ${server_csr} ${x509_serial} -CA ${rootca_cer} -CAkey ${rootca_key} -out ${server_cer} + openssl x509 -in ${server_cer} -text -noout +else + echo "Did not find CA cert and/or CA key pair: Fatal error" + exit -1 +fi + +echo ">> Server and Client credentials available for use" +echo ">> ***********************************************"
diff --git a/demos/linux/tls_client/scripts/provisionTlsClient.py b/demos/linux/tls_client/scripts/provisionTlsClient.py new file mode 100644 index 0000000..5f32bd4 --- /dev/null +++ b/demos/linux/tls_client/scripts/provisionTlsClient.py
@@ -0,0 +1,367 @@ +# +# Copyright 2018-2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +""" + +Provision attached secure element with ECC/RSA keys + +Preconditions: + - Secure element attached + - Virtual environment should be activated (not for iMX platform. + Refer ssscli installation steps: Plug & Trust MW, Section 8.3 :ref:`cli-doc-pre-steps`) + +Postconditions: + - Key pair injected on id referred by KEYPAIR_INDEX_CLIENT_PRIVATE variable + - Ref pem created + - Client certificate injected on id referred by CERTIFICATE_INDEX variable. + +""" + +import os +import sys +import logging +import traceback +import argparse +logging.basicConfig(format='%(message)s', level=logging.DEBUG) +log = logging.getLogger(__name__) + +# GLOBAL VARIABLES +# ---------------- +SE050_PROVISIONING_SCRIPT = "0.9" +EC_KEYPAIR_INDEX_CLIENT_PRIVATE = 0x7DCCBB10 +EC_CERTIFICATE_INDEX = 0x7DCCBB11 +RSA_KEYPAIR_INDEX_CLIENT_PRIVATE = 0x7DCCBB30 +RSA_CERTIFICATE_INDEX = 0x7DCCBB31 + +example_text = ''' +Example invocation:: + + python %s --key_type ecc + python %s --key_type ecc --connection_data 169.254.0.1:8050 + python %s --key_type rsa --connection_data 127.0.0.1:8050 --connection_type jrcpv2 + python %s --key_type rsa --connection_data COM3 + python %s --key_type ecc --subsystem a71ch + +''' % (__file__, __file__, __file__, __file__, __file__,) + +SUPPORTED_CONNECTION_TYPES = [ + "t1oi2c", + "sci2c", + "vcom", + "jrcpv1", + "jrcpv2", + "pcsc" +] + + +def session_open(subsystem, connection_data, connection_type, auth_type, scpkey): + ''' Open session based on IOT Secure Element selected. ''' + import sss.const as const + import sss.connect as connect + import sss.session as session + + log.info("###############################################################") + log.info("#") + log.info("# SUBSYSTEM : %s" % subsystem) + log.info("# CONNECTION_TYPE : %s" % connection_type) + log.info("# CONNECTION_PARAMETER : %s" % connection_data) + log.info("#") + log.info("###############################################################") + + connect.do_open_session(const.SUBSYSTEM_TYPE[subsystem], + const.CONNECTION_TYPE[connection_type], connection_data, + auth_type=const.AUTH_TYPE_MAP[auth_type][0], + scpkey=scpkey) + session_obj = session.Session() + try: + session_obj.session_open() + except Exception as exc: + error_log_file = os.path.abspath(os.path.dirname(__file__)) + os.sep + "error_log.txt" + if not os.path.isfile(error_log_file): + err_write = open(error_log_file, 'w+') + else: + err_write = open(error_log_file, 'a+') + traceback.print_exc(None, err_write) + err_write.close() + return None + return session_obj + + +def session_close(session): + ''' Close opened session. ''' + import sss.connect as connect + import sss.util as util + + if session: + session.session_close() + + if os.path.isfile(util.get_session_pkl_path()): + connect.do_close_session() + + +def reset(session): + ''' Reset the Secure Module to the initial state. ''' + from sss.se05x import Se05x + from sss.a71ch import A71CH + import sss.sss_api as apis + if session.subsystem == apis.kType_SSS_SE_SE05x: + se05x_obj = Se05x(session) + se05x_obj.debug_reset() + elif session.subsystem == apis.kType_SSS_SE_A71CH: + a71ch_obj = A71CH(session) + a71ch_obj.debug_reset() + + +def refpem_ecc(session, keyid, file_name): + ''' Creates reference PEM file for ECC Pair. + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + filename = File name to store reference key. Can be in PEM or DER or PKCS12 format based on file extension. + By default filename with extension .pem in PEM format, .pfx or .p12 in PKCS12 format and others in DER format. + ''' + from sss.refkey import RefPem + import sss.sss_api as apis + refpem_obj = RefPem(session) + status = refpem_obj.do_ecc_refpem_pair(keyid, file_name) + if status != apis.kStatus_SSS_Success: + log.error("Refpem creation failed..!") + session_close(session) + return status + log.info("Successfully Created reference key.") + return status + + +def refpem_rsa(session, keyid, file_name): + ''' Creates reference PEM file for RSA Pair. + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + filename = File name to store reference key. Can be in PEM or DER or PKCS12 format based on file extension. + By default filename with extension .pem in PEM format, .pfx or .p12 in PKCS12 format and others in DER format. + ''' + from sss.refkey import RefPem + import sss.sss_api as apis + refpem_obj = RefPem(session) + status = refpem_obj.do_rsa_refpem_pair(keyid, file_name) + if status != apis.kStatus_SSS_Success: + log.error("Refpem creation failed..!") + session_close(session) + return status + log.info("Successfully Created reference key.") + return status + + +def set_ecc_pair(session, keyid, client_key): + ''' Set ECC Key pair to the Secure Module \n + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + key = Can be raw key (DER format) or in file. + For file, by default filename with extension .pem considered as PEM format and others as DER format.\n + ''' + import sss.setkey as setkey + import sss.sss_api as apis + log.info("client_key file: %s" % (client_key,)) + log.info("Injecting ECC key pair at key ID: 0x%x" % (keyid,)) + set_obj = setkey.Set(session) + status = set_obj.do_set_ecc_key_pair(keyid, client_key, None) + if status != apis.kStatus_SSS_Success: + log.error("Injecting key pair failed..!") + session_close(session) + return status + log.info("Successfully Injected ECC key pair.") + return status + + +def set_rsa_pair(session, keyid, client_key): + ''' Set RSA Key pair to the Secure Module \n + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + key = Can be raw key (DER format) or in file. + For file, by default filename with extension .pem considered as PEM format and others as DER format.\n + ''' + import sss.setkey as setkey + import sss.sss_api as apis + log.info("client_key file: %s" % (client_key,)) + log.info("Injecting RSA key pair at key ID: 0x%x" % (keyid,)) + set_obj = setkey.Set(session) + status = set_obj.do_set_rsa_key_pair(keyid, client_key, None) + if status != apis.kStatus_SSS_Success: + log.error("Injecting key pair failed..!") + session_close(session) + return status + log.info("Successfully Injected RSA key pair.") + return status + + +def set_cert(session, keyid, cert): + ''' Inject Certificate to the Secure Module + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + key = Can be raw certificate (DER format) or in file. + For file, by default filename with extension .pem and .cer considered as PEM format and others as DER format.\n + ''' + import sss.setkey as setkey + import sss.sss_api as apis + log.info("certificate file: %s" % (cert,)) + log.info("Injecting Certificate at key ID: 0x%x" % (keyid,)) + set_obj = setkey.Set(session) + status = set_obj.do_set_cert(keyid, cert, None) + if status != apis.kStatus_SSS_Success: + log.error("Injecting certificate failed..!") + session_close(session) + return status + log.info("Successfully Injected Certificate.") + return status + + +def parse_in_args(): + + parser = argparse.ArgumentParser(description=__doc__, + epilog=example_text, + formatter_class=argparse.RawTextHelpFormatter) + required = parser.add_argument_group('required arguments') + optional = parser.add_argument_group('optional arguments') + required.add_argument('--key_type', default="", + help='Supported key types => ``ecc``, ``rsa``', + required=True) + optional.add_argument('--connection_data', default="none", + help='Parameter to connect to SE => eg. ``COM3``, ``127.0.0.1:8050``, ``none``. ' + 'Default: ``none``') + optional.add_argument('--connection_type', default="t1oi2c", + help='Supported connection types => ``%s``. Default: ``t1oi2c``' % + ("``, ``".join(SUPPORTED_CONNECTION_TYPES))) + optional.add_argument('--subsystem', default="se05x", + help='Supported subsystem => ``se05x``, ``a71ch``. Default: ``se05x``') + optional.add_argument('--auth_type', default="None", + help='Supported subsystem => ``None``, ``PlatformSCP``, ``UserID``, ``ECKey``, ``AESKey``. Default: ``None``') + optional.add_argument('--scpkey', default="None", + help='') + optional.add_argument('--no_reset', action="store_true", help="do not reset contents of attached secure element") + + if len(sys.argv) == 1: + parser.print_help(sys.stderr) + return None + + args = parser.parse_args() + + if args.key_type not in ["ecc", "rsa", ]: + parser.print_help(sys.stderr) + return None + + if args.subsystem not in ["se05x", "a71ch", ]: + parser.print_help(sys.stderr) + return None + + if args.connection_data.find(':') >= 0: + port_data = args.connection_data.split(':') + jrcp_host_name = port_data[0] + jrcp_port = port_data[1] + os.environ['JRCP_HOSTNAME'] = jrcp_host_name + os.environ['JRCP_PORT'] = jrcp_port + log.info("JRCP_HOSTNAME: %s" % jrcp_host_name) + log.info("JRCP_PORT: %s" % jrcp_port) + if args.connection_type == "t1oi2c": + args.connection_type = "jrcpv1" + elif args.connection_data.find('COM') >= 0: + if args.connection_type == "t1oi2c": + args.connection_type = "vcom" + elif args.connection_data.find('none') >= 0: + if args.subsystem == "a71ch": + args.connection_type = "sci2c" + else: + parser.print_help(sys.stderr) + return None + + if args.connection_type not in SUPPORTED_CONNECTION_TYPES: + parser.print_help(sys.stderr) + return None + + return args + + +def main(): + cur_dir = os.path.abspath(os.path.dirname(__file__)) + py_sss_dir = os.path.join(cur_dir, '..', '..', '..', '..', 'pycli', 'src') + sys.path.append(py_sss_dir) + import sss.sss_api as apis + + # check for input arguments + args = parse_in_args() + if args is None: + return + + # -------------------------------------------------------------- + # Start of program - Ensure an SE is connected to your system. + # -------------------------------------------------------------- + log.info("SE050 Key provisioning script (Rev.%s)." % SE050_PROVISIONING_SCRIPT) + log.info("Executing this script will insert keys in the attached SE050 secure element.") + + if args.key_type == "ecc": + key_type = "prime256v1" + else: + key_type = "RSA" + keys_dir = os.path.join(cur_dir, '..', 'credentials', key_type) + os.sep + + # ECC keys to be stored in SE + # ------------------------------ + client_key = keys_dir + "tls_client_key.pem" + client_key_ref = keys_dir + "tls_client_key_ref.pem" + client_key_pub = keys_dir + "tls_client_key_pub.pem" # Contains public key only + + # Client certificate + client_cer = keys_dir + "tls_client.cer" + + # close old session + session_close(None) + + # Open a new session + session = session_open(args.subsystem, args.connection_data, args.connection_type, args.auth_type, args.scpkey) + if session is None: + return + + # NOTE: In case of A71CH always issue reset + # When SE050 is lacking storage / has conflicting storage issue a reset of the Secure Element + if not args.no_reset: + reset(session) + + if key_type == "prime256v1": + # Inject ecc pair key to the Secure Element + status = set_ecc_pair(session, EC_KEYPAIR_INDEX_CLIENT_PRIVATE, client_key) + if status != apis.kStatus_SSS_Success: + return + + # Generate Reference key from the key injected. Store it in file referred by "client_key_ref" variable. + status = refpem_ecc(session, EC_KEYPAIR_INDEX_CLIENT_PRIVATE, client_key_ref) + if status != apis.kStatus_SSS_Success: + return + + key_id_cert = EC_CERTIFICATE_INDEX + + else: + # Inject rsa key pair into the Secure Element + status = set_rsa_pair(session, RSA_KEYPAIR_INDEX_CLIENT_PRIVATE, client_key) + if status != apis.kStatus_SSS_Success: + return + + # Generate Reference key from the key injected. Store it in file referred by "client_key_ref" variable. + status = refpem_rsa(session, RSA_KEYPAIR_INDEX_CLIENT_PRIVATE, client_key_ref) + if status != apis.kStatus_SSS_Success: + return + + key_id_cert = RSA_CERTIFICATE_INDEX + + # Inject certificate to the Secure Element + status = set_cert(session, key_id_cert, client_cer) + if status != apis.kStatus_SSS_Success: + return + + session_close(session) + log.info("##############################################################") + log.info("# #") + log.info("# Program Completed Successfully #") + log.info("# #") + log.info("##############################################################") + + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG) + main() + +
diff --git a/demos/linux/tls_client/scripts/test_tls_client.py b/demos/linux/tls_client/scripts/test_tls_client.py new file mode 100644 index 0000000..a135a27 --- /dev/null +++ b/demos/linux/tls_client/scripts/test_tls_client.py
@@ -0,0 +1,64 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +import subprocess +import sys +import logging +import time +log = logging.getLogger(__name__) + + +def do_tls_client_test(ip_address, cipher): + log.info("Starting tlsServer with cipher: %s" % cipher) + server_cmd = "./tlsServer.sh %s" % (cipher,) + tls_server = subprocess.Popen(server_cmd, shell=True,) + log.info("Waiting for 2 seconds to initialize server") + time.sleep(2) + log.info("Starting tlsSeClient with ip_address: %s, cipher: %s" % (ip_address, cipher)) + tls_se_client = subprocess.Popen("./tlsSeClient.sh %s %s" % (ip_address, cipher), + shell=True,) + log.info("Waiting for 10 seconds to waiting for the client to complete") + time.sleep(10) + subprocess.Popen("pkill -9 openssl", shell=True,) + + +def do_tls_extended_client_test(ip_address, cipher): + log.info("Starting tlsServer with cipher: %s" % cipher) + server_cmd = "./tlsServer.sh %s" % cipher + tls_server = subprocess.Popen(server_cmd, shell=True,) + log.info("Waiting for 2 seconds to initialize server") + time.sleep(2) + if cipher in ["ECDHE", "ECDH", "both", "max"]: + key_type = "EC" + else: + key_type = "RSA" + log.info("Starting tlsExtendedSeClient with ip_address: %s" % (ip_address,)) + tls_se_ext_client = subprocess.Popen("./tlsExtendedSeClient.sh %s %s" % (ip_address, key_type,), shell=True,) + log.info("Waiting for 10 seconds to waiting for the client to complete") + time.sleep(10) + subprocess.Popen("pkill -9 openssl", shell=True,) + + +def usage(): + log.info("Please provide as first argument: CONNECTION_PARAMETER. Default: \"None\"") + log.info("Please provide as second argument: cipher type. [ECDHE|ECDH|both|max|RSA]") + log.info("Usage Example:") + log.info(" python %s 127.0.0.1 ECDHE" % (__file__,)) + log.info(" python %s 127.0.0.1 RSA" % (__file__,)) + + +if __name__ == '__main__': + logging.basicConfig(format='%(message)s', level=logging.DEBUG) + if len(sys.argv) > 2: + ip_address = sys.argv[1] + cipher = sys.argv[2] + do_tls_client_test(ip_address, cipher) + log.info("Waiting for 10 seconds to tls_client test to complete") + time.sleep(10) + do_tls_extended_client_test(ip_address, cipher) + else: + usage() +
diff --git a/demos/linux/tls_client/scripts/tlsExtendedSeClient.sh b/demos/linux/tls_client/scripts/tlsExtendedSeClient.sh new file mode 100644 index 0000000..90cebc4 --- /dev/null +++ b/demos/linux/tls_client/scripts/tlsExtendedSeClient.sh
@@ -0,0 +1,143 @@ +#!/bin/bash +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# +# SE050 Extended TLS Client Example +# +# Preconditions +# - SE050 attached (further details to be worked out) +# - ../build/tlsSe050Client available +# - s_server up and running +# +# Postconditions (to be updated) +# - +# + +# History +# +# 2019-09-11: Environment variable REQ_SE can be set to overrule default se050 (choose either se050 or a71ch) +# + +# GLOBAL VARIABLES +# ---------------- +SE050_TLS_EXTENDED_SE_SCRIPT="0.9" +IOT_SE=se050 + +# UTILITY FUNCTIONS +# ----------------- +# execCommand will stop script execution when the program executed did not return OK (i.e. 0) to the shell +execCommand () { + local command="$*" + echo ">> ${command}" + ${command} + local nRetProc="$?" + if [ ${nRetProc} -ne 0 ] + then + echo "\"${command}\" failed to run successfully, returned ${nRetProc}" + exit 2 + fi + echo "" +} + +OPENSSL="openssl" +CLIENT_APP="../build/tlsSe050Client" +# Check whether an ip_address:port of the socket server was passed as argument +if [ -z "$3" ]; then + ip_addr_port_server="" +else + ip_addr_port_server="$3" + export JRCP_SERVER_SOCKET=${ip_addr_port_server} + export JRCP_HOSTNAME=${ip_addr_port_server%:*} # Back delete + export JRCP_PORT=${ip_addr_port_server#*:} # Front delete + export EX_SSS_BOOT_SSS_PORT=${ip_addr_port_server} +fi + +echo ${JRCP_HOSTNAME} +echo ${JRCP_PORT} + +# Cd to directory where script is stored +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${SCRIPT_DIR} +cd ${SCRIPT_DIR} + +# The Secure Element used by the OpenSSL engine can be overruled by setting +# environment variable REQ_SE. +# By default se050 is assumed +if [[ -z "${REQ_SE}" ]]; then + IOT_SE="se050" +else + IOT_SE="${REQ_SE}" +fi + +# Catch IOT_SE values we don't know about +case ${IOT_SE} in + se050 | a71ch) + echo "IOT_SE=${IOT_SE}" + ;; + *) + echo "Unknown/unsupported secure element: ${IOT_SE}" + exit 3 + ;; +esac + + +# Select config file based on OpenSSL version and Secure Element +openssl_version="$(openssl version | grep -o "OpenSSL [0-9].[0-9]")" +if [ "${openssl_version}" == "OpenSSL 1.0" ]; then + echo "Using config file prepared for ${openssl_version}" + OPENSSL_CONF_SE=../../common/openssl_sss_${IOT_SE}.cnf +elif [ "${openssl_version}" == "OpenSSL 1.1" ]; then + echo "Using config file prepared for OpenSSL 1.1.1c" + OPENSSL_CONF_SE=../../common/openssl11_sss_${IOT_SE}.cnf +else + echo "Don't recognise OpenSSL version ${openssl_version}. Using config file prepared for OpenSSL 1.1.1" + OPENSSL_CONF_SE=../../common/openssl11_sss_${IOT_SE}.cnf +fi + +# Halt execution if config file does not exist +if [ ! -f ${OPENSSL_CONF_SE} ]; then + echo "Cannot open ${OPENSSL_CONF_SE}: fatal error" + exit -1 +fi + +EC_KEY_TYPE=prime256v1 + +if [ $# -lt 2 ]; then + echo "Usage: tlsExtendedSeClient.sh <ip-address> <EC|RSA>" + echo "Provide the ip address of the server you want to connect to as first argument!" + echo "Additional argument selects between EC or RSA prepared credentials" + echo " Eg. tlsExtendedSeClient.sh 192.168.1.42 EC" + echo " Eg. tlsExtendedSeClient.sh 192.168.1.60 RSA" + exit 1 +elif [ "${2}" == "EC" ]; then + KEY_TYPE=${EC_KEY_TYPE} + KEY_CLASS=${2} +elif [ "${2}" == "RSA" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA256" + KEY_TYPE=RSA + KEY_CLASS=${2} +else + echo "Usage: tlsExtendedSeClient.sh <ip-address> <EC|RSA>" + exit 4 +fi + + +KEY_DIR=../credentials/${KEY_TYPE} +rootca_cer="${KEY_DIR}/tls_rootca.cer" +client_cer="${KEY_DIR}/tls_client.cer" +client_key="${KEY_DIR}/tls_client_key_ref.pem" + +echo "Connecting to ${1}:8080" + +# ./tlsSe050Client <ipAddress:port> <EC|RSA> <caCert.pem> <clientKey.pem|clientKeyRef.pem> [<clientCert.pem>] + +echo "Configure to use embSeEngine" +export OPENSSL_CONF=${OPENSSL_CONF_SE} +echo "OPENSSL_CONF=${OPENSSL_CONF}" +# Client certificate filename is passed as argument +# execCommand "${CLIENT_APP} ${1}:8080 ${KEY_CLASS} ${rootca_cer} ${client_key} ${client_cer}" +# Retrieve client certificate from SE +execCommand "${CLIENT_APP} ${1}:8080 ${KEY_CLASS} ${rootca_cer} ${client_key}" +
diff --git a/demos/linux/tls_client/scripts/tlsSeClient.sh b/demos/linux/tls_client/scripts/tlsSeClient.sh new file mode 100644 index 0000000..fafb3be --- /dev/null +++ b/demos/linux/tls_client/scripts/tlsSeClient.sh
@@ -0,0 +1,150 @@ +#!/bin/bash +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# + +# History +# +# 2019-09-11: Environment variable REQ_SE can be set to overrule default se050 (choose either se050 or a71ch) +# 2019-09-10: Environment variable REQ_TLS can be set to overrule default tls1_2 (choose either tls1_2 or tls1_3) +# 2019-09-05: Removed ECDH cipher request as this is no longer supported by OpenSSL 1.1.1 +# 2019-09-04: Added RSA capability +# + +OPENSSL="openssl" +# Check whether an ip_address:port of the socket server was passed as argument +if [ -z "$3" ]; then + ip_addr_port_server="" +else + ip_addr_port_server="$3" + # export JRCP_SERVER_SOCKET=${ip_addr_port_server} + export JRCP_HOSTNAME=${ip_addr_port_server%:*} # Back delete + export JRCP_PORT=${ip_addr_port_server#*:} # Front delete + export EX_SSS_BOOT_SSS_PORT=${ip_addr_port_server} +fi + +echo ${JRCP_HOSTNAME} +echo ${JRCP_PORT} + +# Cd to directory where script is stored +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${SCRIPT_DIR} +cd ${SCRIPT_DIR} + +# The Secure Element used by the OpenSSL engine can be overruled by setting +# environment variable REQ_SE. +# By default se050 is assumed +if [[ -z "${REQ_SE}" ]]; then + IOT_SE="se050" +else + IOT_SE="${REQ_SE}" +fi + +# Catch IOT_SE values we don't know about +case ${IOT_SE} in + se050 | a71ch) + echo "IOT_SE=${IOT_SE}" + ;; + *) + echo "Unknown/unsupported secure element: ${IOT_SE}" + exit 3 + ;; +esac + + +# Select config file based on OpenSSL version and Secure Element +openssl_version="$(openssl version | grep -o "OpenSSL [0-9].[0-9]")" +if [ "${openssl_version}" == "OpenSSL 1.0" ]; then + echo "Using config file prepared for ${openssl_version}" + OPENSSL_CONF_SE=../../common/openssl_sss_${IOT_SE}.cnf +elif [ "${openssl_version}" == "OpenSSL 1.1" ]; then + echo "Using config file prepared for OpenSSL 1.1.1c" + OPENSSL_CONF_SE=../../common/openssl11_sss_${IOT_SE}.cnf +else + echo "Don't recognise OpenSSL version ${openssl_version}. Using config file prepared for OpenSSL 1.1.1" + OPENSSL_CONF_SE=../../common/openssl11_sss_${IOT_SE}.cnf +fi + +# Halt execution if config file does not exist +if [ ! -f ${OPENSSL_CONF_SE} ]; then + echo "Cannot open ${OPENSSL_CONF_SE}: fatal error" + exit -1 +fi + +# The TLS version requested by the client can be overruled by setting +# environment variable REQ_TLS +if [[ -z "${REQ_TLS}" ]]; then + TLS_OPTION="tls1_2" +else + TLS_OPTION="${REQ_TLS}" +fi + +# Check whether available openssl supports TLS 1.3 +openssl_version_x_x_x="$(openssl version | grep -o "OpenSSL [0-9].[0-9].[0-9]")" +if [ "${openssl_version_x_x_x}" != "OpenSSL 1.1.1" ]; then + if [[ ${TLS_OPTION} == "tls1_3" ]]; then + echo "TLS_OPTION: ${TLS_OPTION} is not support for this version of OpenSSL (${openssl_version_x_x_x})" + exit 6 + fi +fi + + +EC_KEY_TYPE=prime256v1 + +if [ $# -lt 2 ]; then + echo "Usage: tlsSeClient.sh <ip-address> <ECDHE|ECDHE_256|RSA>" + echo "Provide the ip address of the server you want to connect to as first argument!" + echo "Additional argument enforces ciphersuite and/or server key type pair" + echo " Eg. tlsSeClient.sh 192.168.1.42 ECDHE" + echo " Eg. tlsSeClient.sh 192.168.1.60 RSA" + exit 1 +elif [ "${2}" == "ECDHE" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA" + KEY_TYPE=${EC_KEY_TYPE} +elif [ "${2}" == "ECDHE_256" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA256" + KEY_TYPE=${EC_KEY_TYPE} +elif [ "${2}" == "RSA" ]; then + sel_cipher="" + KEY_TYPE=RSA +else + echo "Usage: tlsSeClient.sh <ip-address> <ECDHE|ECDHE_256|RSA>" + exit 4 +fi + +if [ "${KEY_TYPE}" == "${EC_KEY_TYPE}" ]; then + echo "Client key pair = EC ${KEY_TYPE}" + echo "Request ${sel_cipher}" +elif [ "${KEY_TYPE}" == "RSA" ]; then + echo "Client key pair = ${KEY_TYPE}" +else + echo "Inspect value of KEY_TYPE: ${KEY_TYPE}" + exit 6 +fi + +KEY_DIR=../credentials/${KEY_TYPE} +rootca_cer="${KEY_DIR}/tls_rootca.cer" +client_cer="${KEY_DIR}/tls_client.cer" +client_key="${KEY_DIR}/tls_client_key_ref.pem" + +echo "Connecting to ${1}:8080... using client key pair of type ${KEY_TYPE}" +if [ "${KEY_TYPE}" == "${EC_KEY_TYPE}" ]; then + echo "requesting cipher ${sel_cipher}" +fi + +echo " Requesting TLS of type ${TLS_OPTION}" + +echo "Configure to use SSS based OpenSSL Engine" +export OPENSSL_CONF=${OPENSSL_CONF_SE} +echo " OPENSSL_CONF=${OPENSSL_CONF}" + +cmd="${OPENSSL} s_client -connect ${1}:8080 -${TLS_OPTION} \ + -CAfile ${rootca_cer} \ + -cert ${client_cer} -key ${client_key} \ + ${sel_cipher} -state -msg" +echo "${cmd}" +echo "****************************************************" + +sleep 2 +${cmd}
diff --git a/demos/linux/tls_client/scripts/tlsServer.sh b/demos/linux/tls_client/scripts/tlsServer.sh new file mode 100644 index 0000000..ab0dae2 --- /dev/null +++ b/demos/linux/tls_client/scripts/tlsServer.sh
@@ -0,0 +1,86 @@ +#!/bin/bash +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# + +# History +# +# 2019-09-05: Removed ECDH cipher request as this is no longer supported by OpenSSL 1.1.1 +# 2019-09-04: Added RSA capability +# + +# Cd to directory where script is stored +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +echo ${SCRIPT_DIR} +cd ${SCRIPT_DIR} + +EC_KEY_TYPE=prime256v1 + +if [ $# -ne 1 ]; then + # Provide one and only one argument + echo 'Usage: tlsServer.sh [ECDHE|ECDHE_SHA256|max|RSA]' + exit 5 +elif [ "${1}" == "ECDHE" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA" + KEY_TYPE=${EC_KEY_TYPE} +elif [ "${1}" == "ECDHE_SHA256" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA256" + KEY_TYPE=${EC_KEY_TYPE} +elif [ "${1}" == "max" ]; then + sel_cipher="-cipher ECDHE-ECDSA-AES128-SHA,ECDHE-ECDSA-AES128-SHA256" + KEY_TYPE=${EC_KEY_TYPE} +elif [ "${1}" == "RSA" ]; then + sel_cipher="" + KEY_TYPE=RSA +else + echo 'Usage: tlsServer.sh [ECDHE|ECDHE_SHA256|max|RSA]' + exit 5 +fi + +if [ "${KEY_TYPE}" == "${EC_KEY_TYPE}" ]; then + echo "Server key pair = EC ${KEY_TYPE}" + echo "Only support ${sel_cipher}" + named_curve="-named_curve ${EC_KEY_TYPE}" +elif [ "${KEY_TYPE}" == "RSA" ]; then + echo "Server key pair = ${KEY_TYPE}" + echo "Do not restrict ciphers" + named_curve="" +else + echo "Inspect value of KEY_TYPE: ${KEY_TYPE}" + exit 6 +fi + +KEY_DIR=../credentials/${KEY_TYPE} + +rootca_key="${KEY_DIR}/tls_rootca_key.pem" +rootca_cer="${KEY_DIR}/tls_rootca.cer" + +client_key="${KEY_DIR}/tls_client_key.pem" +client_key_pub="${KEY_DIR}/tls_client_key_pub.pem" # Contains public key only +client_csr="${KEY_DIR}/tls_client.csr" +client_cer="${KEY_DIR}/tls_client.cer" + +server_key="${KEY_DIR}/tls_server_key.pem" +server_csr="${KEY_DIR}/tls_server.csr" +server_cer="${KEY_DIR}/tls_server.cer" + + +echo "Ensure OPENSSL_CONF is not set to use OpenSSL engine" +echo " OPENSSL_CONF=${OPENSSL_CONF}" +echo "****************************************************" + +# +# Invoke openssl s_server with additional parameters for more info +# -msg : show all protocol messages with hex dump +# -debug : print extensive debugging information including a hex dump of all traffic +# + +cmd="openssl s_server -accept 8080 -no_ssl3 ${named_curve} \ + -CAfile ${rootca_cer} \ + -cert ${server_cer} -key ${server_key} \ + ${sel_cipher} -Verify 2 -state -msg" +echo "${cmd}" +${cmd} + +exit 0
diff --git a/demos/linux/tls_client/src/tlsSe050Client.cpp b/demos/linux/tls_client/src/tlsSe050Client.cpp new file mode 100644 index 0000000..a2c5eca --- /dev/null +++ b/demos/linux/tls_client/src/tlsSe050Client.cpp
@@ -0,0 +1,571 @@ +/** + * @file tlsSe050Client.cpp + * @author NXP Semiconductors + * @version 1.0 + * @par License + * + * Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + * + * @par Description: + * Simple TLS client + * - Fetch client certificate from provisioned SE + * - Load OpenSSL engine + * - Establish TLS connection (use client key pair provisioned in SE) and send message#1 + * - Close TLS connection + * - Close comm. link of OpenSSL engine with SE + * - Fetch client certificate from provisioned SE + * - Re-open comm. link of OpenSSL engine with SE + * - Establish TLS connection (use client key pair provisioned in SE) and send message#2 + * - Close TLS connection + * + * Precondition: + * - SE (SE050 or A71CH) has been provisioned with appropriate credentials + * - Server side has been setup and has been provisioned with appropriate credentials + * + */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <netdb.h> +#include <fcntl.h> +#include <openssl/ssl.h> +#include <openssl/engine.h> + +#define SSS_USE_FTR_FILE +#define FTR_FILE_SYSTEM + +#include "snw_common.h" + +/* App version */ +const int v_major = 0; +const int v_minor = 9; +const int v_patch = 2; + +int certVerifyCb(int preverifyOk, X509_STORE_CTX *pX509CTX) +{ + char szData[256]; + X509 *cert = X509_STORE_CTX_get_current_cert(pX509CTX); + int depth = X509_STORE_CTX_get_error_depth(pX509CTX); + + if (!preverifyOk) { + int err = X509_STORE_CTX_get_error(pX509CTX); + printf("Error with certificate at depth: %i\n", depth); + X509_NAME_oneline(X509_get_issuer_name(cert), szData, 256); + printf(" issuer = %s\n", szData); + X509_NAME_oneline(X509_get_subject_name(cert), szData, 256); + printf(" subject = %s\n", szData); + printf(" err %i:%s\n", err, X509_verify_cert_error_string(err)); + } + else { + printf("Certificate at depth: %i\n", depth); + X509_NAME_oneline(X509_get_issuer_name(cert), szData, 256); + printf(" issuer = %s\n", szData); + X509_NAME_oneline(X509_get_subject_name(cert), szData, 256); + printf(" subject = %s\n", szData); + } + return preverifyOk; +} + +#define MAX_DER_CERT_SIZE 1024 +#define MAX_DATA_OBJECT_SIZE 1024 + +int main(int argc, char **argv) +{ + int nStatus = 0; + ENGINE *e; + const SSL_METHOD *method; + SSL_CTX *pSSLContext; + SSL *pSSLHandle; + char pDestinationURL[256]; + int nDestinationPort = 8080; + int nRet = SE_TLS_CLIENT_OK; + int sockfd; + char fileRootCA[256]; + char keyType[256]; + char fileClientKey[256]; + X509 *certRcv; + char clientMessage[256]; + int clientMessageLen; + char engineId[256]; + U8 clientCerDer[MAX_DER_CERT_SIZE]; + size_t clientCerDerLen = MAX_DER_CERT_SIZE; + char clientCertFile[256]; // Optional filename of client certificate + int certId = 0; + U8 dataObject[MAX_DATA_OBJECT_SIZE]; + U16 dataObjectLen = MAX_DATA_OBJECT_SIZE; + int objectIndex = 0; + U16 dataOffset; + U16 dataLen; + U8 clientCerDer_2[MAX_DER_CERT_SIZE]; + size_t clientCerDer_2Len = MAX_DER_CERT_SIZE; + ex_sss_boot_ctx_t gdirectSeSessionCtx; + + printf("%s (Rev.%d.%d.%d)\n", argv[0], v_major, v_minor, v_patch); + + // Evaluate command line arguments + if (argc < 5 || argc > 7) { + printf("Usage: %s <ipAddress:port> <EC|RSA> <caCert.pem> <clientKey.pem|clientKeyRef.pem> [<clientCert.pem>]\n", argv[0]); + nRet = SE_TLS_CLIENT_CMDLINE_ARGS; + goto leaving; + } + + memset(&gdirectSeSessionCtx, 0, sizeof(ex_sss_boot_ctx_t)); + + // Deal with first argument: <address|name>:<port> + // *********************************************** + { + unsigned int i; + int fColonFound = 0; + int nSuccess; + + if (strlen(argv[1]) >= sizeof(pDestinationURL)) { + // A bit too cautious (as port number may also be attached) + nRet = SE_TLS_CLIENT_BUFFER_TOO_SMALL; + goto leaving; + } + + for (i = 0; i < strlen(argv[1]); i++) { + if (argv[1][i] == ':') { + strncpy(pDestinationURL, argv[1], i); + pDestinationURL[i] = 0; + fColonFound = 1; + // printf("servername/address: %s\n", pDestinationURL); + break; + } + else { + // Simply copy the full argument + strcpy(pDestinationURL, argv[1]); + } + } + + if ((fColonFound == 1) && (i != 0)) { + nSuccess = sscanf(&argv[1][i], ":%5u[0-9]", (unsigned int *)&nDestinationPort); + if (nSuccess != 1) { + nRet = SE_TLS_CLIENT_ILLEGAL_PORT_NR; + goto leaving; + } + } + else { + // Choose default value for port + nDestinationPort = 8080; + } + } + printf("\t servername:port = %s:%d\n", pDestinationURL, nDestinationPort); + + // Deal with second argument: key type (either EC or RSA for now) + // *************************************************************** + if (strlen(argv[2]) >= sizeof(keyType)) { + nRet = SE_TLS_CLIENT_BUFFER_TOO_SMALL; + goto leaving; + } + strcpy(keyType, argv[2]); + if ( (strcmp(keyType, "RSA") != 0) && (strcmp(keyType, "EC") != 0) ) { + printf("\t keyType: %s is not defined, choose from EC or RSA.\n", keyType); + nRet = SE_TLS_CLIENT_CMDLINE_ARGS; + goto leaving; + } + printf("\t keyType: %s\n", keyType); + + // Deal with third argument: root CA certificate + // ********************************************** + if (strlen(argv[3]) >= sizeof(fileRootCA)) { + nRet = SE_TLS_CLIENT_BUFFER_TOO_SMALL; + goto leaving; + } + strcpy(fileRootCA, argv[3]); + printf("\t rootCA: %s\n", fileRootCA); + + // Deal with fourth argument: key or reference key + // ********************************************** + if (strlen(argv[4]) >= sizeof(fileClientKey)) { + nRet = SE_TLS_CLIENT_BUFFER_TOO_SMALL; + goto leaving; + } + strcpy(fileClientKey, argv[4]); + printf("\t clientKey: %s\n", fileClientKey); + + // Deal with optional fifth argument + // ********************************** + if (argc == 6) { + if (strlen(argv[5]) >= sizeof(clientCertFile)) { + nRet = SE_TLS_CLIENT_BUFFER_TOO_SMALL; + goto leaving; + } + strcpy(clientCertFile, argv[5]); + printf("\t clientCertFile: %s\n", clientCertFile); + } + else { + clientCertFile[0] = 0; + } + + strcpy(clientMessage, "Hello to Server from TLS client using credentials stored in Secure Element.\n"); + clientMessageLen = strlen(clientMessage); + + nRet = wrapConnectToSe(&gdirectSeSessionCtx); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Failed to connect to Secure Element.\n"); + goto leaving; + } + + // Ensure the matching TLS Client certificate has been provisioned before running the demo + if ( strcmp(keyType, "RSA") == 0) { + certId = OBJID_DEMO_RSA_TLS_CLIENT_CERT; + } + else if (strcmp(keyType, "EC") == 0) { + certId = OBJID_DEMO_EC_TLS_CLIENT_CERT; + } + else { + printf("Don't know about keyType %s (leaving)\n", keyType); + goto leaving; + } +// This initial certificate fetch fails on A71CH! +#if 1 + nRet = seGetClientCertificate(&(gdirectSeSessionCtx.ks), certId, clientCerDer, &clientCerDerLen); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Failed to retrieve client certificate.\n"); + goto leaving; + } +#endif + + wrapDisconnectFromSe(&gdirectSeSessionCtx); + + SSL_load_error_strings(); + OpenSSL_add_all_algorithms(); + + if (SSL_library_init() < 0) { + nRet = SE_TLS_CLIENT_SSL_LIB_INIT_ERROR; + goto leaving; + } + +#if (OPENSSL_VERSION_NUMBER < 0x10101000L) + method = TLSv1_2_method(); +#else + method = TLS_method(); +#endif + + if ((pSSLContext = SSL_CTX_new(method)) == NULL) { + printf("SSL_CTX_new failed - Unable to create SSL Context\n"); + nRet = SE_TLS_CLIENT_SSL_INIT_ERROR; + goto leaving; + } + +#if SSS_HAVE_A71CH + strcpy(engineId, "e4sss_a71ch"); +#elif SSS_HAVE_SE05X + strcpy(engineId, "e4sss"); +#endif + + if (!(e = ENGINE_by_id(engineId))) + { + fprintf(stderr, "Error finding OpenSSL Engine by id (id = %s)\n", engineId); + nRet = SE_ERR_SE_LOADING_ENGINE_ERR; + goto leaving; + } + else + { + unsigned int logLevel = 0x05; + fprintf(stderr, "Setting log level OpenSSL-engine %s to 0x%02X.\n", engineId, logLevel); + // Illustrates setting log level of e4sss engine. + // 0x04 : Error message + // 0x02 : Debug messages + // 0x01 : Flow messages + // (0x07 corresponds to all, which is the default) + ENGINE_ctrl(e, ENGINE_CMD_BASE, logLevel, NULL, NULL); + } + + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd == -1) { + nRet = SE_TLS_CLIENT_TCP_SETUP_ERROR; + goto leaving; + } + + if (!SSL_CTX_load_verify_locations(pSSLContext, fileRootCA, NULL)) { + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + + if (clientCertFile[0] != 0) { + if (!SSL_CTX_use_certificate_file(pSSLContext, clientCertFile, SSL_FILETYPE_PEM)) { + printf("Client Certificate (%s) Loading error.\n", clientCertFile); + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + } + else if (!SSL_CTX_use_certificate_ASN1(pSSLContext, clientCerDerLen, clientCerDer)) { + printf("Client Certificate Loading error.\n"); + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + + if (SSL_CTX_use_PrivateKey_file(pSSLContext, fileClientKey, SSL_FILETYPE_PEM) != 1){ + printf("Client Private Key Loading error.\n"); + nRet = SE_TLS_CLIENT_SSL_KEY_ERROR; + goto leaving; + } + + SSL_CTX_set_verify(pSSLContext, SSL_VERIFY_PEER, certVerifyCb); + // SSL_CTX_set_verify(pSSLContext, SSL_VERIFY_PEER, NULL); + + pSSLHandle = SSL_new(pSSLContext); + + nRet = snwTcpConnect(sockfd, pDestinationURL, nDestinationPort); + if (nRet != SE_TLS_CLIENT_OK) { + printf("TCP Connection error.\n"); + goto leaving; + } + + SSL_set_fd(pSSLHandle, sockfd); + + nRet = snwSetSocketNonBlocking(sockfd); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to set the socket to Non-Blocking.\n"); + goto leaving; + } + + nRet = snwSslConnect(pSSLHandle, sockfd, 2000); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to establish ssl session.\n"); + goto leaving; + } + + if (X509_V_OK != SSL_get_verify_result(pSSLHandle)) { + printf("Server Certificate Verification failed"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + goto leaving; + } + + // Ensure a valid certificate was returned, otherwise no certificate exchange happened! + if (NULL == (certRcv = SSL_get_peer_certificate(pSSLHandle)) ) { + printf(" No certificate exchange happened"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + goto leaving; + } + else { + X509_NAME *subj; + char szData[256]; + + if ((subj = X509_get_subject_name(certRcv)) && + (X509_NAME_get_text_by_NID(subj, NID_commonName, szData, 256) > 0)) { + printf("Peer Certificate CN: %s\n", szData); + } + X509_free(certRcv); + } + + nRet = snwSslWrite(pSSLHandle, sockfd, (unsigned char *)clientMessage, &clientMessageLen, 2000); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to send message to server: nRet = %d.\n", nRet); + goto leaving; + } + + nRet = SSL_shutdown(pSSLHandle); + if (nRet == 0) { + sleep(1); + printf("SSL_shutdown: Repeat shutdown.\n"); + nRet = SSL_shutdown(pSSLHandle); + } + + if (nRet == 1) { + printf("SSL_shutdown: successful.\n"); + nRet = SE_TLS_CLIENT_OK; + } + else if (nRet == 0) { + printf("SSL_shutdown: not yet finished (second attempt).\n"); + } + else { + int errorCode; + errorCode = SSL_get_error(pSSLHandle, nRet); + printf("SSL_shutdown: error on shutdown (nRet=%d, SSL_error_code=%d)\n", + nRet, errorCode); + // if (errorCode == SSL_ERROR_ZERO_RETURN ) + } + + nRet = SSL_clear(pSSLHandle); + if (nRet == 0) { + int errorCode; + printf("SSL_clear failed.\n"); + errorCode = SSL_get_error(pSSLHandle, nRet); + printf("errorCode: %d\n", errorCode); + } + else if (nRet == 1) { + printf("SSL_clear successful.\n"); + nRet = SE_TLS_CLIENT_OK; + } + + // NOTE: Close engine connection to SE via Engine control interface + fprintf(stderr, "Close connection to secure element through Engine control interface (Engine=%s).\n", engineId); + ENGINE_ctrl(e, ENGINE_CMD_BASE+2, 0, NULL, NULL); + + // To demonstrate one can alternate OpenSSL engine access and direct access + // to the SE, another direct call to the SE + printf("Re-establish connection to SE ...\n"); + + nRet = wrapConnectToSe(&gdirectSeSessionCtx); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Failed to connect to Secure Element.\n"); + goto leaving; + } + + printf("Successfully established connection to SE\n"); + { + nRet = seGetClientCertificate(&(gdirectSeSessionCtx.ks), certId, clientCerDer_2, &clientCerDer_2Len); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Failed to retrieve client certificate.\n"); + goto leaving; + } + snwPrintDataAsHex(clientCerDer_2, clientCerDer_2Len); + } + + wrapDisconnectFromSe(&gdirectSeSessionCtx); + + // NOTE: Open engine connection to SE via Engine control interface + fprintf(stderr, "Open connection to secure element through Engine control interface (Engine=%s).\n", engineId); + ENGINE_ctrl(e, ENGINE_CMD_BASE+1, 0, NULL, NULL); + + if ((pSSLContext = SSL_CTX_new(method)) == NULL) { + printf("SSL_CTX_new failed - Unable to create SSL Context\n"); + nRet = SE_TLS_CLIENT_SSL_INIT_ERROR; + goto leaving; + } + + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd == -1) { + nRet = SE_TLS_CLIENT_TCP_SETUP_ERROR; + goto leaving; + } + + if (!SSL_CTX_load_verify_locations(pSSLContext, fileRootCA, NULL)) { + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + + if (clientCertFile[0] != 0) { + if (!SSL_CTX_use_certificate_file(pSSLContext, clientCertFile, SSL_FILETYPE_PEM)) { + printf("Client Certificate (%s) Loading error.\n", clientCertFile); + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + } + + else if (!SSL_CTX_use_certificate_ASN1(pSSLContext, clientCerDer_2Len, clientCerDer_2)) { + printf("Client Certificate Loading error.\n"); + nRet = SE_TLS_CLIENT_SSL_CERT_ERROR; + goto leaving; + } + + if (SSL_CTX_use_PrivateKey_file(pSSLContext, fileClientKey, SSL_FILETYPE_PEM) != 1){ + printf("Client Private Key Loading error.\n"); + nRet = SE_TLS_CLIENT_SSL_KEY_ERROR; + goto leaving; + } + + SSL_CTX_set_verify(pSSLContext, SSL_VERIFY_PEER, certVerifyCb); + // SSL_CTX_set_verify(pSSLContext, SSL_VERIFY_PEER, NULL); + + pSSLHandle = SSL_new(pSSLContext); + + nRet = snwTcpConnect(sockfd, pDestinationURL, nDestinationPort); + if (nRet != SE_TLS_CLIENT_OK) { + printf("TCP Connection error.\n"); + goto leaving; + } + + SSL_set_fd(pSSLHandle, sockfd); + + nRet = snwSetSocketNonBlocking(sockfd); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to set the socket to Non-Blocking.\n"); + goto leaving; + } + + nRet = snwSslConnect(pSSLHandle, sockfd, 2000); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to establish ssl session.\n"); + goto leaving; + } + + if (X509_V_OK != SSL_get_verify_result(pSSLHandle)) { + printf("Server Certificate Verification failed"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + goto leaving; + } + + // Ensure a valid certificate was returned, otherwise no certificate exchange happened! + if (NULL == (certRcv = SSL_get_peer_certificate(pSSLHandle)) ) { + printf(" No certificate exchange happened"); + nRet = SE_TLS_CLIENT_SSL_CONNECT_ERROR; + goto leaving; + } + else { + X509_NAME *subj; + char szData[256]; + + if ((subj = X509_get_subject_name(certRcv)) && + (X509_NAME_get_text_by_NID(subj, NID_commonName, szData, 256) > 0)) { + printf("Peer Certificate CN: %s\n", szData); + } + X509_free(certRcv); + } + + strcpy(clientMessage, "Another message from TLS client using credentials stored in Secure Element.\n"); + clientMessageLen = strlen(clientMessage); + + nRet = snwSslWrite(pSSLHandle, sockfd, (unsigned char *)clientMessage, &clientMessageLen, 2000); + if (nRet != SE_TLS_CLIENT_OK) { + printf("Unable to send message to server: nRet = %d.\n", nRet); + goto leaving; + } + + nRet = SSL_shutdown(pSSLHandle); + if (nRet == 0) { + sleep(1); + printf("SSL_shutdown: Repeat shutdown.\n"); + nRet = SSL_shutdown(pSSLHandle); + } + + if (nRet == 1) { + printf("SSL_shutdown: successful.\n"); + nRet = SE_TLS_CLIENT_OK; + } + else if (nRet == 0) { + printf("SSL_shutdown: not yet finished (second attempt).\n"); + } + else { + int errorCode; + errorCode = SSL_get_error(pSSLHandle, nRet); + printf("SSL_shutdown: error on shutdown (nRet=%d, SSL_error_code=%d)\n", + nRet, errorCode); + // if (errorCode == SSL_ERROR_ZERO_RETURN ) + } + + nRet = SSL_clear(pSSLHandle); + if (nRet == 0) { + int errorCode; + printf("SSL_clear failed.\n"); + errorCode = SSL_get_error(pSSLHandle, nRet); + printf("errorCode: %d\n", errorCode); + } + else if (nRet == 1) { + printf("SSL_clear successful.\n"); + nRet = SE_TLS_CLIENT_OK; + } + + printf("\n\t servername:port = %s:%d\n", pDestinationURL, nDestinationPort); + printf("\t rootCA: %s\n", fileRootCA); + // printf("\t Retrieved client certificate from SE (stored at index 0)\n"); + printf("\t clientKey: %s\n\n", fileClientKey); + +leaving: + printf("\n******** TLS Client Example (Credentials in Secure Element) = %s ********\n", + (nRet == SE_TLS_CLIENT_OK) ? "Pass" : "Fail"); + nStatus = (nRet == SE_TLS_CLIENT_OK) ? OK_STATUS : FAILURE_STATUS; + + return nStatus; +}
diff --git a/demos/linux/tls_client/tls_client_demo.rst b/demos/linux/tls_client/tls_client_demo.rst new file mode 100644 index 0000000..7f6cd51 --- /dev/null +++ b/demos/linux/tls_client/tls_client_demo.rst
@@ -0,0 +1,200 @@ +.. + Copyright 2019,2020 NXP + + +.. _tls-client-example: + +======================================================== + OpenSSL Engine: TLS Client example for iMX/Rpi3 +======================================================== + +- DocRevision : 0.94 +- Date : 2020-01-14 + +This section explains how to set-up a TLS link using the SE050 OpenSSL Engine on the client side. +A note at the bottom of this page (:numref:`tls-client-using-a71ch`) highlights the changes in case one uses an A71CH secure element. + + +Summary +======================================================== + +The TLS demo demonstrates setting up a mutually authenticated and encrypted +link between a client and a server system. The keypair used to identify the +client is stored in the Secure Element. The keypair used to identify the +server is simply available as a pem file. + +The public keys associated with the respective key pairs are contained in +respectively a client and a server certificate. + +The CA is a self-signed certificate. The same CA is used to sign client and +server certificate. + +One can choose the keymaterial (CA, Client and Server) to be either RSA (4096 CA - 2048 client/server) +or EC (prime256v1). + +The TLS demo comes in two flavours: + +1. **Flavour-A:** The standard OpenSSL tools `s_server` and `s_client` are + used to set-up and demonstrate the TLS link. The certificates used are + simply stored on the file system of the host. The client uses the keypair + stored inside the SE050. + +2. **Flavour-B:** A TLS client program - included in source code + (tlsSe050Client.cpp) - retrieves the client certificate from the SE050 and + uses the keypair stored inside the SE050. It establishes a TLS connection + with the server process `s_server`. + +Steps in :numref:`credential-prep` to :numref:`startup-the-server` are +identical for the two demo flavours. + +.. _credential-prep: + +Credential preparation (execute once) [Optional] +======================================================== + +:: + + > cd demos/linux/tls_client + > ./scripts/createTlsCredentials_Optional.sh <ECC|RSA> + +.. note:: + + The Host SW package comes bundled with the required credentials. The + `createTlsCredentials_Optional.sh` script will re-create equivalent + credentials (but with new/different keypairs) + +The script creates all demo required client and server credentials on the +client platform. One must transfer the server credentials to the server +platform. + +Secure Element preparation (client side) +======================================================== + +For the purpose of the demo one MUST inject the TLS client key pair and +certificate into the Secure Element and create a reference pem file referring +to the provisioned key pair:: + + > cd demos/linux/tls_client/scripts + > python3 provisionTlsClient.py --key_type <ecc|rsa> + +Further details on using these scripts can be found in the following: + +provisionTlsClient.py +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. include:: scripts/doc/provisionTlsClient.rst.txt + + +Server side preparation +======================================================== + +.. note:: + + The Host SW package comes bundled with the required server credentials. + +Ensure the default server credentials or those created under (:numref:`credential-prep`) are available +on the server platform. + +.. _startup-the-server: + +Start up the server +======================================================== + +.. note:: + + The server can run e.g. on a PC. The server must be reacheable over the + TCP/IP network for the Client. Choose either a server using EC based credentials or + a server using RSA based credentials. + +Execute the following command on the server platform to use the EC based server credentials, make a note on the IP +address of the server:: + + > cd demos/linux/tls_client/scripts + > ./tlsServer.sh <ECDHE|ECDHE_SHA256|max> + +Execute the following command on the server platform to use the RSA based server credentials, make a note on the IP +address of the server:: + + > cd demos/linux/tls_client/scripts + > ./tlsServer.sh RSA + +Establish a TLS link from the client to the server +======================================================== + +The client process establishing the TLS connection comes in two flavours: +either `s_client` or a program provided in source code (tlsSe050Client.cpp). +Invoke either example through a bash shell script. + +Using s_client +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Invoke the script using the IP address of the server as the first argument and +ECDHE or ECDHE_SHA256 as the second argument (ECDHE corresponding to ECDH ephemeral) when +connecting to a server using EC based credentials:: + + > ./tlsSeClient.sh <server-IP-address> <ECDHE|ECDHE_256> + +Invoke the script using the IP address of the server as the first argument and +RSA as the second argument when connecting to a server using RSA based credentials:: + + > ./tlsSeClient.sh <server-IP-address> RSA + +In case OpenSSL 1.1.1 is available on *both* Client (i.MX or Raspberry Pi) and Server side, +it's possible to request the usage of the TLS1.3 protocol (by default TLS1.2 is used). This is +achieved by setting the environment variable REQ_TLS to tls1_3:: + + > REQ_TLS=tls1_3 ./tlsSeClient.sh <server-IP-address> ECDHE + +Using tlsSe050Client.cpp +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First compile the client program. Ensure all required SE050 specific libraries +and header files have been installed on the linux system. By default this example +links to static libraries:: + + > cd demos/linux/tls_client/build + > cmake ../. + > cmake --build . + +Invoke the script using the IP address of the server as argument:: + + > ./tlsExtendedSeClient.sh <server-IP-address> <EC|RSA> + +.. note:: + + The environment variable REQ_TLS is not applicable to this example. + In case OpenSSL 1.1.1 is available on the client, the actual TLS protocol version used will + be negotiated to the highest version supported by both client and server. + Otherwise TLS1.2 will be used. + + +.. _tls-client-using-a71ch: + +TLS client example using A71CH +======================================================== + +Introduction +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The TLS client example can also be used in combination with an +A71CH secure element (in EC mode only). +The following steps are different:: + +- secure element preparation +- client program invocation + +Secure Element preparation (client side) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Specify an additional option ``--subsystem a71ch``:: + + > python3 provisionTlsClient.py --key_type ecc --subsystem a71ch + +Invocation of client program +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Set the environment variable ``REQ_SE`` to ``a71ch`` when invoking the client program:: + + > REQ_SE=a71ch ./tlsSeClient.sh 192.168.1.190 ECDHE + > ... or ... + > REQ_SE=a71ch ./tlsExtendedSeClient.sh 192.168.1.190 EC
diff --git a/demos/opc_ua/CMakeLists.txt b/demos/opc_ua/CMakeLists.txt new file mode 100644 index 0000000..914a69e --- /dev/null +++ b/demos/opc_ua/CMakeLists.txt
@@ -0,0 +1,8 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +ADD_SUBDIRECTORY(opc_ua_server) +ADD_SUBDIRECTORY(opc_ua_client)
diff --git a/demos/opc_ua/credentials/client.conf b/demos/opc_ua/credentials/client.conf new file mode 100644 index 0000000..9f781da --- /dev/null +++ b/demos/opc_ua/credentials/client.conf
@@ -0,0 +1,9 @@ +[req] +distinguished_name = req_distinguished_name +x509_extensions = v3_req +prompt = no +[req_distinguished_name] +C = AB +[v3_req] +keyUsage = keyEncipherment, dataEncipherment +subjectAltName = URI:URN:"urn:open62541:localhost"
diff --git a/demos/opc_ua/credentials/extensions.cnf b/demos/opc_ua/credentials/extensions.cnf new file mode 100644 index 0000000..683bef1 --- /dev/null +++ b/demos/opc_ua/credentials/extensions.cnf
@@ -0,0 +1,7 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# +basicConstraints=CA:TRUE +subjectAltName=URI:"urn:open62541:localhost",DNS:"localhost"
diff --git a/demos/opc_ua/credentials/open62541_client_cert.der b/demos/opc_ua/credentials/open62541_client_cert.der new file mode 100644 index 0000000..31ecc2b --- /dev/null +++ b/demos/opc_ua/credentials/open62541_client_cert.der Binary files differ
diff --git a/demos/opc_ua/credentials/open62541_client_key_pair.pem b/demos/opc_ua/credentials/open62541_client_key_pair.pem new file mode 100644 index 0000000..066fd68 --- /dev/null +++ b/demos/opc_ua/credentials/open62541_client_key_pair.pem
@@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAwjgmDZIIWjFiwD6g/cfzmEnPxR+VuSUnozqSaELIhTo4VYkx +5Ci4kBstsy/nbmIAnKUV91PwUdBKVkZIsNZfJNQ3oHfU3qz8tRxivmN301De1hdj +gLNTYiBV2wekd1z90a6As/aI4PGSFbdo2+fBMRnPwVtZO1HDcx/sWMmY3q5Q9O58 +FM+plTwNahU8xjb8hBtRxdCYxPBymj/tODApkF8hF8lBi+qP1i1HHEHFK6CrqjoA +cHfdsJVb/uoFJ5OB+BlqiAud79UB3NNFAiVIQJ/HUdwU9+B/RYlRyosvQixDGLAs +W6cBiYtktlIi8OL5bteoyNG/5OyX/IAqbUFaTQIDAQABAoIBAGcToa6GGIS1vTFG +i+7klfX3BpwZ/T5756OLzHQlLYL3uTo8TAxJSFrC8egtvmgo/yYjv5q6I8tn/mv3 +dVDVFT3Ym4VA0+syaBQ+8nEVHV07iGiblSWTBugHPUm3rqPi6JrGQGxCpbasvtlj +s/Ux9Kh4iHiYYK1I4bBR+v/MTqOvdsZE5wJbMaSJQII07GonTn96Z2u7S1g3ezUf +TM75znKIKzcgADkLSDkir8Oo2ruBNLH69nEM2GYUiEkJAZ0Mp0mG+7B4BLIa/NQE +cTaqf6nWL7/ss7l3Z+73mLiC9LwgBfq6F5n9DqGUplhR8EgWDRVVLfzkkvoRHwtC +kdw31skCgYEA8PWDI0SCDgBk6e/n5XITSiLPR1W/9OyrqbaHxoXJZkQjXyCXrAVM +KshUoupnTuka0o749AMxaCPBi3rQKSwTrE07RiBafOoll4wNXfoL0r3yNe5UZTqH +HHFEjHrw109uuxc7z7bfRhAq+OjeTUAHuK5N6RmXBmwmb78TyqaiN28CgYEAzle+ +RX3PMK9UjCgwgFxev+q7wssTOQ2MySZpwGdeJBxFMfosRl4J4zBbytFyIvhRh+LV +eERyTNd/FP9yf/r7cCuBjrvGs0gigZDt5y92qk8/HDMzOWb6IrwDWzEa22CfGo4X +YuYxMsq2G7ebBAAm69IctMLzTYI5RrF+0ziWjAMCgYAZONm9O1KRvKDTi/UuIz65 +p+MiiGtLa+qcHSshMKfgOImrT3IQ440RfV6+nuKpc+UG3UhZ4muthvCfdP+ND7wP +cRYfRQuzv56nulU73QyXxqIv2v6iifnSlFiki8nh/8KLeucb2vyMDO0ymM2MMIOe +ZUBqge85EOEFGW8s6zxXqQKBgA80Pevm6kZfFO7C41gB9mVTyYP/7Kmuiuojb3Vi +6HfmsV6OXYbN1RKtdIYMSsmy3GcT2sDi4j0xP8bvT6OIfdB1FDXNNkXtkcVURYNc +ZvUDo9XTG/ol0VaP3ftxMdZqVy7gu25pIcTpVOPT8pMn47ZKpBzZpI3Yg5nm6D5u +FAG7AoGBAICMlE/gtMHXrNLcxYqa1IiJlUkGUMQXckRmE1r7n8L5sKKo9jNCg0mt +R9NlKMeBE1bw8pYH3KBgwJ2Y/eyytqp5/hV2BwslsCIHHH6OGe0nKvElRSAGCMrS +N9neeBS8br2j5PsM4OSczakCPg5CM40elJV6cGatandhZs30lQAG +-----END RSA PRIVATE KEY-----
diff --git a/demos/opc_ua/credentials/open62541_rootCA_cert.der b/demos/opc_ua/credentials/open62541_rootCA_cert.der new file mode 100644 index 0000000..906ef0f --- /dev/null +++ b/demos/opc_ua/credentials/open62541_rootCA_cert.der Binary files differ
diff --git a/demos/opc_ua/credentials/open62541_rootCA_key_pair.pem b/demos/opc_ua/credentials/open62541_rootCA_key_pair.pem new file mode 100644 index 0000000..4834f6d --- /dev/null +++ b/demos/opc_ua/credentials/open62541_rootCA_key_pair.pem
@@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpQIBAAKCAQEAvlbADaRx2ADkHV7ef0NgrEzZ+T7/6hmYY8qH9604mbXi8wV4 +q8ZqRNStgUS9ziIqevKAXwTaiv6CAYMNxOa5be02Xn78lbXRqZFv3tJ4fTNo2Y0a ++deLRV+cnM8TmPZSIYgChcUwoUWPwlcG6hNV45UCLt/nl5909Da0aYHfdmi1GugO +yBGCmJ9Q5X39AAWDQv1s6ESfjUUeU9C5MbOjj9gcja2lNAybg9ohoh2nG6lTnBdy +5gKaKOUrDdwx8LJWaHxnJ5k8RnyuzeFmkpEg7Euh0XxRO4XsTeq5//qyJiPDDoj0 +KBYJPh0Dvjcn3io0S7wo7tSmQF6nRnaBiPbaiwIDAQABAoIBAQCeJoqRS0/kgGkK +FmedKqjKwVhkBvqw0u+SCxiKrP1Yio62CpfHcqed5XD89dcXzb+qRJBxYyELWIlB +JFluf58XPYBtZ+oLovVAhb2EUTEYJn06NkpxyazIybbhfBX2hMSdY9tktwG/HoNi +oNj36XT2EjusIxLVIwMUX9fryqOYR90r3M+TbLCc436glBQYs2eg5A2WdbfxnY6l +tLQmeXXm6r5k7gYABfqNPSgS7kH+1Xtf/VR3YhQ8+aXcV1I7t/qXckhaPYFlc+B4 +35Ur8q7Uhmoq5JznuDE4hPzOz1GfSECq0qJUDaz0P6Ch+91xCjnYpYuTKCTCNwu/ +fFsN/2whAoGBAOLcMvgEq388J1TB98cg5PGk/7LbszOsR5P8dJhqfIU9RY0bDqBI +wZKO2w8b6AqJUgQ8fYiK6/1gY5VN9RAb+/PAyCGLis+C4Rm71SabqpxXxZllkz6K ++mArQi/TVb3wu0poaGrfm4zilW7e86B8mS7OqMsMpkdln6mnpzLnZAaZAoGBANbJ +oN3vElAAnadA1nT+8CA9wjw9/ZD3FqTGYwe0rPBEhbEQHoynA0N2bn6RMwWGnmHO +AFMYdcuG8/Yr7mXEmuaOG04A5elXgINX6FxOOx4IFT9akZWWtiLQvk89q+tK09Gv +VdofOt+jXvCpFaqd/1rUkXFhgDNFw/SSnUY23PTDAoGBAIkuequ7tzDTYT1BpeGG +JKtzCSRQ8kZW8VmtmZvpGK9BY+N17xxBorxLInA6gdCNRUlGguqkhxvKw60vXPeG +1I6Ljvmp9iCRlikHilc0XrD36odeAvIY/FpXDkj5VKns/nR6OloWKWvCQHaw30W2 +0rKZSTyvw4T9ENV4igSgI75RAoGBALkKA3ivWctqfGd2yEsKxrw/+HIFxcl51Rwn +fXFKCiMEJVkhVfA+geVAxnhrhtUf4JrJ6iWsUO8CWHKf7kXmVryBeKx+wZOBOsns +ldXP38ZDmGp4ECwbJtZfl1SVAOM4F7vxnbjIZuP7zvLt+CiA7VjHAHX5VYTWebbe +CHhRE5IZAoGAN3YFJ4JSgdPJXK4zcIMyJj/CNxkZ+w11yfnyvrLUknz31wgHin5t +xB743LLpI8b12oEuPomqyKXU8BptQ9UV86ZFGzXzC+JmLMyXgutkazPlOtR+Y5jS +44tn2CuqRbmzfhJd90To/Oxo4YudYssbbOgrCAYJvf8XX9C77pWZm8k= +-----END RSA PRIVATE KEY-----
diff --git a/demos/opc_ua/credentials/open62541_server_cert.der b/demos/opc_ua/credentials/open62541_server_cert.der new file mode 100644 index 0000000..db4dc04 --- /dev/null +++ b/demos/opc_ua/credentials/open62541_server_cert.der Binary files differ
diff --git a/demos/opc_ua/credentials/open62541_server_key_pair.pem b/demos/opc_ua/credentials/open62541_server_key_pair.pem new file mode 100644 index 0000000..675305e --- /dev/null +++ b/demos/opc_ua/credentials/open62541_server_key_pair.pem
@@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAx0OhN7fa3qVMoa1bHQDefftX3ZAzYveLr+LeW2PPnNUSWRJU +FrrHuXwk4BmtkYJRba1B5vVEmWh6nW8veqG1jJJawtMbBjthEsvFvc9zyIgzrDt4 +IRvNpd5MXMynTedMdoMmhZnRv+8kgW8aaDoztOWO+uijT4Mk6MZ3NE5C231iZ2L3 +EHaH0l/vnfPCfEd5aJuT75i9hCYOOB2lYXovjXgGHpMKckA67RtlSdgsJiN7pA/E +7wK/ZClKyBQS83SsEi69K7kvqcsYwNIeXFMCjH9zxFxWX+CmGqrymzwoGZhAq763 +QO4oLK2xW6n0oWFj5dvVFX2xkVj+vC12HtekoQIDAQABAoIBAQDFuP/SD+doIdHG +ZAQS5XfgvnRTb/DtdQDwyEcnnAS4dFy+cYdq/m+MR/k3PYOS7SLrl43bJOiq6Jcy +fM85+hfxoo/Y3izkpCsQwY43aBBVnYDYmDH9eF85BTn0o0Yn8SlYN48T5qvQrfUl +Uh976LTB/T9BDXJvRYxsRfKmvjltHF7fmY8j4zwTfm1GG8KehSaEn+p6bQwbiUyE +jG4KUtwTsEOtwddaRuSYzbvREUxxJMdhgIQBqX+Xnm/btdUkE1n6gH3Y6VagUdNl +hcIcWWG2xeUaZSvouZsdYZUsDnI9iXYIqyRNn9+ZApAp5dblKcMwXGURA2DTrk2w +yIMAf0Z5AoGBAOseySBUdadcALgwnjfvm9i/NjohZNsIC1CYJgTl/OL/MmXN/OSv +20Yz2uwAOaZOkqrpCcWljvqQCm+or2+NGKG5GJCRst9HR2musqXSC+PB5Lum/OFD +cc/jcTU78p1gTur2Q0iZG3kWuzWGb5kRBm+Bb2s9+8WDdqPU4eDvsqvLAoGBANj1 +sYjUkxF0evmGciRaZHr/LHZCGW+slyuDUg6idWyXCp5QnK2OsIMxJyKVcUbmt4rA +bMbt4UQAXkkEdbZLzQ2rzTIBTUMUjyYD4CfCgMKoV2MnJoI+fqWgMoaPTtbl3b98 +bXwdqWxPEz1nXzegUdoMOoHFZa5k81EOv1w9lTvDAoGAEFotxs/Y9vDRI/5NorpJ +boOt89EKwKkIkGxkiIauVeNF0ArJgeYxK+rDWRKS79wbG0Pl6BchoI+QCkADI5D+ +m5DSAov/ksPUVadOyXWYWhjMHbj5cXlNWxYIc5ldwFBIbNL/zvbHEF7iWlClRlIG +zo6D/0NqVUxVXgOaShihpo0CgYEAlEYNh9rni7VUWfXVShzwsNJ1m3h/E8AbLCS6 +TsAeihELs7iZ608qOO69tTf2y6Lf6xapAKcQHb42saY3oFdbky1HthYHrIF/d1aM +uf+GqgIMfvoBql91hFHgVe/YzKsaCkTKOlm3MQs1tfBQtZ5+cguLbKbwX+gkFdCD +XVHFDKsCgYByAX+vIhyvOQmXFtz1XLgaNSoRbdRolk7tiuy4v29lX2unTfxYbMRv +Hljt/MG7ytR6los4Jv+RWvKfjUnC9yEi8tWCm9lPiV3xySSxsLQZw2Xz6FrldztW +cDCWypwy0ZhdKxYv7fvBc3CZEwgcpvKy7fPICM8p9gTntTEqMxflOQ== +-----END RSA PRIVATE KEY-----
diff --git a/demos/opc_ua/doc/nxpint-readme.rst.txt b/demos/opc_ua/doc/nxpint-readme.rst.txt new file mode 100644 index 0000000..3d1a8d8 --- /dev/null +++ b/demos/opc_ua/doc/nxpint-readme.rst.txt
@@ -0,0 +1,28 @@ + +Add new object to open62541 server using UAModeler +====================================================== + +1) Create the information model for opc ua server using UA modeler. Tutorials on UA modeler is not in the scope of this document. + +#) Right click on model and export XML + +#) Right click on model and export NodesIds + +#) Copy the exported xml and csv file to ``simw-top\demos\opc_ua\opc_ua_server\info_model``. + +#) Modify the filenames in script ``simw-top\demos\opc_ua\opc_ua_server\info_model\generate_info_model_files.py`` if required. + +#) Run :: + + python3 generate_info_model_files.py + +#) Source files are generated in ``simw-top\demos\opc_ua\opc_ua_server\info_model`` + +#) Call the new model function from main in server_encryption.c file. Also include the the header files. + +#) Update the build files :: + + cd simw-top_build/imx_native_se050_t1oi2c + cmake . + +#) Build open62541 server example \ No newline at end of file
diff --git a/demos/opc_ua/doc/open62541_sss.jpg b/demos/opc_ua/doc/open62541_sss.jpg new file mode 100644 index 0000000..e6a3dab --- /dev/null +++ b/demos/opc_ua/doc/open62541_sss.jpg Binary files differ
diff --git a/demos/opc_ua/doc/readme.rst b/demos/opc_ua/doc/readme.rst new file mode 100644 index 0000000..0b72879 --- /dev/null +++ b/demos/opc_ua/doc/readme.rst
@@ -0,0 +1,153 @@ +.. + Copyright 2019 NXP + + +.. _opc-ua-open62541-demo: + +================================================== +OPC UA (Open62541) Demo +================================================== + +Supported Platforms +======================================================= + +* Server Platform + + * Windows – JRCPv2 – SE050 + * iMX6 / RaspberryPi - t1oi2c – SE050 + +* Client Platform + + * UaExpert on Windows + * Open62541 client on Windows + * Open62541 client on iMX6 / RaspberryPi + +Introduction +============== + +OPC UA (Open Platform Communications Unified Architecture) is an application layer protocol specific to Industrial IoT. +It can run on top of TCP, TCP + Web services or TCP + HTTPS. +In this client - server demo, the Open62541 open source OPC UA stack is used for integration with SE050. +The server certificate and key are provisioned inside the SE050, the access to the SE050 is is performed using the SSS APIs. +The OPC UA server example source code is available in directory ``demos\opc_ua\opc_ua_server``. +The Open62541 specific adaptation layer to the SE050 is available in directory ``sss\plugin\open62541``. +The source code of the Open62541 stack is available in directory ``ext\open62541``. + +OPC UA stack: + +.. image:: security.jpg + +In reference to the above image the demo matches the left arrow: + +- UA binary encoding is used +- UA Secure conversation with security policy ``Basic256Sha256`` and ``Sign and Encrypt mode`` +- on top of TCP + +.. image:: open62541_sss.jpg + +The crypto functionality (as defined by ``Basic256Sha256``) is handled as follows: + +- AsymmetricSignatureAlgorithm_RSA-PKCS15-SHA2-256: RSA Sign operation done by SE050 +- AsymmetricEncryptionAlgorithm_RSA-OAEP-SHA: RSA Decrypt operation done by SE050 +- Symmetric crypto operations are handled by the OPC UA stack on the host micro + +Build Open62541 server and client examples +============================================ + +1) Build server and client example :: + + cd simw-top + python3 scripts/create_cmake_projects.py + cd ../simw-top_build/imx_native_se050_t1oi2c + cmake -DWithOPCUA_open62541:BOOL=ON -DHostCrypto:STRING=MBEDTLS -DWithSharedLIB:BOOL=OFF . + cmake --build . + make install + ldconfig /usr/local/lib + +.. note:: + Replace ``imx_native_se050_t1oi2c`` with ``raspbian_native_se050_t1oi2c`` + when building for Raspberry Pi. + +#) Server and client binaries are copied to the simw-top/tools folder + + +Test Open62541 server and client examples +========================================= + +1) Client/Server keys are available in ``simw-top\demos\opc_ua\credentials\``. Optionally you can regenerate the client/server keys + with the following command :: + + cd simw-top/demos/opc_ua/scripts + python3 createOPCUACredentials_Optional.py + + OPU UA mandates the host name to be part of the subjectAltName in the server certificate. + The default server certificate provided with the package uses hostname 'localhost'. + To create a completely new set of credentials with a specific server hostname / ip-address run + createOPCUACredentials_Optional.py script as + + python3 createOPCUACredentials_Optional.py <server_hostname> # Default <server_hostname> = localhost + +#) Refer to :ref:`cli-tool` for ssscli tool setup. Using ssscli tool, provision server certificate and key into SE050 and create a reference pem file for server key :: + + cd simw-top/demos/opc_ua/scripts + + python3 provisionOPCUAServer.py 127.0.0.1:8050 jrcpv2 #On Windows + OR + python3 provisionOPCUAServer.py #On iMX6 / RaspberryPi + +#) Start opc ua server :: + + cd simw-top/demos/opc_ua/scripts + + python3 open62541Server.py jrcpv2 127.0.0.1:8050 <certificate> #On Windows + OR + python3 open62541Server.py <certificate> #On iMX6 / RaspberryPi + + When using Open62541 client: + <certificate> is located at simw-top\demos\opc_ua\credentials\open62541_client_cert.der + When using UAexpert client: + <certificate> is located at uaexpert\PKI\own\certs\uaexpert.der + + Passing "none" for <certificate>, will make the server accept all client certificates. + +#) Start opc ua client :: + + cd simw-top/demos/opc_ua/scripts + python3 open62541Client.py opc.tcp://127.0.0.1:4840 + + On successful connection, value of the object "Sensor1" is read from server and displayed. + + +#) UaExpert client can also be used to test the Open62541 server. + +- For testing with UaExpert client, root certificate needs to be copied to UaExpert trusted list of certificates, + +- Go to UaExpert -> Settings -> Manage Certificates -> Trusted (Tab) -> Open Certificate Location and copy the file ``simw-top\demos\opc_ua\credentials\open62541_rootCA_cert.der`` + +- Also disable following errors in UaExpert configurations. + i. UaExpert -> Settings -> Configure UaExpert -> General.DisableError.CertificateIssuerRevocationUnknown -> true + #. UaExpert -> Settings -> Configure UaExpert -> General.DisableError.CertificateRevocationUnknown -> true + +- Add the server details to connect. UaExpert -> Server -> Add -> Advanced (Tab). Add details in + i. EndPoint Url (opc.tcp://<SERVER_IP>:4840/) + #. Security Policy as Basic256Sha256 + #. Message Security Mode as Sign & Encrypt + +- Added server will appear in project tab. Right click on server -> Connect. + +- On successful connection, the client objects should appear in UaExpert address space. + +- To change the value of object "Sensor1", select the object "Sensor1" in address space. In the Attribute section, select "value" attribute and enter the new value. + + +Known Limitations +=================== + +1) Client certificates are self signed certificates. Not tested with root ca signed. + +#) No root certificate can be given as input to command line Open62541 client. So any server certificate is accepted. + + +.. only:: nxp + + .. include:: nxpint-readme.rst.txt
diff --git a/demos/opc_ua/doc/security.jpg b/demos/opc_ua/doc/security.jpg new file mode 100644 index 0000000..8f090cd --- /dev/null +++ b/demos/opc_ua/doc/security.jpg Binary files differ
diff --git a/demos/opc_ua/opc_ua_client/CMakeLists.txt b/demos/opc_ua/opc_ua_client/CMakeLists.txt new file mode 100644 index 0000000..b9400ee --- /dev/null +++ b/demos/opc_ua/opc_ua_client/CMakeLists.txt
@@ -0,0 +1,49 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(open62541_ex_client) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + open62541_lib + mbedtls + ex_common +) + +IF(WithHost_PCWindows) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} Ws2_32) +ENDIF() + +CREATE_BINARY(${PROJECT_NAME}) + +ADD_CUSTOM_COMMAND( + TARGET ${PROJECT_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_SOURCE_DIR}/tools + COMMENT "Copy exe to ${CMAKE_SOURCE_DIR}/tools" +) + +IF( + "${CMAKE_CXX_COMPILER_ID}" + MATCHES + "MSVC" +) + TARGET_COMPILE_OPTIONS( + ${PROJECT_NAME} + PRIVATE + /wd4706 # assignment within conditional expression + /wd4701 # potentially uninitialized local variable + /wd4703 # potentially uninitialized local pointer variable + ) +ENDIF()
diff --git a/demos/opc_ua/opc_ua_client/client_connect.c b/demos/opc_ua/opc_ua_client/client_connect.c new file mode 100644 index 0000000..7fa527f --- /dev/null +++ b/demos/opc_ua/opc_ua_client/client_connect.c
@@ -0,0 +1,179 @@ +/* This work is licensed under a Creative Commons CCZero 1.0 Universal License. + * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. */ + +/* Copyright 2019 NXP. */ + +#include <open62541/client_config_default.h> +#include <open62541/client_highlevel.h> +#include <open62541/client_subscriptions.h> +#include <open62541/plugin/log_stdout.h> + +#include "common.h" + +#include <fsl_sss_api.h> +#include <fsl_sss_se05x_types.h> + +sss_session_t *gSESession = NULL; + +static void usage(void) { + printf("Usage: client [-username name] [-password password] "); +#ifdef UA_ENABLE_ENCRYPTION + printf("[-cert certfile.der] [-key keyfile.der] " + "[-securityMode <0-3>] [-securityPolicy policyUri] "); +#endif + printf("opc.tcp://<host>:<port>\n"); +} + +int main(int argc, char *argv[]) { + UA_String securityPolicyUri = UA_STRING_NULL; + UA_MessageSecurityMode securityMode = UA_MESSAGESECURITYMODE_INVALID; /* allow everything */ + char *serverurl = NULL; + char *username = NULL; + char *password = NULL; +#ifdef UA_ENABLE_ENCRYPTION + char *certfile = NULL; + char *keyfile = NULL; +#endif + + /* At least one argument is required for the server uri */ + if(argc <= 1) { + usage(); + return EXIT_FAILURE; + } + + /* Parse the arguments */ + for(int argpos = 1; argpos < argc; argpos++) { + if(strcmp(argv[argpos], "--help") == 0 || + strcmp(argv[argpos], "-h") == 0) { + usage(); + return EXIT_SUCCESS; + } + + if(argpos + 1 == argc) { + serverurl = argv[argpos]; + continue; + } + + if(strcmp(argv[argpos], "-username") == 0) { + argpos++; + username = argv[argpos]; + continue; + } + + if(strcmp(argv[argpos], "-password") == 0) { + argpos++; + password = argv[argpos]; + continue; + } + +#ifdef UA_ENABLE_ENCRYPTION + if(strcmp(argv[argpos], "-cert") == 0) { + argpos++; + certfile = argv[argpos]; + continue; + } + + if(strcmp(argv[argpos], "-key") == 0) { + argpos++; + keyfile = argv[argpos]; + continue; + } + + if(strcmp(argv[argpos], "-securityMode") == 0) { + argpos++; + if(sscanf(argv[argpos], "%i", (int*)&securityMode) != 1) { + usage(); + return EXIT_FAILURE; + } + continue; + } + + if(strcmp(argv[argpos], "-securityPolicy") == 0) { + argpos++; + securityPolicyUri = UA_STRING(argv[argpos]); + continue; + } +#endif + + usage(); + return EXIT_FAILURE; + } + + /* Create the server and set its config */ + UA_Client *client = UA_Client_new(); + UA_ClientConfig *cc = UA_Client_getConfig(client); + +#ifdef UA_ENABLE_ENCRYPTION + if(certfile) { + UA_ByteString certificate = loadFile(certfile); + UA_ByteString privateKey = loadFile(keyfile); + { + UA_realloc(privateKey.data, privateKey.length + 1); + privateKey.data[privateKey.length] = '\0'; + privateKey.length = privateKey.length + 1; + } + UA_ClientConfig_setDefaultEncryption(cc, certificate, privateKey, + NULL, 0, NULL, 0); + UA_ByteString_deleteMembers(&certificate); + UA_ByteString_deleteMembers(&privateKey); + } else { + UA_ClientConfig_setDefault(cc); + } +#else + UA_ClientConfig_setDefault(cc); +#endif + + cc->securityMode = securityMode; + cc->securityPolicyUri = securityPolicyUri; + + { + cc->clientDescription.applicationUri.length = 0; + UA_free(cc->clientDescription.applicationUri.data); + + cc->clientDescription.applicationUri = UA_STRING_ALLOC("urn:open62541:localhost"); + } + /* Connect to the server */ + UA_StatusCode retval = UA_STATUSCODE_GOOD; + if(username) + retval = UA_Client_connect_username(client, serverurl, username, password); + else + retval = UA_Client_connect(client, serverurl); + if(retval != UA_STATUSCODE_GOOD) { + cc->securityPolicyUri.data = NULL; + cc->securityPolicyUri.length = 0; + UA_Client_delete(client); + return EXIT_FAILURE; + } + + UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "Connected!"); + + /* Read the server-time */ + UA_Variant value; + UA_Variant_init(&value); + UA_Client_readValueAttribute(client, + UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME), + &value); + if(UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) { + UA_DateTimeStruct dts = UA_DateTime_toStruct(*(UA_DateTime *)value.data); + UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, + "The server date is: %02u-%02u-%04u %02u:%02u:%02u.%03u", + dts.day, dts.month, dts.year, dts.hour, dts.min, dts.sec, dts.milliSec); + } + + const UA_NodeId nodeId1 = UA_NODEID_STRING(1, "Sensor1"); + retval = UA_Client_readValueAttribute(client, nodeId1, &value); + if (retval == UA_STATUSCODE_GOOD && + UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_UINT32])) { + UA_Int32 val = *(UA_Int32 *)value.data; + UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "value from Sensor1 is: %d\n", val); + } + + UA_Variant_clear(&value); + + /* Clean up */ + cc->securityPolicyUri.data = NULL; + cc->securityPolicyUri.length = 0; + UA_Client_disconnect(client); + UA_Client_delete(client); + return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE; +}
diff --git a/demos/opc_ua/opc_ua_server/CMakeLists.txt b/demos/opc_ua/opc_ua_server/CMakeLists.txt new file mode 100644 index 0000000..b0723ce --- /dev/null +++ b/demos/opc_ua/opc_ua_server/CMakeLists.txt
@@ -0,0 +1,52 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(open62541_ex_server) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + info_model/*.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC ${CMAKE_SOURCE_DIR}/demos/opc_ua/opc_ua_server/info_model) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + open62541_lib + mbedtls + ex_common +) + +IF(WithHost_PCWindows) + TARGET_LINK_LIBRARIES(${PROJECT_NAME} Ws2_32) +ENDIF() + +CREATE_BINARY(${PROJECT_NAME}) + +ADD_CUSTOM_COMMAND( + TARGET ${PROJECT_NAME} + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_SOURCE_DIR}/tools + COMMENT "Copy exe to ${CMAKE_SOURCE_DIR}/tools" +) + +IF( + "${CMAKE_CXX_COMPILER_ID}" + MATCHES + "MSVC" +) + TARGET_COMPILE_OPTIONS( + ${PROJECT_NAME} + PRIVATE + /wd4706 # assignment within conditional expression + /wd4701 # potentially uninitialized local variable + /wd4703 # potentially uninitialized local pointer variable + ) +ENDIF()
diff --git a/demos/opc_ua/opc_ua_server/server_encryption.c b/demos/opc_ua/opc_ua_server/server_encryption.c new file mode 100644 index 0000000..7cdc19f --- /dev/null +++ b/demos/opc_ua/opc_ua_server/server_encryption.c
@@ -0,0 +1,188 @@ +/* This work is licensed under a Creative Commons CCZero 1.0 Universal License. + * See http://creativecommons.org/publicdomain/zero/1.0/ for more information. + * + * Copyright 2019 (c) Kalycito Infotech Private Limited + * Copyright 2019 NXP. + * + */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> + +#include <open62541/client_highlevel.h> +#include <open62541/plugin/log_stdout.h> +#include <open62541/plugin/securitypolicy.h> +#include <open62541/server.h> +#include <open62541/server_config_default.h> + +#include <signal.h> +#include <stdlib.h> + +#include "common.h" + +#include "sss_interface.h" + +static ex_sss_boot_ctx_t gex_sss_opc_ua_boot_ctx; +sss_session_t *gSESession = NULL; +UA_Boolean running = true; +UA_Int32 sensor1 = 0; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_opc_ua_boot_ctx) +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define EX_SSS_BOOT_DO_ERASE 0 + +#include <ex_sss_main_inc.h> + +static void stopHandler(int sig) { + UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, "received ctrl-c"); + running = false; +} + +static UA_StatusCode +readSensor1Value(UA_Server *server, + const UA_NodeId *sessionId, void *sessionContext, + const UA_NodeId *nodeId, void *nodeContext, + UA_Boolean sourceTimeStamp, const UA_NumericRange *range, + UA_DataValue *dataValue) { + UA_Int32 now = sensor1; + UA_Variant_setScalarCopy(&dataValue->value, &now, + &UA_TYPES[UA_TYPES_UINT32]); + dataValue->hasValue = true; + return UA_STATUSCODE_GOOD; +} + +static UA_StatusCode +writeSensor1Value(UA_Server *server, + const UA_NodeId *sessionId, void *sessionContext, + const UA_NodeId *nodeId, void *nodeContext, + const UA_NumericRange *range, const UA_DataValue *data) { + UA_UInt16 i = 0; + char *mem = NULL; + UA_Int32 val = 0; + + if (strcmp(data->value.type->typeName, "UInt32") == 0) + { + mem = data->value.data; + for (i = 0; i < data->value.type->memSize; i++) + { + val |= mem[i] << (8 * i); + } + sensor1 = val; + } + else + { + UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, + "Cannot handle the data type"); + } + + return UA_STATUSCODE_GOOD; +} + +static void +addSensor1Variable(UA_Server *server) { + UA_VariableAttributes attr = UA_VariableAttributes_default; + attr.displayName = UA_LOCALIZEDTEXT("en-US", "Sensor1"); + attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE; + + UA_NodeId currentNodeId = UA_NODEID_STRING(1, "Sensor1"); + UA_QualifiedName currentName = UA_QUALIFIEDNAME(1, "Sensor1"); + UA_NodeId parentNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER); + UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES); + UA_NodeId variableTypeNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE); + + UA_DataSource timeDataSource; + timeDataSource.read = readSensor1Value; + timeDataSource.write = writeSensor1Value; + UA_Server_addDataSourceVariableNode(server, currentNodeId, parentNodeId, + parentReferenceNodeId, currentName, + variableTypeNodeId, attr, + timeDataSource, NULL, NULL); +} + +//int main(int argc, char* argv[]) { +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx){ + UA_ByteString certificate = UA_STRING_NULL; + signal(SIGINT, stopHandler); + signal(SIGTERM, stopHandler); + + gex_sss_argc--; + gSESession = &(pCtx->session); + + if(gex_sss_argc < 3) { + UA_LOG_FATAL(UA_Log_Stdout, UA_LOGCATEGORY_USERLAND, + "Missing arguments. Arguments are " + "<server-certificate.der> <private-key.der> " + "[<trustlist1.crl>, ...]"); + return EXIT_FAILURE; + } + + /* Load certificate and private key */ + + if (strcmp(gex_sss_argv[1], "NULL") == 0) + { + /* Read certificate from SE */ + if (sss_interface_init() != 0) { + return EXIT_FAILURE; + } + if (sss_interface_read_certificate(&(certificate.data), &(certificate.length)) != 0) { + return EXIT_FAILURE; + } + } + else + { + certificate = loadFile(gex_sss_argv[1]); + } + + UA_ByteString privateKey = loadFile(gex_sss_argv[2]); + + /* Load the trustlist */ + size_t trustListSize = 0; + if(gex_sss_argc > 3) + trustListSize = (size_t)gex_sss_argc -3; + UA_STACKARRAY(UA_ByteString, trustList, trustListSize); + for(size_t i = 0; i < trustListSize; i++) + trustList[i] = loadFile(gex_sss_argv[i+3]); + + /* Loading of a issuer list, not used in this application */ + size_t issuerListSize = 0; + UA_ByteString *issuerList = NULL; + + /* Loading of a revocation list currently unsupported */ + UA_ByteString *revocationList = NULL; + size_t revocationListSize = 0; + + UA_Server *server = UA_Server_new(); + UA_ServerConfig *config = UA_Server_getConfig(server); + + if (privateKey.length != 0) + { + UA_realloc(privateKey.data, (privateKey.length + 1) * sizeof(UA_Byte)); + privateKey.data[privateKey.length] = '\0'; + privateKey.length = privateKey.length + 1; + } + + UA_StatusCode retval = + UA_ServerConfig_setDefaultWithSecurityPolicies(config, 4840, + &certificate, &privateKey, + trustList, trustListSize, + issuerList, issuerListSize, + revocationList, revocationListSize); + + UA_ByteString_clear(&certificate); + UA_ByteString_clear(&privateKey); + for(size_t i = 0; i < trustListSize; i++) + UA_ByteString_clear(&trustList[i]); + if(retval != UA_STATUSCODE_GOOD) + goto cleanup; + + addSensor1Variable(server); + + retval = UA_Server_run(server, &running); + + cleanup: + UA_Server_delete(server); + return retval == UA_STATUSCODE_GOOD ? EXIT_SUCCESS : EXIT_FAILURE; +}
diff --git a/demos/opc_ua/scripts/createOPCUACredentials_Optional.py b/demos/opc_ua/scripts/createOPCUACredentials_Optional.py new file mode 100644 index 0000000..4108c79 --- /dev/null +++ b/demos/opc_ua/scripts/createOPCUACredentials_Optional.py
@@ -0,0 +1,162 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Create Keys for OPC UA demo +# +# Preconditions +# - Openssl installed +# + +import os +import sys +import logging +import re +import subprocess + +def run(cmd_str, ignore_result=0, exp_retcode=0): + print("Running command: %s" %cmd_str) + pipes = subprocess.Popen( + cmd_str, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=True, + ) + std_out, std_err = pipes.communicate() + std_out = std_out.strip() + std_err = std_err.strip() + if not ignore_result: + if pipes.returncode != exp_retcode: + print("Command execution failed.") + else: + print("Command execution was successful.") + assert pipes.returncode == exp_retcode + + +cur_dir = os.path.abspath(os.path.dirname(__file__)) + +if len(sys.argv) == 2: + hostname = sys.argv[1] + EXT_CNF = os.path.join(cur_dir, '..', 'credentials', 'extensions_new.cnf') + f= open('%s' %EXT_CNF,"w+") + f.write("basicConstraints=CA:TRUE \n") + ip_address_match = re.match("^(\d{0,3})\.(\d{0,3})\.(\d{0,3})\.(\d{0,3})$", hostname) + if ip_address_match: + f.write("subjectAltName=URI:\"urn:open62541:%s\",IP:\"%s\"" % (hostname, hostname)) + else: + f.write("subjectAltName=URI:\"urn:open62541:%s\",DNS:\"%s\"" % (hostname, hostname)) + f.close() +else: + EXT_CNF = os.path.join(cur_dir, '..', 'credentials', 'extensions.cnf') + + +CA_KEY_LEN = 2048 +RSA_KEY_LEN = 2048 +ROOTCA_CERT_SUB = "/OU=NXP Plug Trust CA/CN=NXP RootCAvRxxx" +CERT_VALIDITY = 4380 # 12 years + +ROOT_CA_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_key_pair.pem') +ROOT_CA_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.cer') +ROOT_CA_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.der') +ROOT_CA_CERT_SRL = os.path.join(cur_dir, '..', 'credentials', 'open62541_rootCA_cert.srl') + +SERVER_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_key_pair.pem') +SERVER_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_cert.cer') +SERVER_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_cert.der') +SERVER_CERT_CSR = os.path.join(cur_dir, '..', 'credentials', 'open62541_server.csr') +SERVER_CERT_SUB = "/CN=NXP_SE050_OPEN62541_SERVER" + +CLIENT_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_key_pair.pem') +CLIENT_CERT_CER = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_cert.cer') +CLIENT_CERT_DER = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_cert.der') +CLIENT_CERT_CSR = os.path.join(cur_dir, '..', 'credentials', 'open62541_client.csr') +CLIENT_CERT_SUB = "/CN=NXP_SE050_OPEN62541_CLIENT" + +CLIENT_CONF = os.path.join(cur_dir, '..', 'credentials', 'client.conf') + + +if sys.platform.startswith("win"): + openssl = os.path.join(cur_dir, '..', '..', '..', 'ext', 'openssl', 'bin', 'openssl.exe') + openssl_config_file = os.path.join(cur_dir, '..', '..', '..', 'ext', 'openssl', 'ssl', 'openssl.cnf') + os.environ['OPENSSL_CONF'] = openssl_config_file +else: + openssl = 'openssl' + +# Create root CA key pair +cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, ROOT_CA_KEY, CA_KEY_LEN) +run(cmd_str) + +#Create rootCA certificate +cmd_str = "\"%s\" req -x509 -new -nodes -key \"%s\" -subj \"%s\" -days \"%s\" -out \"%s\"" % (openssl, ROOT_CA_KEY, ROOTCA_CERT_SUB, CERT_VALIDITY, ROOT_CA_CERT_CER) +run(cmd_str) + +# Create server key pair +cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, SERVER_KEY, RSA_KEY_LEN) +run(cmd_str) + +# Create certificate signing request for server +cmd_str = "\"%s\" req -new -key \"%s\" -subj \"%s\" -out \"%s\" " % (openssl, SERVER_KEY, SERVER_CERT_SUB, SERVER_CERT_CSR) +run(cmd_str) + +# Sign and create server certificate +cmd_str = "\"%s\" x509 -req -extfile \"%s\" -sha256 -days \"%s\" -in \"%s\" -CAcreateserial -CA \"%s\" -CAkey \"%s\" -out \"%s\" " % (openssl, EXT_CNF, CERT_VALIDITY, SERVER_CERT_CSR, ROOT_CA_CERT_CER, ROOT_CA_KEY, SERVER_CERT_CER) +run(cmd_str) + +# Convert root ca certificate to DER format +cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, ROOT_CA_CERT_CER, ROOT_CA_CERT_DER) +run(cmd_str) + +# Convert server certificate to DER format +cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, SERVER_CERT_CER, SERVER_CERT_DER) +run(cmd_str) + + +# create client certificate (CA signed) + +# Create client key pair +#cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, CLIENT_KEY, RSA_KEY_LEN) +#run(cmd_str) + +# Create certificate signing request for client +#cmd_str = "\"%s\" req -new -key \"%s\" -subj \"%s\" -out \"%s\" " % (openssl, CLIENT_KEY, CLIENT_CERT_SUB, CLIENT_CERT_CSR) +#run(cmd_str) + +# Sign and create client certificate +#cmd_str = "\"%s\" x509 -req -extfile \"%s\" -sha256 -days \"%s\" -in \"%s\" -CAcreateserial -CA \"%s\" -CAkey \"%s\" -out \"%s\" " % (openssl, CLIENT_EXT_CNF, CERT_VALIDITY, CLIENT_CERT_CSR, ROOT_CA_CERT_CER, ROOT_CA_KEY, CLIENT_CERT_CER) +#run(cmd_str) + +# Convert client certificate to DER format +#cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, CLIENT_CERT_CER, CLIENT_CERT_DER) +#run(cmd_str) + + +# create client certificate (self signed) +cmd_str = "\"%s\" genrsa -out \"%s\" \"%s\"" % (openssl, CLIENT_KEY, RSA_KEY_LEN) +run(cmd_str) + +#Create rootCA certificate +cmd_str = "\"%s\" req -x509 -new -nodes -key \"%s\" -subj \"%s\" -days \"%s\" -out \"%s\" -config \"%s\" " % (openssl, CLIENT_KEY, CLIENT_CERT_SUB, CERT_VALIDITY, CLIENT_CERT_CER, CLIENT_CONF) +run(cmd_str) + +# Convert client certificate to DER format +cmd_str = "\"%s\" x509 -in \"%s\" -outform DER -out \"%s\" " % (openssl, CLIENT_CERT_CER, CLIENT_CERT_DER) +run(cmd_str) + + +#os.remove('.rnd') +os.remove(SERVER_CERT_CSR) +os.remove(SERVER_CERT_CER) +#os.remove(CLIENT_CERT_CSR) +os.remove(CLIENT_CERT_CER) +os.remove(ROOT_CA_CERT_CER) +#os.remove(ROOT_CA_CERT_SRL) +if len(sys.argv) == 2: + os.remove(EXT_CNF) + +print("##############################################################") +print("# #") +print("# Program Completed Successfully #") +print("# #") +print("##############################################################")
diff --git a/demos/opc_ua/scripts/open62541Client.py b/demos/opc_ua/scripts/open62541Client.py new file mode 100644 index 0000000..e4f2f19 --- /dev/null +++ b/demos/opc_ua/scripts/open62541Client.py
@@ -0,0 +1,43 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Start open62541 server +# +# Preconditions +# - open62541 client built +# +# Usage example: +# To run : +# ->python open62541Client.py opc.tcp://<SERVER_IP>:<SERVER_PORT> +# +# + +import os +import sys +import logging + +def usage(): + print("") + print("Please provide as first argument: <OPC UA SERVER ADDRESS>") + print("Usage Example:") + print(" python %s opc.tcp://127.0.0.1:4840" % (__file__,)) + +cur_dir = os.path.abspath(os.path.dirname(__file__)) +CLIENT_BIN = os.path.join(cur_dir, '..', '..', '..', 'tools', 'open62541_ex_client') +RSA_CLIENT_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_key_pair.pem') +CLIENT_CERT = os.path.join(cur_dir, '..', 'credentials', 'open62541_client_cert.der') +connection_data = '' + +if len(sys.argv) == 1: + usage(); +else: + if (sys.argv[1] == 'help'): + usage(); + else: + connection_data = sys.argv[1] + cmd_str = "%s -cert %s -key %s -securityMode 3 -securityPolicy http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 %s" % (CLIENT_BIN, CLIENT_CERT, RSA_CLIENT_KEY, connection_data) + print (cmd_str) + os.system(cmd_str)
diff --git a/demos/opc_ua/scripts/open62541Server.py b/demos/opc_ua/scripts/open62541Server.py new file mode 100644 index 0000000..e93d5e4 --- /dev/null +++ b/demos/opc_ua/scripts/open62541Server.py
@@ -0,0 +1,97 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# Create Keys for OPC UA demo +# +# Preconditions +# - open62541 built +# +# Usage example: +# To run using t1oi2c on iMX platform: +# ->python provisionTlsClient.py <rootCA> +# +# To run using jrcpv1: +# ->python open62541Server.py jrcpv1 192.168.1.222:8050 <rootCA> +# +# To run using vcom: +# ->python open62541Server.py vcom COM7 <rootCA> +# +# To run using jrcpv2: +# ->python open62541Server.py jrcpv2 127.0.0.1:8050 <rootCA> +# + +import os +import sys +import logging + +def usage(): + print("") + print("Please provide as first argument: CONNECTION_TYPE - vcom, jrcpv1, jrcpv2. Do not specify for \"T1oI2C\"") + print("Please provide as second argument: CONNECTION_PARAMETER. Default: \"None\"") + print("Please provide as third argument: ROOT CERTIFICATE. Specify \"none\" for all client certificates to be accepted ") + print("Usage Example:") + print(" python %s rootCA" % (__file__,)) + print(" python %s vcom COM5 rootCA" % (__file__,)) + print(" python %s jrcpv1 127.0.0.1:8050 rootCA" % (__file__,)) + print(" python %s jrcpv2 127.0.0.1:8050 rootCA" % (__file__,)) + exit() + + +def parse_in_args(): + if len(sys.argv) < 2: + usage(); + else: + if (sys.argv[1] == 'help'): + usage(); + elif (sys.argv[1] == 'jrcpv2' or sys.argv[1] == 'jrcpv1'): + if len(sys.argv) != 4: + usage(); + connection_type = sys.argv[1] + connection_data = sys.argv[2] + port_data = connection_data.split(':') + JRCP_HOSTNAME = port_data[0] + try: + JRCP_PORT = port_data[1] + except IndexError as exc: + log.error("Please specify jrcp port.") + usage(); + os.environ['JRCP_HOSTNAME'] = JRCP_HOSTNAME + os.environ['JRCP_PORT'] = JRCP_PORT + print("JRCP_HOSTNAME: %s" % JRCP_HOSTNAME) + print("JRCP_PORT: %s" % JRCP_PORT) + + elif (sys.argv[1] == 'vcom'): + if len(sys.argv) != 4: + usage(); + connection_type = sys.argv[1] + connection_data = sys.argv[2] + else: + if len(sys.argv) != 2: + usage(); + connection_data = "none" + connection_type = "" + return connection_type, connection_data + +cur_dir = os.path.abspath(os.path.dirname(__file__)) +SERVER_BIN = os.path.join(cur_dir, '..', '..', '..', 'tools', 'open62541_ex_server') +RSA_SERVER_KEY = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_key_pair_ref.pem') +SERVER_CERT = os.path.join(cur_dir, '..', 'credentials', 'open62541_server_cert.der') +#SERVER_CERT = 'NULL' + + +connection_type, connection_data = parse_in_args() + +ROOT_CA = sys.argv[len(sys.argv) - 1] + +print(connection_data) +print(connection_type) +print(ROOT_CA) +if ROOT_CA == 'none': + ROOT_CA = '' +cmd_str = "%s %s %s %s %s" % (SERVER_BIN, SERVER_CERT, RSA_SERVER_KEY, ROOT_CA, connection_data) +print (cmd_str) +os.system(cmd_str) +usage();
diff --git a/demos/opc_ua/scripts/provisionOPCUAServer.py b/demos/opc_ua/scripts/provisionOPCUAServer.py new file mode 100644 index 0000000..cf86ccd --- /dev/null +++ b/demos/opc_ua/scripts/provisionOPCUAServer.py
@@ -0,0 +1,286 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +# SE050 Key provisioning script for TLS demo +# +# Preconditions +# - SE050 or A71CH attached +# - Virtual environment should be activated (not for iMX platform). +# Refer ssscli installation steps: Plug & Trust MW, Section 9.3 +# +# Postconditions +# - Key pair injected on id referred by KEYPAIR_INDEX_CLIENT_PRIVATE variable +# - Ref pem created +# - Client certificate injected on id referred by CERTIFICATE_INDEX variable. +# +# Usage example: +# To run using t1oi2c on iMX platform: +# ->python provisionTlsClient.py +# +# To run using jrcpv1: +# ->python provisionTlsClient.py 192.168.1.222:8050 +# +# To run using vcom: +# ->python provisionTlsClient.py COM7 +# +# To run using jrcpv2: +# ->python provisionTlsClient.py 127.0.0.1:8050 jrcpv2 +# + +import os +import sys +import subprocess +import logging +import traceback +logging.basicConfig(format='%(message)s', level=logging.DEBUG) +log = logging.getLogger(__name__) + +# GLOBAL VARIABLES +# ---------------- +SE050_PROVISIONING_SCRIPT = "0.1" +IOT_SE = "se05x" +KEYPAIR_INDEX_SERVER_PRIVATE = 0x1234 +CERTIFICATE_INDEX = 0x2345 + + +def session_open(IOT_SE, ip_addr_port_server, connection_type): + ''' Open session based on IOT Secure Element selected. ''' + import sss.const as const + import sss.connect as connect + import sss.session as session + if ip_addr_port_server == "": + ip_addr_port_server = "None" + if IOT_SE == "se05x": + connection_type = "t1oi2c" + else: + log.error("Un supported subsystem. Must be \"se05x\" ") + return None + log.info("###############################################################") + log.info("#") + log.info("# SUBSYSTEM : %s" % IOT_SE) + log.info("# CONNECTION_TYPE : %s" % connection_type) + log.info("# CONNECTION_PARAMETER : %s" % ip_addr_port_server) + log.info("#") + log.info("###############################################################") + + connect.do_open_session(const.SUBSYSTEM_TYPE[IOT_SE], + const.CONNECTION_TYPE[connection_type], ip_addr_port_server) + session_obj = session.Session() + try: + session_obj.session_open() + except Exception as exc: + error_log_file = os.path.abspath(os.path.dirname(__file__)) + os.sep + "error_log.txt" + if not os.path.isfile(error_log_file): + err_write = open(error_log_file, 'w+') + else: + err_write = open(error_log_file, 'a+') + traceback.print_exc(None, err_write) + err_write.close() + usage(connection_type) + return None + return session_obj + + +def session_close(session): + ''' Close opened session. ''' + import sss.connect as connect + import sss.util as util + + if session: + session.session_close() + + if os.path.isfile(util.get_session_pkl_path()): + connect.do_close_session() + + +def reset(session): + ''' Reset the Secure Module to the initial state. ''' + from sss.se05x import Se05x + from sss.a71ch import A71CH + import sss.sss_api as apis + if session.subsystem == apis.kType_SSS_SE_SE05x: + se05x_obj = Se05x(session) + se05x_obj.debug_reset() + elif session.subsystem == apis.kType_SSS_SE_A71CH: + a71ch_obj = A71CH(session) + a71ch_obj.debug_reset() + + +def refpem_rsa(session, keyid, file_name): + ''' Creates reference PEM file for RSA Pair. + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + filename = File name to store reference key. Can be in PEM or DER or PKCS12 format based on file extension. + By default filename with extension .pem in PEM format, .pfx or .p12 in PKCS12 format and others in DER format. + ''' + from sss.refkey import RefPem + import sss.sss_api as apis + refpem_obj = RefPem(session) + status = refpem_obj.do_rsa_refpem_pair(keyid, file_name) + if status != apis.kStatus_SSS_Success: + log.error("Refpem creation failed..!") + session_close(session) + return status + log.info("Successfully Created reference key.") + return status + + +def set_rsa_pair(session, keyid, server_key): + ''' Set RSA Key pair to the Secure Module \n + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + key = Can be raw key (DER format) or in file. + For file, by default filename with extension .pem considered as PEM format and others as DER format.\n + ''' + import sss.setkey as setkey + import sss.sss_api as apis + log.info("server_key file: %s" % (server_key,)) + log.info("Injecting RSA key pair at key ID: 0x%x" % (keyid,)) + set_obj = setkey.Set(session) + status = set_obj.do_set_rsa_key_pair(keyid, server_key, None) + if status != apis.kStatus_SSS_Success: + log.error("Injecting key pair failed..!") + session_close(session) + return status + log.info("Successfully Injected RSA key pair.") + return status + + +def set_cert(session, keyid, cert): + ''' Inject Certificate to the Secure Module + keyid = 32bit Key ID. Should be in hex format. Example: 20E8A001 \n + key = Can be raw certificate (DER format) or in file. + For file, by default filename with extension .pem and .cer considered as PEM format and others as DER format.\n + ''' + import sss.setkey as setkey + import sss.sss_api as apis + log.info("certificate file: %s" % (cert,)) + log.info("Injecting Certificate at key ID: 0x%x" % (keyid,)) + set_obj = setkey.Set(session) + status = set_obj.do_set_cert(keyid, cert, None) + if status != apis.kStatus_SSS_Success: + log.error("Injecting certificate failed..!") + session_close(session) + return status + log.info("Successfully Injected Certificate.") + return status + + +def parse_in_args(): + # Check whether an ip_address:port of the socket server was passed as argument + if len(sys.argv) >= 2: + connection_data = sys.argv[1] + if connection_data.find('COM') < 0: + port_data = connection_data.split(':') + JRCP_HOSTNAME = port_data[0] + try: + JRCP_PORT = port_data[1] + except IndexError as exc: + log.error("Please specify jrcp port.") + log.info("Usage Example:") + log.info(" python %s 127.0.0.1:8050" % (__file__,)) + return None, None + + os.environ['JRCP_HOSTNAME'] = JRCP_HOSTNAME + os.environ['JRCP_PORT'] = JRCP_PORT + + log.info("JRCP_HOSTNAME: %s" % JRCP_HOSTNAME) + log.info("JRCP_PORT: %s" % JRCP_PORT) + + if len(sys.argv) >= 3: + connection_type = sys.argv[2] + else: + connection_type = "jrcpv1" + else: + connection_type = "vcom" + else: + connection_data = "" + connection_type = "" + return connection_type, connection_data + + +def usage(connection_type): + if connection_type == "jrcpv1": + log.info("") + log.info("If you want to connect to the simulator, specify jrcpv2") + log.info("Usage Example:") + log.info(" python %s 127.0.0.1:8050 jrcpv2" % (__file__,)) + log.info("") + log.info("If you want to connect to the jrcpv1 server, check your ip address and connection.") + if connection_type in ["t1oi2c", "sci2c"]: + log.info("") + log.info("Please provide as first argument: CONNECTION_PARAMETER. Default: \"None\"") + log.info("Please provide as second argument: CONNECTION_TYPE - vcom, jrcpv1, jrcpv2. " + "Specify only for jrcpv2") + log.info("Usage Example:") + log.info(" python %s" % (__file__,)) + log.info(" python %s COM5" % (__file__,)) + log.info(" python %s 127.0.0.1:8050" % (__file__,)) + log.info(" python %s 127.0.0.1:8050 jrcpv2" % (__file__,)) + + +def main(): + cur_dir = os.path.abspath(os.path.dirname(__file__)) + py_sss_dir = os.path.join(cur_dir, '..', '..', '..', 'pycli', 'src') + sys.path.append(py_sss_dir) + import sss.connect as connect + import sss.sss_api as apis + + # -------------------------------------------------------------- + # Start of program - Ensure an A71CH is connected to your system. + # -------------------------------------------------------------- + log.info("SE050 Key provisioning script for OPC UA (Rev.%s)." % SE050_PROVISIONING_SCRIPT) + log.info("Executing this script will insert keys in the attached SE050 secure element.") + + # Check whether an vcom port or ip_address:port of the socket server was passed as argument + connection_type, connection_data = parse_in_args() + if None in [connection_type, connection_data]: + return + + keys_dir = os.path.join(cur_dir, '..', 'credentials') + os.sep + + # RSA keys to be stored in A71CH + # ------------------------------ + server_key = keys_dir + "open62541_server_key_pair.pem" + server_key_ref = keys_dir + "open62541_server_key_pair_ref.pem" + server_cert = keys_dir + "open62541_server_cert.der" + + # close old session + session_close(None) + + # Open a new session + session = session_open(IOT_SE, connection_data, connection_type) + if session is None: + return + + # NOTE: In case of A71CH always issue reset + # When SE050 is lacking storage / has conflicting storage issue a reset of the Secure Element + reset(session) + + # Inject rsa pair key to the Secure Element + status = set_rsa_pair(session, KEYPAIR_INDEX_SERVER_PRIVATE, server_key) + if status != apis.kStatus_SSS_Success: + return + + # Generate Reference key from the key injected. Store it in file referred by "server_key_ref" variable. + status = refpem_rsa(session, KEYPAIR_INDEX_SERVER_PRIVATE, server_key_ref) + if status != apis.kStatus_SSS_Success: + return + + # Inject certificate to the Secure Element + status = set_cert(session, CERTIFICATE_INDEX, server_cert) + if status != apis.kStatus_SSS_Success: + return + + session_close(session) + log.info("##############################################################") + log.info("# #") + log.info("# Program Completed Successfully #") + log.info("# #") + log.info("##############################################################") + + +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG) + main()
diff --git a/demos/opc_ua/scripts/test_opcua.py b/demos/opc_ua/scripts/test_opcua.py new file mode 100644 index 0000000..176421d --- /dev/null +++ b/demos/opc_ua/scripts/test_opcua.py
@@ -0,0 +1,165 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +import subprocess +import sys +import logging +import time + +logging.basicConfig(format='%(message)s', level=logging.DEBUG) +log = logging.getLogger(__name__) + +try: + from subprocess import CREATE_NEW_CONSOLE +except: + log.info("Test script is supported only on windows") + sys.exit(1) + + +def doTest(arguments): + connection_type = arguments[1] + connection_param = arguments[2] + root_ca = arguments[3] + + + logFile = open('opcua_results.txt', 'wb') + opcua_with_rootca = "NOT TESTED" + opcua_without_rootca = "NOT TESTED" + + log.info("******* CREATE CREDENTIALS *******" ) + create_cert = "python3 createOPCUACredentials_Optional.py " + log.info("%s" % create_cert) + p = subprocess.Popen(create_cert, shell=True, stdout=subprocess.PIPE) + stdout, stderr = p.communicate() + + time.sleep(3) + log.info("\n") + log.info("******* OPCUA PROVISION *******" ) + prov_cmd = "python3 provisionOPCUAServer.py " + connection_param + " " + connection_type + log.info("%s" % prov_cmd) + p = subprocess.Popen(prov_cmd, shell=True, stdout=subprocess.PIPE) + stdout, stderr = p.communicate() + + + # TEST OPC UA WITH ROOT CA + time.sleep(3) + log.info("\n") + srv_cmd = "python3 open62541Server.py " + connection_type + " " + connection_param + " " + root_ca + log.info("%s" % srv_cmd) + ser = subprocess.Popen(("python3 open62541Server.py %s %s %s" % (connection_type, connection_param, root_ca)), creationflags=CREATE_NEW_CONSOLE) + + log.info("Starting Client") + time.sleep(3) + log.info("\n") + output = subprocess.Popen(("python3 open62541Client.py opc.tcp://127.0.0.1:4840"),stdout=subprocess.PIPE).stdout + time.sleep(3) + log.info("\n") + + substr_found = 0 + for line in output: + log.info("%s", line) + str_res = line.find(str.encode("Connected!")) + if str_res != -1: + substr_found = 1 + + if substr_found == 1: + result_msg = "TEST(OPCUA, open62541_with_root_ca) PASS" + log.info(result_msg) + opcua_with_rootca = "PASS" + else: + result_msg = "TEST(OPCUA, open62541_with_root_ca) FAIL" + log.info(result_msg) + opcua_with_rootca = "FAIL" + + logFile.write(str.encode(result_msg)) + logFile.write(str.encode("\n")) + + output.close() + log.info("Stop server ...") + log.info("\n\n") + temp = subprocess.Popen("TASKKILL /F /PID {pid} /T".format(pid=ser.pid), stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=True, + ) + #std_out, std_err = temp.communicate() + #std_out = std_out.strip() + #std_err = std_err.strip() + #log.info("INFO: std_out: %s" % bytes.decode(std_out)) + #log.error("ERROR: std_err: %s" % bytes.decode(std_err)) + time.sleep(3) + log.info("\n") + + + + # TEST OPC UA WITHOUT ROOT CA + time.sleep(3) + log.info("\n") + srv_cmd = "python3 open62541Server.py " + connection_type + " " + connection_param + log.info("%s" % srv_cmd) + ser = subprocess.Popen(("python3 open62541Server.py %s %s %s" % (connection_type, connection_param, root_ca)), creationflags=CREATE_NEW_CONSOLE) + + log.info("Starting Client") + time.sleep(3) + log.info("\n") + output = subprocess.Popen(("python3 open62541Client.py opc.tcp://127.0.0.1:4840"),stdout=subprocess.PIPE).stdout + time.sleep(3) + log.info("\n") + + substr_found = 0 + for line in output: + log.info("%s", line) + str_res = line.find(str.encode("Connected!")) + if str_res != -1: + substr_found = 1 + + if substr_found == 1: + result_msg = "TEST(OPCUA, open62541_without_root_ca) PASS" + log.info(result_msg) + opcua_without_rootca = "PASS" + else: + result_msg = "TEST(OPCUA, open62541_without_root_ca) FAIL" + log.info(result_msg) + opcua_without_rootca = "FAIL" + + logFile.write(str.encode(result_msg)) + logFile.write(str.encode("\n")) + + output.close() + log.info("Stop server ...") + log.info("\n\n") + temp = subprocess.Popen("TASKKILL /F /PID {pid} /T".format(pid=ser.pid), stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + shell=True, + ) + #std_out, std_err = temp.communicate() + #std_out = std_out.strip() + #std_err = std_err.strip() + #log.info("INFO: std_out: %s" % bytes.decode(std_out)) + #log.error("ERROR: std_err: %s" % bytes.decode(std_err)) + + + logFile.close() + + + log.info("*************** RESULT ****************") + log.info("OPC UA WITH ROOT CA ------- %s" %opcua_with_rootca) + log.info("OPC UA WITHOUT ROOT CA ---- %s" %opcua_without_rootca) + log.info("***************************************") + return 0 + + +def printUsage(): + print('Invalid input argument') + print('Run as - test_opcua.py <jrcpv2|vcom> <ip_address|port_name> <root_ca>') + print('Example invocation - test_opcua.py jrcpv2 127.0.0.1:8050 ..\\credentials\\open62541_client_cert.der') + sys.exit() + + +if len(sys.argv) != 4: + printUsage() +else: + if doTest(sys.argv) != 0: + printUsage()
diff --git a/demos/se05x/CMakeLists.txt b/demos/se05x/CMakeLists.txt new file mode 100644 index 0000000..881beb0 --- /dev/null +++ b/demos/se05x/CMakeLists.txt
@@ -0,0 +1,128 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +IF(WithRTOS_Default) + ADD_SUBDIRECTORY(se05x_ConcurrentEcc) + ADD_SUBDIRECTORY(se05x_ConcurrentSymm) + + IF(NOT WithHost_Win10IoT) + ADD_SUBDIRECTORY(se05x_Minimal) + ENDIF() + + IF(WithHost_WithFileSystem) + ADD_SUBDIRECTORY(se05x_export) + ADD_SUBDIRECTORY(se05x_import) + IF(SSS_HAVE_HOSTCRYPTO_ANY) + IF(SSS_HAVE_SE05X_Auth_ECKey) + ADD_SUBDIRECTORY(se05x_ImportExternalObjectPrepare) + ENDIF() + ENDIF(SSS_HAVE_HOSTCRYPTO_ANY) + ENDIF() + + IF(NOT WithKSDK) + ADD_SUBDIRECTORY(se05x_Personalization) + IF(CMAKE_COMPILER_IS_GNUCC) + ADD_SUBDIRECTORY(se05x_MultiThread) + ENDIF() + ENDIF() + + IF(SSSFTR_SE05X_AuthSession AND SSS_HAVE_HOSTCRYPTO_ANY) + IF(SSS_HAVE_SE05X_Auth_None OR SSS_HAVE_SE05X_Auth_PlatfSCP03) + ADD_SUBDIRECTORY(se05x_Delete_and_test_provision) + ADD_SUBDIRECTORY(se05x_MandatePlatformSCP) + ELSE() + MESSAGE(STATUS "se05x_Delete_and_test_provision is not built because SE05X_Auth is '${SE05X_Auth}'.") + ENDIF() + ENDIF(SSSFTR_SE05X_AuthSession AND SSS_HAVE_HOSTCRYPTO_ANY) + + IF(SSS_HAVE_SE05X_Auth_PlatfSCP03) + ADD_SUBDIRECTORY(se05x_RotatePlatformSCP03Keys) + ENDIF() + + IF(SSS_HAVE_SE05X_VER_GTE_06_00) + ADD_SUBDIRECTORY(se05x_Perso_Delete_Mod_RSAKeyGen) + IF(WithHost_WithFileSystem) + IF(SSS_HAVE_HOSTCRYPTO_ANY) + IF(SSS_HAVE_SE05X_Auth_ECKey OR SSS_HAVE_SE05X_Auth_ECKey_PlatfSCP03) + ADD_SUBDIRECTORY(se05x_DesfireCRC) + ENDIF() + ENDIF(SSS_HAVE_HOSTCRYPTO_ANY) + ENDIF() + ENDIF() + + IF(SSSFTR_SE05X_AuthSession AND SSS_HAVE_HOSTCRYPTO_ANY) + IF(SSS_HAVE_SE05X_Auth_None OR SSS_HAVE_SE05X_Auth_PlatfSCP03) + ADD_SUBDIRECTORY(se05x_TransportLock) + ADD_SUBDIRECTORY(se05x_TransportUnLock) + ENDIF() + ENDIF(SSSFTR_SE05X_AuthSession AND SSS_HAVE_HOSTCRYPTO_ANY) + + IF(NOT WithHost_Win10IoT) + ADD_SUBDIRECTORY(ex_se05x_WiFiKDF) + ENDIF() + + ADD_SUBDIRECTORY(se05x_GetInfo) + ADD_SUBDIRECTORY(se05x_PCR) + ADD_SUBDIRECTORY(se05x_I2cMaster) + + IF(SSS_HAVE_SE05X_VER_GTE_06_00) + ADD_SUBDIRECTORY(se05x_ReadState) + ENDIF() + + IF(SSS_HAVE_ECC) + ADD_SUBDIRECTORY(se05x_policy) + ENDIF() + + IF(SSS_HAVE_HOSTCRYPTO_ANY) + ADD_SUBDIRECTORY(se05x_ReadWithAttestation) + ENDIF() + + IF(SSS_HAVE_SCP_None) + ADD_SUBDIRECTORY(se05x_GetAPDUBuffer) + ENDIF() + IF(SSS_HAVE_HOSTCRYPTO_ANY) + ADD_SUBDIRECTORY(se05x_TimeStamp) + ENDIF() + ADD_SUBDIRECTORY(se05x_InjectCertificate) + + IF(SSS_HAVE_SE05X_Auth_ECKey OR SSS_HAVE_SE05X_Auth_ECKey_PlatfSCP03) + ADD_SUBDIRECTORY(se05x_SetAppletFeatures) + # ADD_SUBDIRECTORY(se05x_DesfireCRC) + ENDIF() + + ADD_SUBDIRECTORY(se05x_InvokeGarbageCollection) +ENDIF() + +IF(WithRTOS_FreeRTOS) + ADD_SUBDIRECTORY(se05x_Minimal) + IF(WithKSDK) + ADD_SUBDIRECTORY(se05x_MultiThread) + ENDIF() +ENDIF() + +IF(WithHostCrypto_OPENSSL) + ADD_SUBDIRECTORY(certificate_demo) + ADD_SUBDIRECTORY(seTool) +ENDIF() + +IF(WithHostCrypto_MBEDTLS) + ADD_SUBDIRECTORY(se05x_GetCertificate) +ENDIF() + +IF(NXPProprietary) + IF(WithHostCrypto_MBEDCRYPTO) + IF(WithHost_lpcxpresso55s) + ADD_SUBDIRECTORY(tfm_example) + ENDIF() + IF(WithHost_lpcxpresso55s_ns) + ADD_SUBDIRECTORY(psa_nonsecure) + ENDIF() + ENDIF() +ENDIF() + +IF(WithRTOS_FreeRTOS AND WithmbedTLS_ALT_SSS) + ADD_SUBDIRECTORY(pkcs11) +ENDIF()
diff --git a/demos/se05x/certificate_demo/CMakeLists.txt b/demos/se05x/certificate_demo/CMakeLists.txt new file mode 100644 index 0000000..a2b0cb3 --- /dev/null +++ b/demos/se05x/certificate_demo/CMakeLists.txt
@@ -0,0 +1,29 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(generate_certificate) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +PROJECT(generate_certificate_key) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/certificate_demo/Readme.rst b/demos/se05x/certificate_demo/Readme.rst new file mode 100644 index 0000000..ffb4c63 --- /dev/null +++ b/demos/se05x/certificate_demo/Readme.rst
@@ -0,0 +1,23 @@ +.. + Copyright 2019 NXP + + +.. highlight:: shell + +.. _certificate-demo: + +========================================================== + Building a self-signed certificate +========================================================== + +This demo is to demonstrate how we can use provisioned keys to create a self-signed certificate to communicate with cloud platforms. In this example, we use two binaries, one to generate a keypair inside the secure element and another to use the generated keypair to create a self-signed certificate. + +.. note :: + We use OpenSSL in this example to create the certificate. + +How to use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1. Run the binary ``generate_certificate_key`` to generate an ECC-256 keypair inside the secure element. +#. Run the binary ``generate_certificate`` to create a self-signed certificate. This demo provisions the the generated certificate into the secure element. +#. You can read-out the certificate using SSS-APIs from keyId ``CERTIFICATE_KEY_ID + 1`` as defined in ``certificate.h`` file.
diff --git a/demos/se05x/certificate_demo/certificate.h b/demos/se05x/certificate_demo/certificate.h new file mode 100644 index 0000000..e2d3b6b --- /dev/null +++ b/demos/se05x/certificate_demo/certificate.h
@@ -0,0 +1,8 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_objid.h> + +/*Common KeyID for generating key pair*/ +#define CERTIFICATE_KEY_ID (EX_SSS_OBJID_DEMO_CLOUD_START + 1) \ No newline at end of file
diff --git a/demos/se05x/certificate_demo/generate_certificate.c b/demos/se05x/certificate_demo/generate_certificate.c new file mode 100644 index 0000000..a7097c6 --- /dev/null +++ b/demos/se05x/certificate_demo/generate_certificate.c
@@ -0,0 +1,204 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <openssl/asn1t.h> +#include <openssl/bio.h> +#include <openssl/evp.h> +#include <openssl/pem.h> +#include <openssl/x509.h> +#include <openssl/x509v3.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include "certificate.h" + +static ex_sss_boot_ctx_t gex_sss_gen_cert; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_gen_cert) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t obj; + + X509 *certificate = X509_new(); + + status = sss_key_object_init(&obj, &pCtx->ks); + if (status != kStatus_SSS_Success) { + LOG_E("sss_key_object_init Failed!!!"); + return status; + } + + if (!X509_set_version(certificate, 2)) { + return status; + } + + ASN1_INTEGER *serialNumber = ASN1_INTEGER_new(); + if (!ASN1_INTEGER_set(serialNumber, 1) || !X509_set_serialNumber(certificate, serialNumber)) { + return status; + } + + X509_NAME *subjectName = X509_NAME_new(); + if (!X509_NAME_add_entry_by_txt(subjectName, + "CN", + MBSTRING_ASC, + (const unsigned char *)"selfSignedCA", + -1 /* len */, + -1 /* loc */, + 0 /* set */) || + !X509_set_subject_name(certificate, subjectName)) { + return status; + } + + if (!X509_set_issuer_name(certificate, subjectName)) { + return status; + } + + ASN1_TIME *notBefore = ASN1_TIME_new(); + time_t activeDateTime = time(NULL); + if (!ASN1_TIME_set(notBefore, activeDateTime) || !X509_set_notBefore(certificate, notBefore)) { + return status; + } + + ASN1_TIME *notAfter = ASN1_TIME_new(); + time_t notAfterTime = time(NULL); + if (!ASN1_TIME_set(notAfter, notAfterTime * 2) || !X509_set_notAfter(certificate, notAfter)) { + return status; + } + + /*Generate a keypair*/ + uint8_t key[550]; + size_t keybytelen = sizeof(key); + size_t keybitlen = keybytelen * 8; + uint32_t keyId = CERTIFICATE_KEY_ID; + status = sss_key_object_get_handle(&obj, keyId); + status = sss_key_store_get_key(&pCtx->ks, &obj, key, &keybytelen, &keybitlen); + LOG_I("sss_key_store_get_key status %x", status); + if (status != kStatus_SSS_Success) + return status; + + status = kStatus_SSS_Fail; + BIO *bio = BIO_new_mem_buf(key, (int)sizeof(key)); + if (bio == NULL) { + return status; + } + + EVP_PKEY *pKey = d2i_PUBKEY_bio(bio, NULL); + if (pKey == NULL) { + return status; + } + /*Add public key*/ + + if (!X509_set_pubkey(certificate, pKey)) { + return status; + } + + X509V3_CTX x509v3_ctx = {0}; + + char *subjectAlternateName = "email:d:NXP-A71CH-D:377813426378607196897279"; + char *basicConstraints = "CA:TRUE"; + X509_EXTENSION *extension_SAN = X509V3_EXT_nconf_nid(NULL, &x509v3_ctx, NID_subject_alt_name, subjectAlternateName); + if (!X509_add_ext(certificate, extension_SAN, -1)) { + return status; + } + X509_EXTENSION *extension_BasicConstraints = + X509V3_EXT_nconf_nid(NULL, &x509v3_ctx, NID_basic_constraints, basicConstraints); + if (!X509_add_ext(certificate, extension_BasicConstraints, -1)) { + return status; + } + + int type = NID_ecdsa_with_SHA256; +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + X509_ALGOR *tbs_algo = certificate->cert_info->signature; + X509_ALGOR *algo = certificate->sig_alg; + X509_ALGOR_set0(algo, OBJ_nid2obj(type), V_ASN1_NULL, NULL); +#else + const X509_ALGOR *tmp_tbs_algo = X509_get0_tbs_sigalg((const X509 *)certificate); + X509_ALGOR *tbs_algo = (X509_ALGOR *)tmp_tbs_algo; +#endif + X509_ALGOR_set0(tbs_algo, OBJ_nid2obj(type), V_ASN1_NULL, NULL); + + /*Convert to DER format to sign*/ + int len = 0; + + uint8_t tbs_bytes[500]; + uint8_t *p_tbs_bytes = &tbs_bytes[0]; + +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + X509_CINF *cinf = certificate->cert_info; + len = i2d_X509_CINF(cinf, &p_tbs_bytes); +#else + len = i2d_re_X509_tbs(certificate, &p_tbs_bytes); + LOG_I("len = %d", len); +#endif + + /*Calculate digest for signing*/ + uint8_t digest[32] = {0}; + size_t digestLen = sizeof(digest); + sss_digest_t digestCtx; + status = sss_digest_context_init(&digestCtx, &pCtx->session, kAlgorithm_SSS_SHA256, kMode_SSS_Digest); + status = sss_digest_one_go(&digestCtx, &tbs_bytes[0], len, digest, &digestLen); + sss_digest_context_free(&digestCtx); + if (status != kStatus_SSS_Success) + return status; + + status = kStatus_SSS_Fail; + /*Sign digest*/ + sss_asymmetric_t asymmCtx; + uint8_t signature[256]; + uint8_t *p_signature = &signature[0]; + size_t signatureLen = sizeof(signature); + status = sss_asymmetric_context_init(&asymmCtx, &pCtx->session, &obj, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + status = sss_asymmetric_sign_digest(&asymmCtx, digest, digestLen, signature, &signatureLen); + if (status != kStatus_SSS_Success) + return status; + + /*Add signature to certificate structure*/ +#if (OPENSSL_VERSION_NUMBER < 0x10100000L) + ASN1_BIT_STRING *sig = certificate->signature; +#else + ASN1_BIT_STRING *sig; + const X509_ALGOR *tmp_algo = NULL; + X509_get0_signature((const ASN1_BIT_STRING **)&sig, &tmp_algo, (const X509 *)certificate); + X509_ALGOR *algo = (X509_ALGOR *)tmp_algo; + X509_ALGOR_set0(algo, OBJ_nid2obj(type), V_ASN1_NULL, NULL); +#endif + len = ASN1_BIT_STRING_set(sig, p_signature, signatureLen); + + unsigned char cert[2000]; + unsigned char *pCert = &cert[0]; + len = i2d_X509(certificate, NULL); + if (len == 0) { + LOG_I("i2d_X509 Failed"); + return kStatus_SSS_Fail; + } + len = i2d_X509(certificate, &pCert); + LOG_AU8_I(cert, len); + + sss_object_t cert_obj; + sss_key_part_t keyPart = kSSS_KeyPart_Default; + sss_cipher_type_t cipherType = kSSS_CipherType_Binary; + status = sss_key_object_init(&cert_obj, &pCtx->ks); + status = sss_key_object_allocate_handle(&cert_obj, keyId + 1, keyPart, cipherType, len, kKeyObject_Mode_Persistent); + status = sss_key_store_set_key(&pCtx->ks, &cert_obj, cert, len, len * 8, NULL, 0); + if (status != kStatus_SSS_Success) + LOG_E("Failed to inject generated certificate"); + else + LOG_I("Success"); + + return status; +}
diff --git a/demos/se05x/certificate_demo/generate_certificate_key.c b/demos/se05x/certificate_demo/generate_certificate_key.c new file mode 100644 index 0000000..be6f975 --- /dev/null +++ b/demos/se05x/certificate_demo/generate_certificate_key.c
@@ -0,0 +1,56 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> + +#include "certificate.h" + +static ex_sss_boot_ctx_t gex_sss_gen_cert; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_gen_cert) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +#define ECC_KEY_BIT_LEN 256 + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint32_t keyId = CERTIFICATE_KEY_ID; + size_t keyBitLen = ECC_KEY_BIT_LEN; + size_t keyLen = keyBitLen * 8; + sss_key_part_t keyPart = kSSS_KeyPart_Pair; + sss_cipher_type_t cipherType = kSSS_CipherType_EC_NIST_P; + sss_object_t obj = {0}; + + status = sss_key_object_init(&obj, &pCtx->ks); + if (status != kStatus_SSS_Success) { + LOG_E("sss_key_object_init Failed!!!"); + return status; + } + + status = sss_key_object_allocate_handle(&obj, keyId, keyPart, cipherType, keyLen, kKeyObject_Mode_Persistent); + if (status != kStatus_SSS_Success) { + LOG_E("Object allocate handle failed"); + return status; + } + status = sss_key_store_generate_key(&pCtx->ks, &obj, keyBitLen, NULL); + if (status != kStatus_SSS_Success) + LOG_E("Failed to inject key"); + else + LOG_I("Success"); + + return status; +}
diff --git a/demos/se05x/ex_se05x_WiFiKDF/CMakeLists.txt b/demos/se05x/ex_se05x_WiFiKDF/CMakeLists.txt new file mode 100644 index 0000000..6a5ceb2 --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/CMakeLists.txt
@@ -0,0 +1,29 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(ex_se05x_WiFiKDF_derive) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +CREATE_BINARY(${PROJECT_NAME}) + +PROJECT(ex_se05x_WiFiKDF_inject) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/ex_se05x_WiFiKDF/Readme.rst b/demos/se05x/ex_se05x_WiFiKDF/Readme.rst new file mode 100644 index 0000000..fa3506f --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/Readme.rst
@@ -0,0 +1,54 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-wifi-kdf: + +======================================================================= + SE05X WiFi KDF Example +======================================================================= + +This project is to demonstrate Password based KDF (PBKDF) operation using +SE05X. This operation is used in deriving Pre-Shared key (PSK) for WiFi ssid +using stored passwords. + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``ex_se05x_WiFiKDF_inject`` +- Project: ``ex_se05x_WiFiKDF_derive`` + + +Running the Example +======================================================================= + +If you have built a binary, first flash the ``ex_se05x_WiFiKDF_inject`` +binary on to the board and reset the board. Then flash ``ex_se05x_WiFiKDF_derive`` +binary and reset the board. + +If you have built an *exe* to be run from PC using VCOM, run as:: + + ex_se05x_WiFiKDF_inject.exe <PORT NAME> + ex_se05x_WiFiKDF_derive.exe -s <ssid_name> <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port and **<ssid_name>** is the +name of SSID for which you want to derive the PSK. + + +Console output +======================================================================= + +During injection, if everything is successful, the output will be similar to: + +.. literalinclude:: out_ex_se05x_WiFiKDF_inject.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!! + +While deriving the key, if everything is successful, the output will be similar to: + +.. literalinclude:: out_ex_se05x_WiFiKDF_derive.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF.h b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF.h new file mode 100644 index 0000000..6e682d6 --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF.h
@@ -0,0 +1,8 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_objid.h> + +/*Object ID where password is to be injected*/ +#define WIFI_OBJ_ID (EX_SSS_OBJID_DEMO_WIFI_START + 1)
diff --git a/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_derive.c b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_derive.c new file mode 100644 index 0000000..6ad43c1 --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_derive.c
@@ -0,0 +1,99 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> + +#include "ex_se05x_WiFiKDF.h" + +#define WIFI_DERIVED_KEY_SIZE 32 +#define WIFI_COUNT 4096 + +static ex_sss_boot_ctx_t gex_sss_wifi_kdf; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_wifi_kdf) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t sss_status = kStatus_SSS_Fail; + smStatus_t status; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + SE05x_Result_t pExists = 0; + uint8_t wifi_ssid[100] = "some-wifi-ssid"; + size_t ssid_size = 0; + uint8_t wifi_derivedKey[WIFI_DERIVED_KEY_SIZE] = {0}; + size_t wifi_derivedKeyLen = WIFI_DERIVED_KEY_SIZE; + size_t i; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + + ssid_size = strlen((const char *)wifi_ssid); + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-s") == 0) { + j++; + ssid_size = strlen(argv[j]); + if (ssid_size >= sizeof(wifi_ssid)) { + LOG_E("SSID Size too big. Exit!"); + break; + } + memcpy(wifi_ssid, argv[j], ssid_size); + break; + } + } + + status = Se05x_API_CheckObjectExists(&pSession->s_ctx, WIFI_OBJ_ID, &pExists); + + if (status == SM_OK && pExists != kSE05x_Result_SUCCESS) { + LOG_E("WiFi Object does not exist"); + LOG_E( + "Did you run 'ex_se05x_WiFiKDF_inject' before running this " + "example?"); + goto cleanup; + } + + LOG_I("Deriving PBKDF2 for wifi_ssid='%s', WIFI_COUNT='%d'", wifi_ssid, WIFI_COUNT); + status = Se05x_API_PBKDF2(&pSession->s_ctx, + WIFI_OBJ_ID, + wifi_ssid, + ssid_size, + WIFI_COUNT, + WIFI_DERIVED_KEY_SIZE, + wifi_derivedKey, + &wifi_derivedKeyLen); + if (status != SM_OK) { + LOG_E("Se05x_API_PBKDF2 Failed"); + goto cleanup; + } + LOG_AU8_I(wifi_derivedKey, wifi_derivedKeyLen); + + printf("\n# Data for /etc/wpa_supplicant/wpa_supplicant.conf"); + printf("\nnetwork={"); + printf("\n ssid=\""); + for (i = 0; i < ssid_size; i++) { + printf("%c", wifi_ssid[i]); + } + printf("\"\n psk="); + for (i = 0; i < wifi_derivedKeyLen; i++) { + printf("%x", wifi_derivedKey[i]); + } + printf("\n}"); + printf("\n"); + sss_status = kStatus_SSS_Success; + +cleanup: + LOG_I("Done"); + return sss_status; +}
diff --git a/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_inject.c b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_inject.c new file mode 100644 index 0000000..15f5dc1 --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/ex_se05x_WiFiKDF_inject.c
@@ -0,0 +1,62 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> + +#include "ex_se05x_WiFiKDF.h" + +#define WIFI_PASSWRD "some-wifi-password" + +static ex_sss_boot_ctx_t gex_sss_wifi_kdf; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_wifi_kdf) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t sss_status = kStatus_SSS_Fail; + smStatus_t status; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + SE05x_Result_t pExists = 0; + const uint8_t wifi_password[] = WIFI_PASSWRD; + + status = Se05x_API_CheckObjectExists(&pSession->s_ctx, WIFI_OBJ_ID, &pExists); + + if (status == SM_OK && pExists == kSE05x_Result_SUCCESS) { + status = Se05x_API_DeleteSecureObject(&pSession->s_ctx, WIFI_OBJ_ID); + if (status != SM_OK) { + LOG_W("Error, could not delete object. "); + goto cleanup; + } + } + LOG_I("Injecting wifi_password='%s'", wifi_password); + status = Se05x_API_WriteSymmKey(&pSession->s_ctx, + NULL, + SE05x_MaxAttemps_UNLIMITED, + WIFI_OBJ_ID, + SE05x_KeyID_KEK_NONE, + wifi_password, + sizeof(wifi_password) - 1, + kSE05x_INS_NA, + kSE05x_SymmKeyType_HMAC); + if (status != SM_OK) { + LOG_E("Se05x_API_WriteSymmKey Failed"); + goto cleanup; + } + sss_status = kStatus_SSS_Success; + +cleanup: + return sss_status; +}
diff --git a/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_derive.rst.txt b/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_derive.rst.txt new file mode 100644 index 0000000..4f91aac --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_derive.rst.txt
@@ -0,0 +1,20 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\ex_se05x_WiFiKDF_derive.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :Deriving PBKDF2 for wifi_ssid='some-wifi-ssid', WIFI_COUNT='4096' +App :INFO :wifi_derivedKey (Len=32) + C9 A6 69 F9 6D A2 74 A1 41 43 A9 ED D1 8F 68 1B + B1 3E 6B 8B F0 16 02 7A 7D 72 BF 0E 0C 53 CD 7C + +# Data for /etc/wpa_supplicant/wpa_supplicant.conf +network={ + ssid="some-wifi-ssid" + psk=c9a669f96da274a14143a9edd18f681bb13e6b8bf01627a7d72bfec53cd7c +} +App :INFO :Done +App :INFO :ex_sss Finished
diff --git a/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_inject.rst.txt b/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_inject.rst.txt new file mode 100644 index 0000000..9b0989f --- /dev/null +++ b/demos/se05x/ex_se05x_WiFiKDF/out_ex_se05x_WiFiKDF_inject.rst.txt
@@ -0,0 +1,10 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\ex_se05x_WiFiKDF_inject.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :Injecting wifi_password='some-wifi-password' +App :INFO :ex_sss Finished
diff --git a/demos/se05x/pkcs11/CMakeLists.txt b/demos/se05x/pkcs11/CMakeLists.txt new file mode 100644 index 0000000..4fd3978 --- /dev/null +++ b/demos/se05x/pkcs11/CMakeLists.txt
@@ -0,0 +1,58 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(pkcs11) + +FILE( + GLOB + files + ${CMAKE_SOURCE_DIR}/sss/plugin/pkcs11/*.c + #${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/pkcs11/portable/nxp/se_hostlib/*.c +) + +ADD_DEFINITIONS(-DPKCS11_SESSION_OPEN) + +ADD_LIBRARY(${PROJECT_NAME} ${files}) + +TARGET_INCLUDE_DIRECTORIES( + ${PROJECT_NAME} + #PUBLIC ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/include + #PUBLIC ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/include/private + PUBLIC ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/libraries/3rdparty/pkcs11 + PUBLIC ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/libraries/freertos_plus/standard/crypto/include + PUBLIC + ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/libraries/freertos_plus/standard/pkcs11/include + #PUBLIC ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/third_party/mcu_vendor/nxp/mflash/se_hostlib + ###################PRIVATE ${CMAKE_SOURCE_DIR}/demos/se05x/pkcs11_testbench + ###################PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/third_party/pkcs11 + ###################PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/tests/common/include + ###################PRIVATE ${CMAKE_SOURCE_DIR}/demos/aws/pkcs11testbench +) + +TARGET_INCLUDE_DIRECTORIES( + ${PROJECT_NAME} + PUBLIC ${DEMOS_KSDK_DIR}/common + PUBLIC ${CMAKE_SOURCE_DIR}/sss/plugin/pkcs11 +) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + freertos-kernel +) + +#TARGET_INCLUDE_DIRECTORIES( +# ${PROJECT_NAME} +# PRIVATE ${CMAKE_SOURCE_DIR}/demos/se05x/pkcs11_testbench +# PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/lib/third_party/pkcs11 +# PRIVATE ${CMAKE_SOURCE_DIR}/ext/amazon-freertos/tests/common/include +# PRIVATE ${CMAKE_SOURCE_DIR}/demos/aws/pkcs11testbench +#) + +#TARGET_LINK_LIBRARIES( +# ${PROJECT_NAME} +# unity +#)
diff --git a/demos/se05x/se05x_ConcurrentEcc/CMakeLists.txt b/demos/se05x/se05x_ConcurrentEcc/CMakeLists.txt new file mode 100644 index 0000000..5fda18a --- /dev/null +++ b/demos/se05x/se05x_ConcurrentEcc/CMakeLists.txt
@@ -0,0 +1,24 @@ +# +# Copyright 2019-2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ConcurrentEcc) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/se05x/se05x_ConcurrentEcc/readme.rst b/demos/se05x/se05x_ConcurrentEcc/readme.rst new file mode 100644 index 0000000..507d577 --- /dev/null +++ b/demos/se05x/se05x_ConcurrentEcc/readme.rst
@@ -0,0 +1,100 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: bat + +.. _se05x_ConcurrentEcc: + +======================================================================= + ECC Concurrent Example +======================================================================= + +This project demonstrates Elliptic Curve Cryptography sign and verify operations +using SSS APIs. On a multiprocess OS it can be run as multiple instances. +Before running an instance ensure the secure element is properly provisioned. +The utility :ref:`delete-and-test-provision` can be used to provision the authentication +objects used by this example. Invoke ``se05x_Delete_and_test_provision`` once during +the preparation of the demo. +The authentication objects are required for user sessions of +type UserID/AESKey/ECKey. + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- When used in combination with Access Manager compile for SMCOM = JRCPv1 + +Restrictions +======================================================================= + +- Each user session needs to have a different authentication object + + +Running the Example in combination with the Access Manager +======================================================================= + +For additional information on the AccessManager refer to :ref:`accessManager`. + +.. _se05x_ConcurrentEcc-usage: + +Usage +======================================================== + +The client process opens an authenticated user session (None/UserID/AESkey/ECkey) configured at build time. +The user session must be without platform SCP03. Platform SCP03 is handled by the Access Manager. + +The client process connects to the AccessManager over JRCPv1. + +Two concurrent client processes (establishing a user session) can connect to the AccessManager. + +This program takes 4 command line arguments: + +- authid: Authentication object id with which the session can be opened. It can be of type UserID/AESkey/ECkey (or authentication type 'None'). + In case the user session authentication is of type 'None' pass '0' as argument +- keyid: The id at which the functional Ec key pair will be stored, use a unique value per process. +- count (optional argument): Number of times the Ec Sign Verify operation will be repeated +- port: Connection port to AccessManager. e.g. 127.0.0.1:8040 + + +An example invocation of the program (passing the Authentication Id of a UserID object) is:: + + ./se05x_ConcurrentEcc -authid 0x7DA00001 -keyid 0xEF001234 -cnt 100 -port 127.0.0.1:8040 + + + +Concurrent Usage +========================================================== + +The following command invocations illustrate how two processes connect to the AccessManger using different +Authentication Id's and (functional) key Id's. + +The following Authentication Id's are provisioned in SE using the "delete & provision" utility + +====== ========== ========== +AuthId 1 2 +====== ========== ========== +UserID 0x7DA00001 0x7DA00011 +------ ---------- ---------- +AESkey 0x7DA00002 0x7DA00012 +------ ---------- ---------- +ECKey 0x7DA00003 0x7DA00013 +====== ========== ========== + + +KeyId can be anything above 0xEF000000, choose a different value for each client process. + +- Ec Sign / Verify Auth=ID_1 Auth=ID_2 + + - ./se05x_ConcurrentEcc -authid 0x7DA00001 -keyid 0xEF001234 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentEcc -authid 0x7DA00011 -keyid 0xEF001244 -cnt 100 -port 127.0.0.1:8040 + +- Ec Sign / Verify Auth=None Auth=EC + + - ./se05x_ConcurrentEcc -authid 0 -keyid 0xEF001236 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentEcc -authid 0x7DA00003 -keyid 0xEF001246 -cnt 100 -port 127.0.0.1:8040 + +- Ec Sign / Verify Auth=AES_1 Auth=AES_2 + + - ./se05x_ConcurrentEcc -authid 0x7DA00002 -keyid 0xEF001238 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentEcc -authid 0x7DA00012 -keyid 0xEF001248 -cnt 100 -port 127.0.0.1:8040 \ No newline at end of file
diff --git a/demos/se05x/se05x_ConcurrentEcc/se05x_ConcurrentEcc.c b/demos/se05x/se05x_ConcurrentEcc/se05x_ConcurrentEcc.c new file mode 100644 index 0000000..b62d5ab --- /dev/null +++ b/demos/se05x/se05x_ConcurrentEcc/se05x_ConcurrentEcc.c
@@ -0,0 +1,286 @@ +/* + * + * Copyright 2018, 2019, 2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define EC_KEY_BIT_LEN 256 + + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +uint32_t gAuthid = 0; +uint32_t gKeyid = 0; +char *gportName = 0; +uint32_t gLoopCount = 0; + + +/* clang-format off */ +const uint8_t keyPairData[] = { 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, + 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, + 0x01, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, + 0x03, 0x01, 0x07, 0x04, 0x6D, 0x30, 0x6B, 0x02, + 0x01, 0x01, 0x04, 0x20, 0x78, 0xE5, 0x20, 0x6A, + 0x08, 0xED, 0xD2, 0x52, 0x36, 0x33, 0x8A, 0x24, + 0x84, 0xE4, 0x2F, 0x1F, 0x7D, 0x1F, 0x6D, 0x94, + 0x37, 0xA9, 0x95, 0x86, 0xDA, 0xFC, 0xD2, 0x23, + 0x6F, 0xA2, 0x87, 0x35, 0xA1, 0x44, 0x03, 0x42, + 0x00, 0x04, 0xED, 0xA7, 0xE9, 0x0B, 0xF9, 0x20, + 0xCF, 0xFB, 0x9D, 0xF6, 0xDB, 0xCE, 0xF7, 0x20, + 0xE1, 0x23, 0x8B, 0x3C, 0xEE, 0x84, 0x86, 0xD2, + 0x50, 0xE4, 0xDF, 0x30, 0x11, 0x50, 0x1A, 0x15, + 0x08, 0xA6, 0x2E, 0xD7, 0x49, 0x52, 0x78, 0x63, + 0x6E, 0x61, 0xE8, 0x5F, 0xED, 0xB0, 0x6D, 0x87, + 0x92, 0x0A, 0x04, 0x19, 0x14, 0xFE, 0x76, 0x63, + 0x55, 0xDF, 0xBD, 0x68, 0x61, 0x59, 0x31, 0x8E, + 0x68, 0x7C }; + +const uint8_t extPubKeyData[] = { + 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, + 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, 0x08, 0x2A, + 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, + 0x42, 0x00, 0x04, 0xED, 0xA7, 0xE9, 0x0B, 0xF9, + 0x20, 0xCF, 0xFB, 0x9D, 0xF6, 0xDB, 0xCE, 0xF7, + 0x20, 0xE1, 0x23, 0x8B, 0x3C, 0xEE, 0x84, 0x86, + 0xD2, 0x50, 0xE4, 0xDF, 0x30, 0x11, 0x50, 0x1A, + 0x15, 0x08, 0xA6, 0x2E, 0xD7, 0x49, 0x52, 0x78, + 0x63, 0x6E, 0x61, 0xE8, 0x5F, 0xED, 0xB0, 0x6D, + 0x87, 0x92, 0x0A, 0x04, 0x19, 0x14, 0xFE, 0x76, + 0x63, 0x55, 0xDF, 0xBD, 0x68, 0x61, 0x59, 0x31, + 0x8E, 0x68, 0x7C +}; + +/* clang-format on */ + +static ex_sss_boot_ctx_t gex_ecc_cc_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +static sss_status_t parse_command_line_args(int argc, const char **argv); +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_ecc_cc_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_cc_inc.h> + +void usage() +{ + LOG_W( + "\n\ + usage:\n\ + se05x_ConcurrentEcc.exe \n\ + -authid <auth object id to open Session >\n\ + -keyid <Key id to store Key>\n\ + -cnt <no of times to loop the operation >\n \ + -port <port to be connected >\n"); + return; +} + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Success; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + uint8_t digest[32] = { 0 }; + size_t digestLen = sizeof(digest); + uint8_t idigestcnt = 0; + uint8_t signature[256] = { 0 }; + size_t signatureLen; + sss_object_t keyPair; + sss_object_t key_pub; + sss_asymmetric_t ctx_asymm = { 0 }; + sss_asymmetric_t ctx_verify = { 0 }; + uint32_t uLoopCnt = 0; + uint32_t uLooplimit = 200; + + LOG_I("\n\n"); + LOG_I("Running Elliptic Curve Cryptography Example se05x_ConcurrentEcc"); + LOG_I("\n\n"); + + /* Parse commandline arguments */ + status = parse_command_line_args(argc, argv); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + const char *portName = gportName; + + if (gLoopCount != 0) + { + /*Accept the loopcount from user*/ + uLooplimit = gLoopCount; + } + + /*Open session at given Auth ID*/ + status = ex_sss_boot_open_on_id(pCtx, portName, gAuthid); + + status = ex_sss_key_store_and_object_init((pCtx)); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_key_store_and_object_init Failed"); + goto exit; + } + + //keep the crypto operations in loop + for (uLoopCnt = 0; uLoopCnt < uLooplimit; uLoopCnt++) + { + LOG_I("LoopCount (loop = %d)\n", uLoopCnt); + /* Pre-requisite for Signing Part*/ + status = sss_key_object_init(&keyPair, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&keyPair, + gKeyid, + kSSS_KeyPart_Pair, + kSSS_CipherType_EC_NIST_P, + sizeof(keyPairData), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &keyPair, keyPairData, sizeof(keyPairData), EC_KEY_BIT_LEN, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + + status = sss_asymmetric_context_init(&ctx_asymm, &pCtx->session, &keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + signatureLen = sizeof(signature); + /* Do Signing */ + LOG_I("Do Signing"); + + /* Changing the digest each iteration */ + for (idigestcnt = 0; idigestcnt < 32; idigestcnt++) + { + digest[idigestcnt] = idigestcnt; + } + + LOG_MAU8_I("digest", digest, digestLen); + status = sss_asymmetric_sign_digest(&ctx_asymm, digest, digestLen, signature, &signatureLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_MAU8_I("signature", signature, signatureLen); + LOG_I("Signing Successful !!!"); + sss_asymmetric_context_free(&ctx_asymm); + + /* Pre requiste for Verifying Part*/ + status = sss_key_object_init(&key_pub, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&key_pub, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Public, + kSSS_CipherType_EC_NIST_P, + sizeof(extPubKeyData), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &key_pub, extPubKeyData, sizeof(extPubKeyData), EC_KEY_BIT_LEN, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = + sss_asymmetric_context_init(&ctx_verify, &pCtx->session, &key_pub, kAlgorithm_SSS_SHA256, kMode_SSS_Verify); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + + LOG_MAU8_I("digest", digest, digestLen); + LOG_MAU8_I("signature", signature, signatureLen); + status = sss_asymmetric_verify_digest(&ctx_verify, digest, digestLen, signature, signatureLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_I("Verification Successful !!!"); + sss_asymmetric_context_free(&ctx_asymm); + sss_asymmetric_context_free(&ctx_verify); + } + + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_ConcurrentEcc Example Success !!!..."); + } + else { + LOG_E("se05x_ConcurrentEcc Example Failed !!!..."); + } + if (ctx_asymm.session != NULL) + sss_asymmetric_context_free(&ctx_asymm); + if (ctx_verify.session != NULL) + sss_asymmetric_context_free(&ctx_verify); +exit: + return status; +} + + +static sss_status_t parse_command_line_args(int argc, const char **argv) +{ + bool authid_passed = false; + bool keyid_passed = false; + bool port_passed = false; + + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-authid") == 0) { + if (++j < argc) { + gAuthid = (uint32_t)strtoul(argv[j], NULL, 16); + authid_passed = true; + } + } + else if (strcmp(argv[j], "-keyid") == 0) { + if (++j < argc) { + gKeyid = (uint32_t)strtoul(argv[j], NULL, 16); + keyid_passed = true; + } + } + else if (strcmp(argv[j], "-cnt") == 0) { + if (++j < argc) { + gLoopCount = (uint32_t)strtoul(argv[j], NULL, 10); + } + } + else if (strcmp(argv[j], "-port") == 0) { + if (++j < argc) { + gportName = (char *)argv[j]; + port_passed = true; + } + } + } + if (!authid_passed) { + LOG_E("Auth key Id not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!keyid_passed) { + LOG_E("Object key Id not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!port_passed) { + LOG_E("Port not passed"); + usage(); + return kStatus_SSS_Fail; + } + + return kStatus_SSS_Success; +}
diff --git a/demos/se05x/se05x_ConcurrentSymm/CMakeLists.txt b/demos/se05x/se05x_ConcurrentSymm/CMakeLists.txt new file mode 100644 index 0000000..31a14ef --- /dev/null +++ b/demos/se05x/se05x_ConcurrentSymm/CMakeLists.txt
@@ -0,0 +1,24 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ConcurrentSymm) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/se05x/se05x_ConcurrentSymm/readme.rst b/demos/se05x/se05x_ConcurrentSymm/readme.rst new file mode 100644 index 0000000..be6eab3 --- /dev/null +++ b/demos/se05x/se05x_ConcurrentSymm/readme.rst
@@ -0,0 +1,104 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: bat + +.. _se05x_ConcurrentSymm: + +======================================================================= + Symmetric Multi Step Concurrent Example +======================================================================= + +This project demonstrates Symmetric Multi step operations. +using SSS APIs. On a multiprocess OS it can be run as multiple instances. +Before running an instance ensure the secure element.is properly provisioned. +The block cipher mode to apply (ECB or CBC) can be chosen by the user. +The utility :ref:`delete-and-test-provision` can be used to provision the authentication +objects used by this example. Invoke ``se05x_Delete_and_test_provision`` once during +the preparation of the demo. +The authentication objects are required for user sessions of +type UserID/AESKey/ECKey. + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- When used in combination with Access Manager compile for SMCOM = JRCPv1 + +Restrictions +======================================================================= + +- Each user session needs to have a different authentication object +- The same block cipher mode cannot be used for two concurrent client processes. + If one process uses ECB the other must use CBC. + This is a restriction from the SSS layer. + +Running the Example in combination with the Access Manager +======================================================================= + +For additional information on the AccessManager refer to :ref:`accessManager`. + +.. _se05x_ConcurrentSymm-usage: + +Usage +======================================================== + +The client process opens an authenticated user session (None/UserID/AESkey/ECkey) configured at build time. +The user session must be without platform SCP03. Platform SCP03 is handled by the Access Manager. + +The client process connects to the AccessManager over JRCPv1. + +Two concurrent client processes (establishing a user session) can connect to the AccessManager. + +This program takes 5 command line arguments: + +- authid: Authentication object id with which the session can be opened. It can be of type UserID/AESkey/ECkey (or authentication type 'None'). + In case the user session authentication is of type 'None' pass '0' as argument +- keyid: The id at which the symmetric key has to be stored, use a unique value per process. +- algo: Block cipher mode, use 1 for ECB and 2. for CBC +- count (optional argument): Number of times the crypto operation will be repeated. +- port: Connection port to AccessManager. e.g. 127.0.0.1:8040 + + +An example invocation of the program is:: + + ./se05x_ConcurrentSymm -authid 0x7DA00001 -keyid 0xEF002234 -algo 1 -cnt 100 -port 127.0.0.1:8040 + + + +Concurrent Usage +========================================================== + +The following command invocations illustrate how two processes connect to the AccessManger using different +Authentication Id's and (functional) key Id's. + +The following Authentication Id's are provisioned in SE using the "delete & provision" utility + +====== ========== ========== +AuthId 1 2 +====== ========== ========== +UserID 0x7DA00001 0x7DA00011 +------ ---------- ---------- +AESkey 0x7DA00002 0x7DA00012 +------ ---------- ---------- +ECKey 0x7DA00003 0x7DA00013 +====== ========== ========== + + +KeyId can be anything above 0xEF000000, choose a different value for each client process. + +- ECB Enc/Dec CBC Enc/Dec Auth=ID Auth=AES + + - ./se05x_ConcurrentSymm -authid 0x7DA00001 -keyid 0xEF002234 -algo 1 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentSymm -authid 0x7DA00002 -keyid 0xEF002235 -algo 2 -cnt 100 -port 127.0.0.1:8040 + +- ECB Enc/Dec CBC Enc/Dec Auth=ID_1 Auth=ID_2 + + - ./se05x_ConcurrentSymm -authid 0x7DA00001 -keyid 0xEF002236 -algo 1 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentSymm -authid 0x7DA00011 -keyid 0xEF002237 -algo 2 -cnt 100 -port 127.0.0.1:8040 + +- ECB Enc/Dec; CBC Enc/Dec Auth=EC Auth=AES + + - ./se05x_ConcurrentSymm -authid 0x7DA00003 -keyid 0xEF002238 -algo 1 -cnt 100 -port 127.0.0.1:8040 + - ./se05x_ConcurrentSymm -authid 0x7DA00002 -keyid 0xEF002239 -algo 2 -cnt 100 -port 127.0.0.1:8040 \ No newline at end of file
diff --git a/demos/se05x/se05x_ConcurrentSymm/se05x_ConcurrentSymm.c b/demos/se05x/se05x_ConcurrentSymm/se05x_ConcurrentSymm.c new file mode 100644 index 0000000..8540024 --- /dev/null +++ b/demos/se05x/se05x_ConcurrentSymm/se05x_ConcurrentSymm.c
@@ -0,0 +1,324 @@ +/* + * + * Copyright 2018, 2019, 2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <string.h> +#include <stdio.h> +#include <stdlib.h> +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define KEY_BIT_LEN 128 +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +uint32_t gAuthid = 0; +uint32_t gKeyid = 0; +uint8_t gAlgo = 0; +char *gportName = NULL; +uint32_t gLoopCount = 0; +static ex_sss_boot_ctx_t gex_sym_cc_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ +static sss_status_t parse_command_line_args(int argc, const char **argv); +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sym_cc_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_cc_inc.h> + +void usage() +{ + LOG_W( + "\n\ + usage:\n\ + se05x_ConcurrentSymm.exe \n\ + -authid <auth object id to open Session >\n\ + -keyid <Key id to store Key>\n\ + -algo <block cipher mode, choose 1 for ebc or 2 for cbc>\n\ + -cnt <no of times to loop the operation >\n \ + -port <port to connect to>\n"); + return; +} + + +#define CIPHER_BLOCK_SIZE_TEST 55 + + + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + + sss_status_t status = kStatus_SSS_Success; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + size_t i = 0; + size_t blocksize = CIPHER_BLOCK_SIZE_TEST; + sss_algorithm_t algorithm = kAlgorithm_None; + sss_mode_t mode; + /* clang-format off */ + uint8_t srcData[1024] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31, 0 }; + uint8_t encData[1100] = { 0, }; + size_t encDataLen = 0; + uint8_t keystring[KEY_BIT_LEN / 8] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ + uint8_t destData[1024] = {0,}; + uint8_t iv[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + size_t ivlen = sizeof(iv); + sss_key_part_t keyPart; + sss_cipher_type_t cipherType; + size_t keyByteLenMax = KEY_BIT_LEN/8; + sss_object_t key; + sss_symmetric_t ctx_symm_encrypt = { 0 }; + sss_symmetric_t ctx_symm_decrypt = { 0 }; + size_t tempOutbufLen = 0; + size_t tempdataLen = 0; + size_t output_offset = 0; + uint32_t uLoopCnt = 0; + uint32_t uLooplimit = 200; + + /* clang-format on */ + + keyPart = kSSS_KeyPart_Default; + cipherType = kSSS_CipherType_AES; + mode = kMode_SSS_Encrypt; + + + LOG_I("\n\n"); + LOG_I("Running AES symmetric Example se05x_ConcurrentSymm.c"); + LOG_I("\n\n"); + + /* Parse commandline arguments */ + status = parse_command_line_args(argc, argv); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + const char *portName = gportName; + algorithm = gAlgo; + + if (gLoopCount != 0) + { + /*Accept the loopcount from user*/ + uLooplimit = gLoopCount; + } + + + /*Open session at given Auth ID*/ + status = ex_sss_boot_open_on_id(pCtx, portName, gAuthid); + + status = ex_sss_key_store_and_object_init((pCtx)); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_key_store_and_object_init Failed"); + goto cleanup; + } + + + /* Pre-requisite for encryption Part*/ + //keep the crypto operations in loop + for (uLoopCnt = 0;uLoopCnt < uLooplimit; uLoopCnt++) + { + LOG_I("LoopCount (loop = %d)\n", uLoopCnt); + status = sss_key_object_init(&key, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = + sss_key_object_allocate_handle(&key, gKeyid, keyPart, cipherType, keyByteLenMax, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &key, keystring, sizeof(keystring), sizeof(keystring) * 8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* doc:end ex_sss_symmetric-allocate-key */ + + mode = kMode_SSS_Encrypt; + /* doc:start ex_sss_symmetric-encrypt */ + status = sss_symmetric_context_init(&ctx_symm_encrypt, &pCtx->session, &key, algorithm, mode); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + memset(iv, 0x00, 16); + LOG_I("Do Encryption"); + LOG_MAU8_D("iv", iv, ivlen); + LOG_MAU8_D("srcData", srcData, sizeof(srcData)); + /*Do Encryption*/ + + status = sss_cipher_init(&ctx_symm_encrypt, iv, ivlen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + for (i = 0; i < sizeof(srcData); i = i + blocksize) { + tempdataLen = (i + blocksize > sizeof(srcData)) ? (sizeof(srcData) - i) : blocksize; + tempOutbufLen = tempdataLen + 16; /* To handle any unprocessed data in cache */ + + status = sss_cipher_update(&ctx_symm_encrypt, (srcData + i), tempdataLen, (encData + output_offset), &tempOutbufLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + output_offset = output_offset + tempOutbufLen; + } + + tempOutbufLen = blocksize + 16; /* To handle any unprocessed data in cache */ + status = sss_cipher_finish(&ctx_symm_encrypt, NULL, 0, (encData + output_offset), &tempOutbufLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + encDataLen = output_offset + tempOutbufLen; + + sss_symmetric_context_free(&ctx_symm_encrypt); + + LOG_I("Encryption successful !!!"); + LOG_MAU8_I("encrypted data", encData, encDataLen); + + + mode = kMode_SSS_Decrypt; + + /* doc:start ex_sss_symmetric-decrypt */ + status = sss_symmetric_context_init(&ctx_symm_decrypt, &pCtx->session, &key, algorithm, mode); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_cipher_init(&ctx_symm_decrypt, iv, ivlen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Do Decryption"); + LOG_MAU8_D("iv", iv, ivlen); + + output_offset = 0; + for (i = 0; i < encDataLen; i = i + blocksize) { + tempdataLen = (i + blocksize > encDataLen) ? (encDataLen - i) : blocksize; + tempOutbufLen = tempdataLen + 16; /* To handle any unprocessed data in cache */ + + if (output_offset >= sizeof(destData)) { + status = kStatus_SSS_Fail; + goto cleanup; + } + status = sss_cipher_update(&ctx_symm_decrypt, (encData + i), tempdataLen, (destData + output_offset), &tempOutbufLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + output_offset = output_offset + tempOutbufLen; + } + + tempOutbufLen = blocksize + 16; /* To handle any unprocessed data in cache */ + if (output_offset > sizeof(destData)) { + LOG_E("Failure BufferOverflow"); + status = kStatus_SSS_Fail; + goto cleanup; + } + status = sss_cipher_finish(&ctx_symm_decrypt, NULL, 0, (destData + output_offset), &tempOutbufLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Encryption successful !!!"); + LOG_MAU8_I("decrypted data", destData,sizeof(destData)); + + if (memcmp(srcData, destData, sizeof(srcData)) == 0) { + status = kStatus_SSS_Success; + } + else { + status = kStatus_SSS_Fail; + } + + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Decryption successful !!!"); + output_offset = 0; + tempOutbufLen = 0; + tempdataLen = 0; + sss_symmetric_context_free(&ctx_symm_encrypt); + sss_symmetric_context_free(&ctx_symm_decrypt); + + } + + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_ConcurrentSymm Example Success !!!..."); + } + else { + LOG_E("se05x_ConcurrentSymm Example Failed !!!..."); + } + if (ctx_symm_encrypt.session != NULL) + sss_symmetric_context_free(&ctx_symm_encrypt); + if (ctx_symm_decrypt.session != NULL) + sss_symmetric_context_free(&ctx_symm_decrypt); + return status; +} + +static sss_status_t parse_command_line_args(int argc, const char **argv) +{ + bool authid_passed = false; + bool keyid_passed = false; + bool port_passed = false; + bool algo_passed = false; + + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-authid") == 0) { + if (++j < argc) { + gAuthid = (uint32_t)strtoul(argv[j], NULL, 16); + authid_passed = true; + } + } + else if (strcmp(argv[j], "-keyid") == 0) { + if (++j < argc) { + gKeyid = (uint32_t)strtoul(argv[j], NULL, 16); + keyid_passed = true; + } + } + else if (strcmp(argv[j], "-algo") == 0) { + if (++j < argc) { + gAlgo = (uint8_t)strtoul(argv[j], NULL, 10); + if (gAlgo == 1 || gAlgo == 2) { + algo_passed = true; + } + } + } + else if (strcmp(argv[j], "-cnt") == 0) { + if (++j < argc) { + gLoopCount = (uint32_t)strtoul(argv[j], NULL, 10); + } + } + else if (strcmp(argv[j], "-port") == 0) { + if (++j < argc) { + gportName = (char *)argv[j]; + port_passed = true; + } + } + } + if (!authid_passed) { + LOG_E("Auth key Id not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!algo_passed) { + LOG_E("Symm algorithm(ecb/cbc) not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!keyid_passed) { + LOG_E("Object key Id not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!port_passed) { + LOG_E("Port not passed"); + usage(); + return kStatus_SSS_Fail; + } + + return kStatus_SSS_Success; +}
diff --git a/demos/se05x/se05x_Delete_and_test_provision/CMakeLists.txt b/demos/se05x/se05x_Delete_and_test_provision/CMakeLists.txt new file mode 100644 index 0000000..19b05bb --- /dev/null +++ b/demos/se05x/se05x_Delete_and_test_provision/CMakeLists.txt
@@ -0,0 +1,53 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_Delete_and_test_provision) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/tst + ${SMCOM}-${SE05X_Auth} + ) +ENDIF() + +IF( + "${CMAKE_CXX_COMPILER_ID}" + MATCHES + "MSVC" +) + # 1900 matches VS2015 + IF( + ${MSVC_VERSION} + LESS_EQUAL + 1900 + ) + TARGET_COMPILE_OPTIONS(${PROJECT_NAME} PUBLIC /wd4127 # conditional expression is constant + ) + ENDIF() +ENDIF()
diff --git a/demos/se05x/se05x_Delete_and_test_provision/Readme.rst b/demos/se05x/se05x_Delete_and_test_provision/Readme.rst new file mode 100644 index 0000000..5f7add2 --- /dev/null +++ b/demos/se05x/se05x_Delete_and_test_provision/Readme.rst
@@ -0,0 +1,103 @@ +.. + Copyright 2020 NXP + + +.. highlight:: bat + +.. _delete-and-test-provision: + +======================================================================= + Delete and Test Provision +======================================================================= + +'Delete and Test Provision' is a utility that deletes a subset of the crypto objects stored on the secure element. +Next it provisions different types of key objects (as documented in the table below). +These key objects enable various use cases with the secure element. +As an example: the authentication objects for session based authentication (UserID/AESkey/ECKey) +are provisioned through this utility. + +To enable concurrent (up to the maximum of two) authenticated user sessions, two authentication objects of +each type (UserID/AESkey/ECKey) are provisioned. + +.. note:: Authentication objects - of the same object type - are provisioned on Ids with an offset of +0x10. + +.. warning:: This utility provisions the same value for both authentication object type instances. + In a product deployment different + values must be used, do not re-use any of the values provisioned by this test utility in a + product deployment. + + +Object IDs provisioned +======================================================================= + +=========== ============= ========================================================================== +Object ID Object Type Usage +=========== ============= ========================================================================== +0x7DA00001 User ID Allows the user to Open User ID Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7DA00002 Symm Key Allows the user to Open AES Key Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7DA00003 EC Key Allows the user to Open EC Key Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7DA00011 User ID Allows the user to Open additional User ID Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7DA00012 Symm Key Allows the user to Open additional AES Key Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7DA00013 EC Key Allows the user to Open additional EC Key Auth Session to SE. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0200 Symm Key Allows the user to switch transport LockState of the SE. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0201 EC Key Provisions ECKA pair at SE for EC key Session Authentication. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0202 EC Key Provisions ECKA pair at SE for EC key Session Authentication. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0203 EC Key Provisions ECKA pair at SE for EC key Session Authentication. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0204 EC Key Used for applet personalization. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0205 User ID Allows the user to delete all objects. Except those provisioned by NXP. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0206 Binary Holds the device unique ID. +----------- ------------- -------------------------------------------------------------------------- +0x7FFF0207 User ID Allows the user to make platform SCP mandatory or not. +=========== ============= ========================================================================== + +.. warning:: Some of the object Ids here are provisioned with same values. This is for + test, example and demo purpose only. + + +Authentication Keys +======================================================================= + +.. warning:: These values are just for demonstration. The user **MUST** + modify these values in the secure element and the application for real world + use cases. + +**User ID** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_auth.h + :language: c + :start-after: /* doc:start:auth-key-user-id */ + :end-before: /* doc:end:auth-key-user-id */ + +**Applet SCP** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_auth.h + :language: c + :start-after: /* doc:start:auth-key-applet-scp */ + :end-before: /* doc:end:auth-key-applet-scp */ + +**EC Key** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_auth.h + :language: c + :start-after: /* doc:start:auth-key-fast-scp-ecdsa */ + :end-before: /* doc:end:auth-key-fast-scp-ecdsa */ + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- ``SE05X_Auth=None`` +- Project: ``se05x_Delete_and_test_provision`` \ No newline at end of file
diff --git a/demos/se05x/se05x_Delete_and_test_provision/se05x_Delete_and_test_provision.c b/demos/se05x/se05x_Delete_and_test_provision/se05x_Delete_and_test_provision.c new file mode 100644 index 0000000..ab37d39 --- /dev/null +++ b/demos/se05x/se05x_Delete_and_test_provision/se05x_Delete_and_test_provision.c
@@ -0,0 +1,454 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ +/* Only for quick testing.... Not for production use ................. */ +/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ + +/* TO BE Run only under default session */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <sm_types.h> +#include <string.h> + +#include "ex_sss_auth.h" +#include "smCom.h" + +static void ReInitializeTestSample(ex_sss_boot_ctx_t *pCtx, SE05x_Result_t production_uid_present); + +/* clang-format off */ +#define DELETE_ALL_UserID_VALUE \ + { \ + 'E', 'R', 'A', 'S', 'E', 'R' \ + } + +#define MandateSCP_UserID_VALUE \ + { \ + 'N', 'E', 'E', 'D', 'S', 'C', 'P' \ + } + +#define TEST_UID 0x04, 0x00, 0x50, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA + +#define kSE05x_AppletResID_0x7FFF0203 0x7FFF0203 + +/* clang-format ON */ + +static ex_sss_boot_ctx_t gex_sss_delete_all_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_delete_all_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pSession = + (sss_se05x_session_t *)&pCtx->session; + SE05x_Result_t production_uid_present = kSE05x_Result_NA; + smStatus_t sw_status; + + LOG_E("# se05x_Delete_and_test_provision !!! Only for testing. NOT FOR PRODUCTION USE!!!!"); + + sw_status = Se05x_API_CheckObjectExists( + &pSession->s_ctx, kSE05x_AppletResID_UNIQUE_ID, &production_uid_present); + if (SM_OK == sw_status && production_uid_present == kSE05x_Result_SUCCESS) { + uint8_t uid[SE050_MODULE_UNIQUE_ID_LEN] = { 0 }; + uint8_t const_uid[SE050_MODULE_UNIQUE_ID_LEN] = { TEST_UID }; + size_t uidLen = sizeof(uid); + sw_status = Se05x_API_ReadObject(&pSession->s_ctx, + kSE05x_AppletResID_UNIQUE_ID, + 0, + (uint16_t)uidLen, + uid, + &uidLen); + if (SM_OK == sw_status && 0 == memcmp(const_uid, uid, sizeof(const_uid))) { + production_uid_present = kSE05x_Result_FAILURE; + } + } + else + { + const uint8_t const_uid[SE050_MODULE_UNIQUE_ID_LEN] = { TEST_UID }; + size_t uidLen = sizeof(const_uid); + LOG_W("kSE05x_AppletResID_UNIQUE_ID Missing. Injecting Dummy KEY!."); + sw_status = Se05x_API_WriteBinary(&pSession->s_ctx, + NULL, + kSE05x_AppletResID_UNIQUE_ID, + 0, + (uint16_t)uidLen, + const_uid, + uidLen); + LOG_X16_I(sw_status); + production_uid_present = kSE05x_Result_FAILURE; + } + + sw_status = Se05x_API_DeleteAll_Iterative(&pSession->s_ctx); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_DeleteAll"); + goto cleanup; + } + + ReInitializeTestSample(pCtx, production_uid_present); + + if (sw_status == SW_OK) + status = kStatus_SSS_Success; + +cleanup: + return status; +} + +#define DO_SMCOM_SEND(CONN_CTX, CMD_APDU, RSP_BUFFER) \ + { \ + rxLen = sizeof((RSP_BUFFER)); \ + status = smCom_TransceiveRaw(CONN_CTX, \ + (uint8_t *)(CMD_APDU), \ + (uint16_t)sizeof((CMD_APDU)), \ + RSP_BUFFER, \ + &rxLen); \ + if (status == SM_OK) { \ + if (( rxLen == 2) \ + && (RSP_BUFFER)[0] == 0x90 \ + && (RSP_BUFFER)[1] == 0x00) { \ + LOG_I(#CMD_APDU " Written"); \ + } else { \ + LOG_W(#CMD_APDU " Failed"); \ + } \ + } \ + else { \ + LOG_W(#CMD_APDU " Failed"); \ + } \ + } + +static void ReInitializeTestSample(ex_sss_boot_ctx_t *pCtx, SE05x_Result_t production_uid_present) +{ + uint8_t responseBuffer[10]; + U32 rxLen = sizeof(responseBuffer); + smStatus_t status; + SE05x_Result_t objExists = 0; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + Se05xSession_t *pSe05xSession = &pSession->s_ctx; + uint8_t hasSession_orig = pSe05xSession->hasSession; + void* conn_ctx = pSession->s_ctx.conn_ctx; + + // Transport Unlock + /* clang-format off */ + const uint8_t cmd_transport_unlock[] = { + 0x80, 0x41, 0x03, 0x00, 0x37, 0x11, 0x09, 0x08, 0x7F, 0xFF, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, + 0x12, 0x02, 0x00, 0x0A, 0x41, 0x04, 0x7F, 0xFF, 0x02, 0x00, 0x43, 0x20, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x40, 0x41, 0x42, 0x43, + 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F }; + + + //// Unique ID + //const uint8_t cmd_uid[] = { + // 0x80, 0x01, 0x06, 0x00, 0x2D, 0x11, 0x09, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, + // 0x41, 0x04, 0x7F, 0xFF, 0x02, 0x06, 0x42, 0x02, 0x00, 0x00, 0x43, 0x02, 0x00, 0x12, 0x44, 0x12, + // TEST_UID }; + + const uint8_t ECKey_SE_PublicEcdsakey[] = { + 0x04, 0x3C, 0x9E, 0x47, 0xED, 0xF0, 0x51, 0xA3, \ + 0x58, 0x9F, 0x67, 0x30, 0x2D, 0x22, 0x56, 0x7C, \ + 0x2E, 0x17, 0x22, 0x9E, 0x88, 0x83, 0x33, 0x8E, \ + 0xC3, 0xB7, 0xD5, 0x27, 0xF9, 0xEE, 0x71, 0xD0, \ + 0xA8, 0x1A, 0xAE, 0x7F, 0xE2, 0x1C, 0xAA, 0x66, \ + 0x77, 0x78, 0x3A, 0xA8, 0x8D, 0xA6, 0xD6, 0xA8, \ + 0xAD, 0x5E, 0xC5, 0x3B, 0x10, 0xBC, 0x0B, 0x11, \ + 0x09, 0x44, 0x82, 0xF0, 0x4D, 0x24, 0xB5, 0xBE, \ + 0xC4 }; + +#if SSSFTR_SE05X_ECC + status = Se05x_API_CreateCurve_prime256v1(pSe05xSession, kSE05x_ECCurve_NIST_P256); + LOG_I("Se05x_API_CreateCurve_prime256v1 status = %04X", status); +#endif + + /* clang-format on */ + + const uint8_t userid_value[] = EX_SSS_AUTH_SE05X_UserID_VALUE; + const uint8_t userid_value_factoryreset[] = DELETE_ALL_UserID_VALUE; + const uint8_t userid_value_mandatescp[] = MandateSCP_UserID_VALUE; + const uint8_t aes_value[] = EX_SSS_AUTH_SE05X_APPLETSCP_VALUE; + + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_FACTORY_RESET, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_FACTORY_RESET Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteUserID(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kSE05x_AppletResID_FACTORY_RESET, + userid_value_factoryreset, + sizeof(userid_value_factoryreset), + kSE05x_AttestationType_AUTH); + LOG_I("kSE05x_AppletResID_FACTORY_RESET status = %04X", status); + } + + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_PLATFORM_SCP, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_PLATFORM_SCP Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteUserID(pSe05xSession, + NULL, + SE05x_MaxAttemps_NA, + kSE05x_AppletResID_PLATFORM_SCP, + userid_value_mandatescp, + sizeof(userid_value_mandatescp), + kSE05x_AttestationType_AUTH); + LOG_I("kSE05x_AppletResID_PLATFORM_SCP status = %04X", status); + } + + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_ObjID_UserID_Auth, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_ObjID_UserID_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteUserID(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kEX_SSS_ObjID_UserID_Auth, + userid_value, + sizeof(userid_value), + kSE05x_AttestationType_AUTH); + LOG_I("kEX_SSS_ObjID_UserID_Auth status = %04X", status); + } + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_ObjID_UserID_Auth + 0x10, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_ObjID_UserID_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteUserID(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kEX_SSS_ObjID_UserID_Auth + 0x10, + userid_value, + sizeof(userid_value), + kSE05x_AttestationType_AUTH); + LOG_I("kEX_SSS_ObjID_UserID_Auth + 0x10 status = %04X", status); + } + + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_ObjID_APPLETSCP03_Auth, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_ObjID_APPLETSCP03_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteSymmKey(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kEX_SSS_ObjID_APPLETSCP03_Auth, + SE05x_KeyID_KEK_NONE, + aes_value, + sizeof(aes_value), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_SymmKeyType_AES); + LOG_I("kEX_SSS_ObjID_APPLETSCP03_Auth status = %04X", status); + } + + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_ObjID_APPLETSCP03_Auth + 0x10, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_ObjID_APPLETSCP03_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteSymmKey(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kEX_SSS_ObjID_APPLETSCP03_Auth + 0x10, + SE05x_KeyID_KEK_NONE, + aes_value, + sizeof(aes_value), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_SymmKeyType_AES); + LOG_I("kEX_SSS_ObjID_APPLETSCP03_Auth + 0x10 status = %04X", status); + } + /* Store FAST SCP Auth ECDSA Pubkey to SE */ + + size_t publicKeyLen = sizeof(ECKey_SE_PublicEcdsakey); + uint16_t attempt = SE05x_MaxAttemps_UNLIMITED; + + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_objID_ECKEY_Auth, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_objID_ECKEY_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kEX_SSS_objID_ECKEY_Auth, + kSE05x_ECCurve_NIST_P256, + NULL, + 0, + ECKey_SE_PublicEcdsakey, + publicKeyLen, + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Public); + LOG_I("kSE05x_ECCurve_NIST_P256 status = %04X", status); + } + status = Se05x_API_CheckObjectExists(pSe05xSession, kEX_SSS_objID_ECKEY_Auth + 0x10, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kEX_SSS_objID_ECKEY_Auth Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) { + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kEX_SSS_objID_ECKEY_Auth + 0x10, + kSE05x_ECCurve_NIST_P256, + NULL, + 0, + ECKey_SE_PublicEcdsakey, + publicKeyLen, + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Public); + LOG_I("kSE05x_ECCurve_NIST_P256 + 0x10 status = %04X", status); + } + /* Store FAST SCP Auth ECKA keypair1 to SE */ + /* clang-format off */ + const uint8_t ECKey_SE_ECKAPk_key1[] = { + 0x53, 0xD3, 0xB8, 0x41, 0x9C, 0x81, 0xE8, 0xAF, 0x21, 0xF4, 0x33, 0xF9, + 0x7D, 0xFF, 0xE1, 0x2D, 0x5C, 0xC1, 0xF1, 0x69, 0xC4, 0x71, 0x40, 0x7E, 0x52, 0x56, 0x13, 0xFD, + 0x38, 0xEE, 0xDF, 0x3A }; + + const uint8_t ECKey_SE_ECKAPb_key1[] = { + 0x04, 0x3E, 0x50, 0xEB, 0x06, 0x07, 0x43, 0x23, 0xB6, 0x6A, + 0x94, 0x00, 0x65, 0x98, 0x1E, 0xF9, 0x49, 0x7E, 0x88, 0x20, 0x33, 0x9F, 0x97, 0x84, 0x77, 0x00, + 0xA1, 0x25, 0xEB, 0x65, 0x10, 0x42, 0x51, 0x70, 0x2E, 0x97, 0x1E, 0x12, 0x84, 0xBE, 0x12, 0x1D, + 0xBD, 0x60, 0x60, 0x00, 0x20, 0xB3, 0x1E, 0xB3, 0x24, 0x94, 0xAB, 0xFB, 0xB9, 0x46, 0x60, 0x61, + 0xA4, 0x9E, 0x07, 0xA6, 0x20, 0x30, 0xB6 }; + + + const uint8_t ECKey_SE_ECKAPk_key2[] = { + 0x09, 0x35, 0x64, 0x55, 0xA3, 0x21, 0x5B, 0x23, 0x67, 0xA7, 0xDC, 0x74, + 0x7D, 0xAA, 0xC0, 0x28, 0x07, 0xD6, 0xE6, 0x05, 0x78, 0xB6, 0x85, 0x51, 0x6F, 0xB9, 0xB0, 0xD7, + 0xE1, 0x6A, 0x48, 0x5A, }; + + const uint8_t ECKey_SE_ECKAPb_key2[] = { + 0x04, 0x4F, 0x86, 0x68, 0x71, 0x35, 0x7F, 0x9A, 0xCA, 0xA9, + 0x55, 0x4E, 0x1C, 0xA0, 0xA5, 0x8A, 0x39, 0x82, 0xA2, 0x02, 0x6C, 0xBC, 0xBB, 0x58, 0xD0, 0x4F, + 0x51, 0x61, 0x63, 0x4D, 0x21, 0xCE, 0xF7, 0x22, 0x68, 0xE2, 0xF4, 0xF0, 0x9C, 0x62, 0x5F, 0x54, + 0xE5, 0x64, 0x16, 0x23, 0xA4, 0xCD, 0xC9, 0xE9, 0x86, 0xAD, 0x8B, 0xFF, 0xBB, 0x8B, 0xE6, 0xF0, + 0x93, 0xE8, 0x15, 0x12, 0x16, 0x6B, 0x88 }; + + const uint8_t ECKey_SE_ECKAPk_key3[] = { + 0x09, 0x35, 0x64, 0x55, 0xA3, 0x21, 0x5B, 0x23, 0x67, 0xA7, 0xDC, 0x74, + 0x7D, 0xAA, 0xC0, 0x28, 0x07, 0xD6, 0xE6, 0x05, 0x78, 0xB6, 0x85, 0x51, 0x6F, 0xB9, 0xB0, 0xD7, + 0xE1, 0x6A, 0x48, 0x5A, }; + + const uint8_t ECKey_SE_ECKAPb_key3[] = { + 0x04, 0x4F, 0x86, 0x68, 0x71, 0x35, 0x7F, 0x9A, 0xCA, 0xA9, + 0x55, 0x4E, 0x1C, 0xA0, 0xA5, 0x8A, 0x39, 0x82, 0xA2, 0x02, 0x6C, 0xBC, 0xBB, 0x58, 0xD0, 0x4F, + 0x51, 0x61, 0x63, 0x4D, 0x21, 0xCE, 0xF7, 0x22, 0x68, 0xE2, 0xF4, 0xF0, 0x9C, 0x62, 0x5F, 0x54, + 0xE5, 0x64, 0x16, 0x23, 0xA4, 0xCD, 0xC9, 0xE9, 0x86, 0xAD, 0x8B, 0xFF, 0xBB, 0x8B, 0xE6, 0xF0, + 0x93, 0xE8, 0x15, 0x12, 0x16, 0x6B, 0x88 }; + + /* clang-format on */ + + if (kSE05x_Result_SUCCESS == production_uid_present) { + LOG_I("Production UID Found... skipping few steps"); + } + else { + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_FEATURE, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_FEATURE Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) + { + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kSE05x_AppletResID_FEATURE, + kSE05x_ECCurve_NIST_P256, + NULL, + 0, + ECKey_SE_PublicEcdsakey, + sizeof(ECKey_SE_PublicEcdsakey), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Public); + LOG_I("kSE05x_ECCurve_NIST_P256 status = %04X", status); + } + + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_KP_ECKEY_USER, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_KP_ECKEY_USER Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) + { + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kSE05x_AppletResID_KP_ECKEY_USER, + kSE05x_ECCurve_NIST_P256, + ECKey_SE_ECKAPk_key1, + sizeof(ECKey_SE_ECKAPk_key1), + ECKey_SE_ECKAPb_key1, + sizeof(ECKey_SE_ECKAPb_key1), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Pair); + LOG_I("kSE05x_AppletResID_KP_ECKEY_USER status = %04X", status); + } + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_KP_ECKEY_IMPORT, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_KP_ECKEY_IMPORT Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) + { + /* Store FAST SCP Auth ECKA keypair2 to SE */ + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kSE05x_AppletResID_KP_ECKEY_IMPORT, + kSE05x_ECCurve_NIST_P256, + ECKey_SE_ECKAPk_key2, + sizeof(ECKey_SE_ECKAPk_key2), + ECKey_SE_ECKAPb_key2, + sizeof(ECKey_SE_ECKAPb_key2), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Pair); + LOG_I("kSE05x_AppletResID_KP_ECKEY_IMPORT status = %04X", status); + } + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_0x7FFF0203, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) + { + /* Store FAST SCP Auth ECKA keypair3 to SE */ + status = Se05x_API_WriteECKey(pSe05xSession, + NULL, + attempt, + kSE05x_AppletResID_0x7FFF0203, + kSE05x_ECCurve_NIST_P256, + ECKey_SE_ECKAPk_key3, + sizeof(ECKey_SE_ECKAPk_key3), + ECKey_SE_ECKAPb_key3, + sizeof(ECKey_SE_ECKAPb_key3), + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_KeyPart_Pair); + LOG_I("kSE05x_AppletResID_0x7FFF0203 status = %04X", status); + } + } + + if (kSE05x_Result_SUCCESS == production_uid_present) { + LOG_I("Production UID Found... skipping few steps"); + } + else { + status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_TRANSPORT, &objExists); + if (status == SM_OK && objExists == kSE05x_Result_SUCCESS) { + LOG_W("Transport Object already exists"); + } + else if (status == SM_OK && objExists == kSE05x_Result_FAILURE) + { + DO_SMCOM_SEND(conn_ctx, cmd_transport_unlock, responseBuffer); + } + } + pSe05xSession->hasSession = hasSession_orig; +}
diff --git a/demos/se05x/se05x_DesfireCRC/CMakeLists.txt b/demos/se05x/se05x_DesfireCRC/CMakeLists.txt new file mode 100644 index 0000000..31e36c1 --- /dev/null +++ b/demos/se05x/se05x_DesfireCRC/CMakeLists.txt
@@ -0,0 +1,22 @@ +PROJECT(se05x_DesfireCRC) + +FILE( + GLOB + files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +EXPOSE_SE05X_AUTH_STRATEGY()
diff --git a/demos/se05x/se05x_DesfireCRC/Readme.rst b/demos/se05x/se05x_DesfireCRC/Readme.rst new file mode 100644 index 0000000..29e7fd4 --- /dev/null +++ b/demos/se05x/se05x_DesfireCRC/Readme.rst
@@ -0,0 +1,76 @@ +.. + Copyright 2020 NXP + + + +.. highlight::shell + +.. _desfireCRC: + +========================================================== +Test non deletion of desfire CRC module without Features +========================================================== + +This tool is used to verify that desfire CRC module cannot be deleted without auth with FEATURE ID +The tool should be compiled with ECKey encryption, and optionally PlatfSCP03 encryption also. +You would need to provide a command line parameter for ECKey key to be used, and an environment variable for your +own Platform SCP03 keys, if required. + + +.. _configure-eckey-file: + +Configuring ECKey key for command line +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example takes as a command-line input, the filename in which ECDSA key is stored. +The key should be stored in *.der* (binary) format only. If the available key is in *.pem* format, +it can be converted into binary format using OpenSSL command-line utility. Refer to `OpenSSL Commands +<https://wiki.openssl.org/index.php/Command_Line_Elliptic_Curve_Operations#EC_Private_Key_File_Formats/>`_ +for more information on how to convert *.pem* formatted file to *.der* formatted file. + + +.. _configure-env-for-platfscp: + +Configuring Environment for PlatfSCP03 Keys +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**If you do not wish to use Platform SCP03 encryption, skip to the next step**. + +To use your own platform SCP03 keys, refer to :numref:`platfscp-file` :ref:`platfscp-file` +on details on setting up your environment. + + +Using with PC as host +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1) Flash the VCOM binary present in :file:`binaries` directory on to the target board. +#) Note the VCOM *COMPORT* from device manager. +#) Build the project ``se05x_setAppletFearures``. Configure the tool with ``SE050_A``, ``SE050_B`` or ``SE050_C``, + to enable the applet specific features. +#) Run the executable for desired variant as:: + + cd tools + set EX_SSS_BOOT_SCP03_PATH_ENV=\path\to\platfscp03\keys + desfire_CRC.exe -file <filename> <COMPORT> + + Where ``EX_SSS_BOOT_SCP03_PATH_ENV`` is set to the path of file containing Platform SCP03 keys as described in :ref:`configure-env-for-platfscp`. + + *COMPORT* is the port obtained from step 2. + + *filename* is the path to file containing ECDSA keypair provisioned at **RESERVED_ID_FEATURE** in binary format as described in :ref:`configure-eckey-file` + + +Using with iMX-6 as host +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1) Build the project ``se05x_setAppletFearures``. Configure the tool with ``SE050_A``, ``SE050_B`` or ``SE050_C``, + to enable the applet specific features. +#) Run the executable for desired variant as:: + + cd tools + export EX_SSS_BOOT_SCP03_PATH_ENV=\path\to\platfscp03\keys + ./desfire_CRC -file <filename> + + Where ``EX_SSS_BOOT_SCP03_PATH_ENV`` is set to the path of file containing Platform SCP03 keys as described in :ref:`configure-env-for-platfscp`. + + *filename* is the path to file containing ECDSA keypair provisioned at **RESERVED_ID_FEATURE** in binary format as described in :ref:`configure-eckey-file`
diff --git a/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.c b/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.c new file mode 100644 index 0000000..d090073 --- /dev/null +++ b/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.c
@@ -0,0 +1,265 @@ +/* +* +* Copyright 2019,2020 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include "se05x_DesfireCRC.h" + +#include <ex_sss_boot.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <nxEnsure.h> + +#include "smCom.h" + +static ex_sss_boot_ctx_t gex_sss_features_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_features_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status; + sss_object_t desfire_object = {0}; + uint32_t desfire_object_keyid = 0x7FFF020B; + + status = sss_key_object_init(&desfire_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_object_get_handle(&desfire_object, desfire_object_keyid); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &desfire_object); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Fail); + + /** Close session and Open session with feature ID */ + sss_session_close(&pCtx->session); + status = session_open_with_feature_id(pCtx); + if (status != kStatus_SSS_Success) { + goto cleanup; + } + + status = sss_key_object_init(&desfire_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_object_get_handle(&desfire_object, desfire_object_keyid); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &desfire_object); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_DesfireCRC Example Success !!!..."); + } + else { + LOG_E("se05x_DesfireCRC Example Failed !!!..."); + } + return status; +} + +sss_status_t session_open_with_feature_id(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; +#if (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) + SE05x_Connect_Ctx_t *pchannlCtxt = &pCtx->se05x_open_ctx; + pchannlCtxt->auth.authType = kSSS_AuthType_ECKey; + ex_SE05x_authCtx_t ex_se05x_auth; + + status = ex_sss_se05x_prepare_host_EX( + &pCtx->host_session, &pCtx->host_ks, pchannlCtxt, &ex_se05x_auth, kSSS_AuthType_ECKey); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_se05x_prepare_host_EX failed"); + goto cleanup; + } + + pchannlCtxt->connType = kType_SE_Conn_Type_Channel; + pchannlCtxt->tunnelCtx = pCtx->pTunnel_ctx; + + status = sss_session_open( + &pCtx->session, kType_SSS_SE_SE05x, kSE05x_AppletResID_FEATURE, kSSS_ConnectionType_Encrypted, pchannlCtxt); + if (kStatus_SSS_Success != status) { + LOG_E("sss_session_open failed"); + } +#else + sss_session_t *pSession = NULL; + SE05x_Connect_Ctx_t *pConnectCtx = NULL; + pConnectCtx = &pCtx->se05x_open_ctx; + pSession = &pCtx->session; + status = ex_sss_se05x_prepare_host_EX( + &pCtx->host_session, &pCtx->host_ks, pConnectCtx, &pCtx->ex_se05x_auth, kSSS_AuthType_ECKey); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_se05x_prepare_host_EX failed"); + goto cleanup; + } + + status = sss_session_open( + pSession, kType_SSS_SE_SE05x, kSE05x_AppletResID_FEATURE, kSSS_ConnectionType_Encrypted, pConnectCtx); + if (kStatus_SSS_Success != status) { + LOG_E("sss_session_open failed"); + } +#endif + +cleanup: + return status; +} + +sss_status_t ex_sss_se05x_prepare_host_EX(sss_session_t *host_session, + sss_key_store_t *host_ks, + SE05x_Connect_Ctx_t *se05x_open_ctx, + ex_SE05x_authCtx_t *se05x_auth_ctx, + SE_AuthType_t auth_type) +{ + sss_status_t status = kStatus_SSS_Fail; + + if (host_session->subsystem == kType_SSS_SubSystem_NONE) { + sss_type_t hostsubsystem = kType_SSS_SubSystem_NONE; + +#if SSS_HAVE_MBEDTLS + hostsubsystem = kType_SSS_mbedTLS; +#endif + +#if SSS_HAVE_OPENSSL + hostsubsystem = kType_SSS_OpenSSL; +#endif + status = sss_session_open(host_session, hostsubsystem, 0, kSSS_ConnectionType_Plain, NULL); + if (kStatus_SSS_Success != status) { + LOG_E("Failed to open Host Session"); + goto cleanup; + } + status = sss_key_store_context_init(host_ks, host_session); + if (kStatus_SSS_Success != status) { + LOG_E("Host: sss_key_store_context_init failed"); + goto cleanup; + } + status = sss_key_store_allocate(host_ks, __LINE__); + if (kStatus_SSS_Success != status) { + LOG_E("Host: sss_key_store_allocate failed"); + goto cleanup; + } + } + switch (auth_type) { +#if SSS_HAVE_SCP_SCP03_SSS + case kSSS_AuthType_ECKey: + status = ex_sss_se05x_prepare_host_eckey_EX(&se05x_open_ctx->auth.ctx.eckey, se05x_auth_ctx, host_ks); + break; +#endif + default: + status = kStatus_SSS_Fail; + LOG_E("Not handled"); + } + + if (kStatus_SSS_Success != status) { + LOG_E( + "Host: ex_sss_se05x_prepare_host_<type=(SE_AuthType_t)%d> " + "failed", + auth_type); + goto cleanup; + } + se05x_open_ctx->auth.authType = auth_type; + +cleanup: + return status; +} + +sss_status_t ex_sss_se05x_prepare_host_eckey_EX( + SE05x_AuthCtx_ECKey_t *pAuthCtx, ex_SE05x_authCtx_t *pEx_auth, sss_key_store_t *pKs) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t hostEcdsakey[1024] = {0}; + + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-file") == 0) { + j++; + const char *filename = argv[j]; + FILE *fp = fopen(filename, "rb"); + if (fp == NULL) { + LOG_E("Cannot open file"); + return kStatus_SSS_Fail; + } + fread(hostEcdsakey, sizeof(hostEcdsakey), 1, fp); + } + } + + NXECKey03_StaticCtx_t *pStatic_ctx = pAuthCtx->pStatic_ctx; + NXSCP03_DynCtx_t *pDyn_ctx = pAuthCtx->pDyn_ctx; + + /* Init allocate Host ECDSA Key pair */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->HostEcdsaObj, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Pair); + /* Set Host ECDSA Key pair */ + status = sss_key_store_set_key(pKs, &pStatic_ctx->HostEcdsaObj, hostEcdsakey, sizeof(hostEcdsakey), 256, NULL, 0); + if (status == kStatus_SSS_Fail) { + return status; + } + + /* Init allocate Host ECKA Key pair */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->HostEcKeypair, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Pair); + /* Generate Host EC Key pair */ + status = sss_key_store_generate_key(pKs, &pStatic_ctx->HostEcKeypair, 256, NULL); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init allocate SE ECKA Public Key */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->SeEcPubKey, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Public); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init Allocate Master Secret */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pStatic_ctx->masterSec, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init Allocate ENC Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Enc, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + /* Init Allocate MAC Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Mac, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + /* Init Allocate DEK Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Rmac, pKs, MAKE_TEST_ID(__LINE__)); + + return status; +} + +sss_status_t Alloc_ECKeykey_toSE05xAuthctx_EX( + sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId, sss_key_part_t keypart) +{ + sss_status_t status = kStatus_SSS_Fail; + status = sss_key_object_init(keyObject, pKs); + if (status != kStatus_SSS_Success) { + return status; + } + status = sss_key_object_allocate_handle( + keyObject, keyId, keypart, kSSS_CipherType_EC_NIST_P, 256, kKeyObject_Mode_Persistent); + return status; +} + +sss_status_t Alloc_Scp03key_toSE05xAuthctx_EX(sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId) +{ + sss_status_t status = kStatus_SSS_Fail; + status = sss_key_object_init(keyObject, pKs); + if (status != kStatus_SSS_Success) { + return status; + } + + status = sss_key_object_allocate_handle( + keyObject, keyId, kSSS_KeyPart_Default, kSSS_CipherType_AES, 16, kKeyObject_Mode_Transient); + return status; +}
diff --git a/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.h b/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.h new file mode 100644 index 0000000..6fedefd --- /dev/null +++ b/demos/se05x/se05x_DesfireCRC/se05x_DesfireCRC.h
@@ -0,0 +1,21 @@ +/* +* +* Copyright 2019,2020 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include "ex_sss_boot.h" +#include "fsl_sss_api.h" +#include "fsl_sss_ftr.h" + +sss_status_t session_open_with_feature_id(ex_sss_boot_ctx_t *pCtx); +sss_status_t ex_sss_se05x_prepare_host_EX(sss_session_t *host_session, + sss_key_store_t *host_ks, + SE_Connect_Ctx_t *se05x_open_ctx, + ex_SE05x_authCtx_t *se05x_auth_ctx, + SE_AuthType_t auth_type); +sss_status_t ex_sss_se05x_prepare_host_eckey_EX( + SE05x_AuthCtx_ECKey_t *pAuthCtx, ex_SE05x_authCtx_t *pEx_auth, sss_key_store_t *pKs); +sss_status_t Alloc_ECKeykey_toSE05xAuthctx_EX( + sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId, sss_key_part_t keypart); +sss_status_t Alloc_Scp03key_toSE05xAuthctx_EX(sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId);
diff --git a/demos/se05x/se05x_GetAPDUBuffer/CMakeLists.txt b/demos/se05x/se05x_GetAPDUBuffer/CMakeLists.txt new file mode 100644 index 0000000..8c62a17 --- /dev/null +++ b/demos/se05x/se05x_GetAPDUBuffer/CMakeLists.txt
@@ -0,0 +1,23 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_GetAPDUBuffer) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_GetAPDUBuffer/Readme.rst b/demos/se05x/se05x_GetAPDUBuffer/Readme.rst new file mode 100644 index 0000000..9e0e200 --- /dev/null +++ b/demos/se05x/se05x_GetAPDUBuffer/Readme.rst
@@ -0,0 +1,65 @@ +.. + Copyright 2020 NXP + + + +.. _write-apdu-to-buf: + +================================================= + Write APDU to buffer +================================================= + +Normally, when we create an APDU, we also perform transceive +operation and return the result to the application. +Optionally, the user may want to just create the APDU +and not perform the transceive operation. + +This can be done by creating your own transaction function. +All ``SE05x`` APIs call a common transaction function in +which the complete APDU is created and then transmitted. + +The following function can be used as reference. + +.. literalinclude:: se05x_GetAPDUBuffer.c + :language: c + :start-after: /* doc:start:createapdubuf */ + :end-before: /* doc:end:createapdubuf */ + +Assign this function to session context and use as +following + +.. literalinclude:: se05x_GetAPDUBuffer.c + :language: c + :dedent: 4 + :start-after: /* doc:start:use-write-apdu-buf */ + :end-before: /* doc:end:use-write-apdu-buf */ + + +After this, whichever ``SE05x`` API you call with ``write_apdubufferctx``, +it will just create the APDU and write it to the buffer. No transceive operation +will be performed. + +Building +================================================= + +Build the project with the following configurations. + +**se05x_GetAPDUBuffer** + +- ``SCP = None`` +- ``Project = se05x_GetAPDUBuffer`` + +Running +================================================= + +On successful execution you can see the APDU buffer printed out:: + + App :INFO :Policy for ReadOnly File: + App :INFO :Locked = READ + App :INFO :Excluded = DELETE, WRITE. + App :INFO :pPolicyBuffer (Len=9) + 08 00 00 00 00 00 20 00 00 + App :INFO :gTxBuffer (Len=38) + 80 01 06 00 21 11 09 08 00 00 00 00 00 20 00 00 + 41 04 11 22 33 44 43 02 00 0A 44 0A 01 02 03 04 + 05 06 07 08 09 0A
diff --git a/demos/se05x/se05x_GetAPDUBuffer/se05x_GetAPDUBuffer.c b/demos/se05x/se05x_GetAPDUBuffer/se05x_GetAPDUBuffer.c new file mode 100644 index 0000000..3cfa628 --- /dev/null +++ b/demos/se05x/se05x_GetAPDUBuffer/se05x_GetAPDUBuffer.c
@@ -0,0 +1,121 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <fsl_sss_se05x_policy.h> +#include <nxLog_App.h> +#include <se05x_APDU_apis.h> +#include <string.h> + +void getReadOnlyFilePolicy(uint8_t *pPolicyBuffer, size_t *pPolicyBufferLen); + +smStatus_t fLogTransmitBuffer(Se05xSession_t *pwrite_apdubufferctx, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle); + +uint8_t gTxBuffer[SE05X_MAX_BUF_SIZE_CMD]; +size_t gTxBufferLen; + +int main() +{ + Se05xPolicy_t policy; + uint32_t objectID = 0x11223344; + uint16_t offset = 0; + const uint8_t inputData[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + uint8_t policyBuffer[MAX_POLICY_BUFFER_SIZE] = {0}; + size_t policyBufferLen = sizeof(policyBuffer); + size_t inputDataLen = sizeof(inputData); + uint16_t length = (uint16_t)inputDataLen; + + getReadOnlyFilePolicy(policyBuffer, &policyBufferLen); + policy.value = policyBuffer; + policy.value_len = policyBufferLen; + + /* doc:start:use-write-apdu-buf */ + Se05xSession_t write_apdubufferctx = {0}; + write_apdubufferctx.fp_TXn = &fLogTransmitBuffer; + + Se05x_API_WriteBinary(&write_apdubufferctx, &policy, objectID, offset, length, inputData, inputDataLen); + /* doc:end:use-write-apdu-buf */ + LOG_AU8_I(gTxBuffer, gTxBufferLen); + + return 0; +} + +// Writes to gTxBuffer and gTxBufferLen +void getReadOnlyFilePolicy(uint8_t *pPolicyBuffer, size_t *pPolicyBufferLen) +{ + sss_status_t status; + sss_policy_t policy = {0}; + sss_policy_u binary = {0}; + sss_policy_u common = {0}; + sss_policy_file_u *pFile = &binary.policy.file; + sss_policy_common_u *pCommon = &common.policy.common; + + LOG_I("Policy for ReadOnly File:"); + + policy.nPolicies = 2; + policy.policies[0] = &binary; + policy.policies[2] = &common; + binary.auth_obj_id = 0; + binary.type = KPolicy_File; + common.auth_obj_id = 0; + common.type = KPolicy_Common; + LOG_I("Locked = READ"); + pFile->can_Read = 1; + LOG_I("Excluded = DELETE, WRITE."); + pCommon->can_Delete = 0; + pFile->can_Write = 0; + + status = sss_se05x_create_object_policy_buffer(&policy, pPolicyBuffer, pPolicyBufferLen); + if (status != kStatus_SSS_Success) { + LOG_E("Failed to create policy buffer"); + } + LOG_AU8_I(pPolicyBuffer, *pPolicyBufferLen); +} + +/* doc:start:createapdubuf */ +smStatus_t fLogTransmitBuffer(Se05xSession_t *pwrite_apdubufferctx, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle) +{ + memset(gTxBuffer, 0, sizeof(gTxBuffer)); + size_t i = 0; + memcpy(&gTxBuffer[i], hdr, sizeof(*hdr)); + smStatus_t ret = SM_OK; + i += sizeof(*hdr); + if (cmdBufLen > 0) { + // The Lc field must be extended in case the length does not fit + // into a single byte (Note, while the standard would allow to + // encode 0x100 as 0x00 in the Lc field, nobody who is sane in his mind + // would actually do that). + if ((cmdBufLen < 0xFF) && !hasle) { + gTxBuffer[i++] = (uint8_t)cmdBufLen; + } + else { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0xFFu & (cmdBufLen >> 8); + gTxBuffer[i++] = 0xFFu & (cmdBufLen); + } + memcpy(&gTxBuffer[i], cmdBuf, cmdBufLen); + i += cmdBufLen; + } + if (hasle) { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0x00; + } + ret = SM_OK; + gTxBufferLen = i; + + return ret; +} +/* doc:end:createapdubuf */ \ No newline at end of file
diff --git a/demos/se05x/se05x_GetCertificate/CMakeLists.txt b/demos/se05x/se05x_GetCertificate/CMakeLists.txt new file mode 100644 index 0000000..1bf7e5e --- /dev/null +++ b/demos/se05x/se05x_GetCertificate/CMakeLists.txt
@@ -0,0 +1,17 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_GetCertificate) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_GetCertificate/Readme.rst b/demos/se05x/se05x_GetCertificate/Readme.rst new file mode 100644 index 0000000..e790f2b --- /dev/null +++ b/demos/se05x/se05x_GetCertificate/Readme.rst
@@ -0,0 +1,43 @@ +.. + Copyright 2019 NXP + + +.. highlight:: shell + +.. _se-get-certificate: + +========================================================== + Get Certificate from the SE +========================================================== + +This tool is to retrieve Trust provisioned certificates from the SE. It will +read the certificate and store it on the file system. It takes as argument, +the keyID at which certificate is stored and the file path where to save the +certificate on the file system. + +.. note:: It can only be compiled when Host Crypto is mbedTLS. + + +Building the example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Use the following CMake configurations to compile the example + +- CMake configurations: ``WithHostCrypto_MBEDTLS``: ON + +- Project: ``se05x_GetCertificate`` + +How to use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Run the tool as:: + + se05x_GetCertificate <32-bit keyID> </path/to/file> <port> + + +- The keys ID has to be in HEX format. + +- For systems connecting with T=1 over I2C, the port parameter can be skipped. + +- The certificate will be stored in *PEM* format at the specified path on the + file system.
diff --git a/demos/se05x/se05x_GetCertificate/se05x_GetCertificate.c b/demos/se05x/se05x_GetCertificate/se05x_GetCertificate.c new file mode 100644 index 0000000..11aff6e --- /dev/null +++ b/demos/se05x/se05x_GetCertificate/se05x_GetCertificate.c
@@ -0,0 +1,138 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "mbedtls/base64.h" +#include "mbedtls/x509_crt.h" + +static ex_sss_boot_ctx_t gex_sss_se_cert; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_se_cert) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define MAX_FILE_NAME_SIZE 255 + +#include <ex_sss_main_inc.h> + +static int convertdertopemformat( + const unsigned char *int_ca_cert_der, int len_der, unsigned char *int_ca_cert_pem, int dst_buf_len, U16 *outlength); + +void usage() +{ + LOG_W("Usage:"); + LOG_W("\tse05x_GetCertificate <keyId> <filename>"); + LOG_W("\t<keyId> should be in HEX format"); + LOG_W( + "\t<filename> is the location where certificate will be stored in PEM " + "format"); +} + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + int ret = 0; + + if (argc < 3) { + usage(); + return status; + } + + char file_name[MAX_FILE_NAME_SIZE] = {0}; + FILE *fp = NULL; + strncpy(file_name, argv[2], sizeof(file_name) - 1); + + long int id = strtol(argv[1], NULL, 16); + uint32_t keyId = (uint32_t)(id); + + sss_object_t obj; + uint8_t key[1024] = {0}; + size_t keyByteLen = sizeof(key); + size_t keyBitLen = keyByteLen * 8; + + uint8_t pem_cert[2048] = {0}; + uint8_t *ppem_cert = &pem_cert[0]; + U16 pem_cert_size = 0; + + status = sss_key_object_init(&obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&obj, keyId); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->ks, &obj, key, &keyByteLen, &keyBitLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + mbedtls_x509_crt certificate; + mbedtls_x509_crt_init(&certificate); + + ret = mbedtls_x509_crt_parse(&certificate, (const unsigned char *)key, keyByteLen); + + if (ret != 0) { + LOG_E("Unable to parse certificate"); + goto exit; + } + + ret = convertdertopemformat(key, keyByteLen, ppem_cert, sizeof(pem_cert), &pem_cert_size); + if (ret != 0) { + LOG_E("Converting DER to PEM failed"); + goto exit; + } + + fp = fopen(file_name, "wb+"); + if (fp == NULL) { + LOG_E("Error opening file"); + goto exit; + } + fwrite(pem_cert, 1, pem_cert_size - 1, fp); + + fclose(fp); + +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_GetCertificate Example Success !!!..."); + } + else { + LOG_E("se05x_GetCertificate Example Failed !!!..."); + } + return status; +} + +static int convertdertopemformat( + const unsigned char *int_ca_cert_der, int len_der, unsigned char *int_ca_cert_pem, int dst_buf_len, U16 *outlength) +{ + int ret; + size_t len_out; + const char start[] = "-----BEGIN CERTIFICATE-----\n"; + const char end[] = "\n-----END CERTIFICATE-----\n"; + + strcpy((char *)int_ca_cert_pem, start); + ret = mbedtls_base64_encode(&int_ca_cert_pem[sizeof(start) - 1], + dst_buf_len - sizeof(start) - sizeof(end) - 1, + &len_out, + int_ca_cert_der, + len_der); + if (ret == 0) { + strcpy((char *)&int_ca_cert_pem[sizeof(start) - 1 + len_out], end); + *outlength = (U16)len_out + sizeof(start) + sizeof(end) - 1; + } + else { + *outlength = 0; + ret = 1; + } + return ret; +}
diff --git a/demos/se05x/se05x_GetInfo/CMakeLists.txt b/demos/se05x/se05x_GetInfo/CMakeLists.txt new file mode 100644 index 0000000..9187fb1 --- /dev/null +++ b/demos/se05x/se05x_GetInfo/CMakeLists.txt
@@ -0,0 +1,41 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_GetInfo) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM} + ) +ENDIF() + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/se05x/se05x_GetInfo/Readme.rst b/demos/se05x/se05x_GetInfo/Readme.rst new file mode 100644 index 0000000..0ef19f9 --- /dev/null +++ b/demos/se05x/se05x_GetInfo/Readme.rst
@@ -0,0 +1,47 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-info: + +======================================================================= + SE05X Get Info example +======================================================================= + +This project can be used to get SE05X platform information with or without applet installed. + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_GetInfo`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_GetInfo.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_GetInfo + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_GetInfo.rst.txt + :start-after: Opening connection to JRCP server on 127.0.0.1:8050
diff --git a/demos/se05x/se05x_GetInfo/out_se05x_GetInfo.rst.txt b/demos/se05x/se05x_GetInfo/out_se05x_GetInfo.rst.txt new file mode 100644 index 0000000..d03519d --- /dev/null +++ b/demos/se05x/se05x_GetInfo/out_se05x_GetInfo.rst.txt
@@ -0,0 +1,102 @@ +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +App :WARN :##################################################### +App :INFO :uid (Len=18) + A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF + B0 B1 +App :INFO :Running se05x_GetInfo.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :WARN :##################################################### +App :INFO :Applet Major = 5 +App :INFO :Applet Minor = 12 +App :INFO :Applet patch = 0 +App :INFO :AppletConfig = 3FFF +App :INFO :With ECDAA +App :INFO :With ECDSA_ECDH_ECDHE +App :INFO :With EDDSA +App :INFO :With DH_MONT +App :INFO :With HMAC +App :INFO :With RSA_PLAIN +App :INFO :With RSA_CRT +App :INFO :With AES +App :INFO :With DES +App :INFO :With PBKDF +App :INFO :With TLS +App :INFO :With MIFARE +App :INFO :With I2CM +App :INFO :Internal = FFFF +App :WARN :##################################################### +App :INFO :Tag value - proprietary data 0xFE = 0xFE +App :INFO :Length of following data 0x45 = 0x45 +App :INFO :Tag card identification data (Len=2) + DF 28 +App :INFO :Length of card identification data = 0x42 +App :INFO :Tag configuration ID (Must be 0x01) = 0x01 +App :INFO :Configuration ID (Len=12) + 00 02 A4 A4 71 66 0B 13 B9 F3 AA DE +App :INFO :OEF ID (Len=2) + A4 A4 +App :INFO :Tag patch ID (Must be 0x02) = 0x02 +App :INFO :Patch ID (Len=8) + 00 00 00 00 00 00 00 00 +App :INFO :Tag platform build ID1 (Must be 0x03) = 0x03 +App :INFO :Platform build ID (Len=24) + 4A 33 52 33 35 31 30 32 39 42 34 31 31 31 30 30 + 30 30 30 30 30 30 30 30 +App :INFO :JCOP Platform ID = J3R351029B411100 +App :INFO :Tag FIPS mode (Must be 0x05) = 0x05 +App :INFO :FIPS mode var = 0x00 +App :INFO :Tag pre-perso state (Must be 0x07) = 0x07 +App :INFO :Bit mask of pre-perso state var = 0x00 +App :INFO :Tag ROM ID (Must be 0x08) = 0x08 +App :INFO :ROM ID (Len=8) + 52 4F 4D 5F 5F 5F 49 44 +App :INFO :Status Word (SW) (Len=2) + 90 00 +App :INFO :se05x_GetInfoPlainApplet Example Success !!!... +App :WARN :##################################################### +App :INFO :cplc_data.IC_fabricator (Len=2) + 47 90 +App :INFO :cplc_data.IC_type1 (Len=2) + D3 21 +App :INFO :cplc_data.Operating_system_identifier (Len=2) + 47 00 +App :INFO :cplc_data.Operating_system_release_date (Len=2) + 00 00 +App :INFO :cplc_data.Operating_system_release_level (Len=2) + 00 00 +App :INFO :cplc_data.IC_fabrication_date (Len=2) + 74 74 +App :INFO :cplc_data.IC_Serial_number (Len=4) + 6E 6E 6E 62 +App :INFO :cplc_data.IC_Batch_identifier (Len=2) + 62 62 +App :INFO :cplc_data.IC_module_fabricator (Len=2) + 00 00 +App :INFO :cplc_data.IC_module_packaging_date (Len=2) + 00 00 +App :INFO :cplc_data.ICC_manufacturer (Len=2) + 00 00 +App :INFO :cplc_data.IC_embedding_date (Len=2) + 00 00 +App :INFO :cplc_data.IC_OS_initializer (Len=2) + 57 58 +App :INFO :cplc_data.IC_OS_initialization_date (Len=2) + 59 4E +App :INFO :cplc_data.IC_OS_initialization_equipment (Len=4) + 4E 4E 4E 4E +App :INFO :cplc_data.IC_personalizer (Len=2) + 00 00 +App :INFO :cplc_data.IC_personalization_date (Len=2) + 00 00 +App :INFO :cplc_data.IC_personalization_equipment_ID (Len=4) + 00 00 00 00 +App :INFO :cplc_data.SW (Len=2) + 90 00 +App :INFO :ex_sss Finished +Press any key to continue . . . \ No newline at end of file
diff --git a/demos/se05x/se05x_GetInfo/se05x_GetInfo.c b/demos/se05x/se05x_GetInfo/se05x_GetInfo.c new file mode 100644 index 0000000..0a5199d --- /dev/null +++ b/demos/se05x/se05x_GetInfo/se05x_GetInfo.c
@@ -0,0 +1,537 @@ +/* Copyright 2019,2020 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <string.h> +#include <nxEnsure.h> + +#include "ex_sss_auth.h" +#include "global_platf.h" +#include "smCom.h" + +static ex_sss_boot_ctx_t gex_sss_get_info_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_get_info_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#define SEMS_LITE_AGENT_CHANNEL_1 0x01 +#define SEMS_LITE_GETDATA_UUID_TAG 0xFE + +#include <ex_sss_main_inc.h> + +static sss_status_t JCOP4_GetDataIdentify(void *conn_ctx); +static sss_status_t JCOP4_GetCPLCData(void *conn_ctx); +static sss_status_t SemsLite_Applet_Identify(void *conn_ctx); +static sss_status_t Iot_Applet_Identify(sss_se05x_session_t *pSession, int getUid); +static sss_status_t sems_lite_session_open(void *conn_ctx); +static sss_status_t iot_applet_session_open(ex_sss_boot_ctx_t *pCtx); + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + + status = sems_lite_session_open(pSession->s_ctx.conn_ctx); + + if (status == kStatus_SSS_Success) { + /* Get UID from semslite */ + status = SemsLite_Applet_Identify(pSession->s_ctx.conn_ctx); + if (status != kStatus_SSS_Success) { + goto cleanup; + } + + status = iot_applet_session_open(pCtx); + if (status != kStatus_SSS_Success) { + LOG_I("No IoT applet found"); + } + else { + /* Get applet version and config details */ + status = Iot_Applet_Identify(pSession, 0); + if (status != kStatus_SSS_Success) { + goto cleanup; + } + } + } + else { + LOG_W("No SemsLite Applet Available. "); + /* Try connecting to iot applet */ + status = iot_applet_session_open(pCtx); + if (status != kStatus_SSS_Success) { + LOG_I("Error in iot applet session open"); + goto cleanup; + } + + /* Get UID, applet version and config details */ + status = Iot_Applet_Identify(pSession, 1); + if (status != kStatus_SSS_Success) { + goto cleanup; + } + } + + status = JCOP4_GetDataIdentify(pSession->s_ctx.conn_ctx); + if (status != kStatus_SSS_Success) + goto cleanup; + + status = JCOP4_GetCPLCData(pSession->s_ctx.conn_ctx); + if (status != kStatus_SSS_Success) + goto cleanup; + + status = kStatus_SSS_Success; +cleanup: + return status; +} + +static sss_status_t iot_applet_session_open(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + const char *portName; + + ex_sss_session_close(pCtx); + + status = ex_sss_boot_connectstring(gex_sss_argc, gex_sss_argv, &portName); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_boot_connectstring Failed"); + goto cleanup; + } + + pCtx->se05x_open_ctx.skip_select_applet = 0; + + status = ex_sss_boot_open(pCtx, portName); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_session_open Failed"); + goto cleanup; + } + + status = kStatus_SSS_Success; +cleanup: + return status; +} + +static sss_status_t sems_lite_session_open(void *conn_ctx) +{ + sss_status_t status = kStatus_SSS_Fail; + U32 ret = 0; + smStatus_t retStatus = SM_NOT_OK; + +#ifdef SEMS_LITE_AGENT_CHANNEL_1 + const uint8_t openCmd[] = {0x00, 0x70, 0x00, 0x00, 0x01}; + U16 openCmdLen = sizeof(openCmd); +#endif + + /* clang-format off */ + const uint8_t selectCmd[] = { +#ifdef SEMS_LITE_AGENT_CHANNEL_1 + 0x01, 0xA4, 0x04, 0x00, 0x10, 0xA0, 0x00, 0x00, +#else + 0x00, 0xA4, 0x04, 0x00, 0x10, 0xA0, 0x00, 0x00, +#endif + 0x03, 0x96, 0x54, 0x53, 0x00, 0x00, 0x00, 0x01, + 0x03, 0x30, 0x00, 0x00, 0x00, 0x00, + }; + /* clang-format on */ + U16 selectCmdLen = sizeof(selectCmd); + + uint8_t resp[128] = {0x00}; + U32 respLen = sizeof(resp); + + ENSURE_OR_GO_EXIT(conn_ctx != NULL); + +#ifdef SEMS_LITE_AGENT_CHANNEL_1 + ret = smCom_TransceiveRaw(conn_ctx, (uint8_t *)openCmd, openCmdLen, resp, &respLen); + ENSURE_OR_GO_EXIT(ret == SM_OK); +#endif + + respLen = sizeof(resp); + ret = smCom_TransceiveRaw(conn_ctx, (uint8_t *)selectCmd, selectCmdLen, resp, &respLen); + ENSURE_OR_GO_EXIT(ret == SM_OK); + + retStatus = (resp[respLen - 2] << 8) | (resp[respLen - 1]); + if (retStatus != SM_OK) { + goto exit; + } + + status = kStatus_SSS_Success; +exit: + return status; +} + +#define CHECK_FEATURE_PRESENT(AppletConfig, ITEM) \ + if (((kSE05x_AppletConfig_##ITEM) == ((AppletConfig) & (kSE05x_AppletConfig_##ITEM)))) { \ + LOG_I("With " #ITEM); \ + } \ + else { \ + LOG_I("WithOut " #ITEM); \ + } + +static sss_status_t sems_lite_verify_GetDataResponse(uint8_t tag_P2, uint8_t *pRspBuf, U32 *pRspBufLen) +{ + sss_status_t sss_stat = kStatus_SSS_Fail; + size_t getDataRspLen = 0; + smStatus_t retStatus = SM_NOT_OK; + if (*pRspBufLen > 2) { + getDataRspLen = *pRspBufLen; + retStatus = (pRspBuf[getDataRspLen - 2] << 8) | (pRspBuf[getDataRspLen - 1]); + if (retStatus == SM_OK) { + if (pRspBuf[0] == tag_P2) { + if (pRspBuf[1] > 0) { + *pRspBufLen = pRspBuf[1]; + memmove(pRspBuf, pRspBuf + 2, pRspBuf[1]); + sss_stat = kStatus_SSS_Success; + } + else { + memset(pRspBuf, 0, *pRspBufLen); + *pRspBufLen = 0; + } + } + } + } + return sss_stat; +} + +static sss_status_t SemsLite_Applet_Identify(void *conn_ctx) +{ + sss_status_t status = kStatus_SSS_Fail; + U32 ret = 0; + uint8_t uid[64]; + U32 uidLen = sizeof(uid); + + uint8_t tag_P1 = 0x00; + uint8_t tag_P2 = SEMS_LITE_GETDATA_UUID_TAG; + + uint8_t getDataCmd[32] = { + 0x80, // CLA '80' / '00' GlobalPlatform / ISO / IEC + 0xCA, // INS 'CA' GET DATA(IDENTIFY) + 0x00, // P1 '00' High order tag value + 0x00, // P2 - proprietary data coming from respective function + 0x00, // Lc is Le'00' Case 2 command + }; + U16 getDataCmdLen = 5; + + getDataCmd[2] = tag_P1; + getDataCmd[3] = tag_P2; + +#ifdef SEMS_LITE_AGENT_CHANNEL_1 + getDataCmd[0] = getDataCmd[0] | SEMS_LITE_AGENT_CHANNEL_1; +#endif + + ret = smCom_TransceiveRaw(conn_ctx, (uint8_t *)getDataCmd, getDataCmdLen, uid, &uidLen); + if (ret != SM_OK) { + LOG_E("Could not get requested Data!!!"); + goto cleanup; + } + + if (kStatus_SSS_Success != sems_lite_verify_GetDataResponse(SEMS_LITE_GETDATA_UUID_TAG, uid, &uidLen)) { + goto cleanup; + } + + LOG_W("#####################################################"); + LOG_AU8_I(uid, uidLen); + + status = kStatus_SSS_Success; +cleanup: + return status; +} + +static sss_status_t Iot_Applet_Identify(sss_se05x_session_t *pSession, int getUid) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sw_status; + SE05x_Result_t result = kSE05x_Result_NA; + uint8_t uid[SE050_MODULE_UNIQUE_ID_LEN]; + size_t uidLen = sizeof(uid); + uint8_t applet_version[7]; + size_t applet_versionLen = sizeof(applet_version); + + if (getUid == 1) { + sw_status = Se05x_API_CheckObjectExists(&pSession->s_ctx, kSE05x_AppletResID_UNIQUE_ID, &result); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_CheckObjectExists"); + goto cleanup; + } + + sw_status = + Se05x_API_ReadObject(&pSession->s_ctx, kSE05x_AppletResID_UNIQUE_ID, 0, (uint16_t)uidLen, uid, &uidLen); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_CheckObjectExists"); + goto cleanup; + } + LOG_W("#####################################################"); + LOG_AU8_I(uid, uidLen); + } + + // VersionInfo is a 7 - byte value consisting of : + // - 1 - byte Major applet version + // - 1 - byte Minor applet version + // - 1 - byte patch applet version + // - 2 - byte AppletConfig, indicating the supported applet features + // - 2-byte Secure Box version: major version (MSB) concatenated with minor version (LSB). + + sw_status = Se05x_API_GetVersion(&pSession->s_ctx, applet_version, &applet_versionLen); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_GetVersion"); + goto cleanup; + } + LOG_W("#####################################################"); + LOG_I("Applet Major = %d", applet_version[0]); + LOG_I("Applet Minor = %d", applet_version[1]); + LOG_I("Applet patch = %d", applet_version[2]); + LOG_I("AppletConfig = %02X%02X", applet_version[3], applet_version[4]); + { + U16 AppletConfig = applet_version[3] << 8 | applet_version[4]; + CHECK_FEATURE_PRESENT(AppletConfig, ECDAA); + CHECK_FEATURE_PRESENT(AppletConfig, ECDSA_ECDH_ECDHE); + CHECK_FEATURE_PRESENT(AppletConfig, EDDSA); + CHECK_FEATURE_PRESENT(AppletConfig, DH_MONT); + CHECK_FEATURE_PRESENT(AppletConfig, HMAC); + CHECK_FEATURE_PRESENT(AppletConfig, RSA_PLAIN); + CHECK_FEATURE_PRESENT(AppletConfig, RSA_CRT); + CHECK_FEATURE_PRESENT(AppletConfig, AES); + CHECK_FEATURE_PRESENT(AppletConfig, DES); + CHECK_FEATURE_PRESENT(AppletConfig, PBKDF); + CHECK_FEATURE_PRESENT(AppletConfig, TLS); + CHECK_FEATURE_PRESENT(AppletConfig, MIFARE); + CHECK_FEATURE_PRESENT(AppletConfig, I2CM); + } + LOG_I("Internal = %02X%02X", applet_version[5], applet_version[6]); + + status = kStatus_SSS_Success; +cleanup: + return status; +} + +/* Execute and decode GET DATA IDENTIFY as specified for SE05x JCOP +* +* @warn After this call, the applet is deselected and applet commands won't work. +* The applet session needs to be re-established +* (select applet, establish optional session, like in the sss_session_open() +*/ + +static sss_status_t JCOP4_GetDataIdentify(void *conn_ctx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t rxStatus; + char jcop_platform_id[17] = {0}; + /* Must be packed */ + typedef struct + { + //0xFE Tag value - proprietary data Only present if class byte is 0x80 + uint8_t vTag_value_proprietary_data; + //0x49 / 0x45 Length of following data Only present if class byte is 0x80 + uint8_t vLength_of_following_data; + //0xDF28 Tag card identification data Only present if class byte is 0x80 + uint8_t vTag_card_identification_data[0x02]; + //0x46 Length of card identification data Only present if class byte is 0x80 + uint8_t vLength_of_card_identification_data; + //0x01 Tag configuration ID Identifies the configuration content + uint8_t vTag_configuration_ID; + uint8_t vLength_configuration_ID; //0x0C Length configuration ID + uint8_t vConfiguration_ID[0x0C]; //var Configuration ID + uint8_t vTag_patch_ID; //0x02 Tag patch ID Identifies the patch level + uint8_t vLength_patch_ID; //0x08 Length patch ID + uint8_t vPatch_ID[0x08]; //var Patch ID + //0x03 Tag platform build ID1 Identifies the JCOP platform + uint8_t vTag_platform_build_ID1; + uint8_t vLength_platform_build_ID; //0x18 Length platform build ID + uint8_t vPlatform_build_ID[0x18]; //var Platform build ID + uint8_t vTag_FIPS_mode; //0x052 Tag FIPS mode FIPS mode active + uint8_t vLength_FIPS_mode; //0x01 Length FIPS mode + //var FIPS mode 0x00 - FIPS mode not active, 0x01 - FIPS mode active + uint8_t vFIPS_mode; + + //uint8_t vTag_modules_enabled; //0x06 Tag modules enabled Lists enabled and disabled modules + //uint8_t vLength_modules_enabled; //0x02 Length modules enabled Big endian format + //uint8_t vBit_mask_of_enabled_modules[0x02]; //var Bit mask of enabled modules See Table 5.3 + + //0x07 Tag pre-perso state Lists pre-perso state + uint8_t vTag_pre_perso_state; + + //0x01 Length pre-perso state + uint8_t vLength_pre_perso_state; + + //var Bit mask of pre-perso state bit0 = 1 = config module available, + // bit1 = 1 = transport state is active. + // Unused bits are set to 0x0. + uint8_t vBit_mask_of_pre_perso_state; + uint8_t vTag_ROM_ID; //'08' Tag ROM ID Indentifies the ROM content + uint8_t vLength_ROM_ID; //'08' Length ROM ID Normal ending + uint8_t vROM_ID[0x08]; //var ROM ID + uint8_t vStatus_Word_SW_[0x02]; //9000h Status Word (SW) + } identifyRsp_t; + + const uint8_t cmd[] = { + 0x80, // CLA '80' / '00' GlobalPlatform / ISO / IEC + 0xCA, // INS 'CA' GET DATA(IDENTIFY) + 0x00, // P1 '00' High order tag value + 0xFE, // P2 'FE' Low order tag value - proprietary data + 0x02, // Lc '02' Length of data field + 0xDF, + 0x28, // Data 'DF28' Card identification data + 0x00 // Le '00' Length of response data + }; + + identifyRsp_t identifyRsp = {0}; + U32 prspLen = sizeof(identifyRsp_t); + + U16 dummyResponse16 = sizeof(identifyRsp_t); + /* Select card manager / ISD + * (ReUsing same dummy buffers) */ + rxStatus = GP_Select(conn_ctx, (uint8_t *)&identifyRsp /* dummy */, 0, (uint8_t *)&identifyRsp, &dummyResponse16); + if (rxStatus != SM_OK) { + LOG_E("Could not select ISD."); + goto cleanup; + } + + rxStatus = smCom_TransceiveRaw(conn_ctx, (uint8_t *)cmd, sizeof(cmd), (uint8_t *)&identifyRsp, &prspLen); + if (rxStatus == SM_OK && prspLen == sizeof(identifyRsp)) { + LOG_W("#####################################################"); + LOG_I("%s = 0x%02X", "Tag value - proprietary data 0xFE", identifyRsp.vTag_value_proprietary_data); + LOG_I("%s = 0x%02X", "Length of following data 0x45", identifyRsp.vLength_of_following_data); + LOG_MAU8_I("Tag card identification data", + identifyRsp.vTag_card_identification_data, + sizeof(identifyRsp.vTag_card_identification_data)); + LOG_I("%s = 0x%02X", + "Length of card identification data", // 0x46 + identifyRsp.vLength_of_card_identification_data); + LOG_I("%s = 0x%02X", "Tag configuration ID (Must be 0x01)", identifyRsp.vTag_configuration_ID); + LOG_D("%s = 0x%02X", "Length configuration ID 0x0C", identifyRsp.vLength_configuration_ID); + LOG_MAU8_I("Configuration ID", identifyRsp.vConfiguration_ID, sizeof(identifyRsp.vConfiguration_ID)); + + //Third and fourth Byte of vConfiguration_ID is the OEF ID + LOG_MAU8_I("OEF ID", &identifyRsp.vConfiguration_ID[2], 2); + LOG_I("%s = 0x%02X", "Tag patch ID (Must be 0x02)", identifyRsp.vTag_patch_ID); + LOG_D("%s = 0x%02X", "Length patch ID 0x08", identifyRsp.vLength_patch_ID); + LOG_MAU8_I("Patch ID", identifyRsp.vPatch_ID, sizeof(identifyRsp.vPatch_ID)); + LOG_I("%s = 0x%02X", "Tag platform build ID1 (Must be 0x03)", identifyRsp.vTag_platform_build_ID1); + LOG_D("%s = 0x%02X", "Length platform build ID 0x18", identifyRsp.vLength_platform_build_ID); + LOG_MAU8_I("Platform build ID", identifyRsp.vPlatform_build_ID, sizeof(identifyRsp.vPlatform_build_ID)); + memcpy(jcop_platform_id, identifyRsp.vPlatform_build_ID, 16); + + LOG_I("%s = %s", "JCOP Platform ID", jcop_platform_id); + LOG_I("%s = 0x%02X", "Tag FIPS mode (Must be 0x05)", identifyRsp.vTag_FIPS_mode); + LOG_D("%s = 0x%02X", "Length FIPS mode 0x01", identifyRsp.vLength_FIPS_mode); + LOG_I("%s = 0x%02X", "FIPS mode var", identifyRsp.vFIPS_mode); + //LOG_I("%s = 0x%02X", "Tag modules enabled 0x06", identifyRsp.vTag_modules_enabled); + //LOG_I("%s = 0x%02X", "Length modules enabled 0x02", identifyRsp.vLength_modules_enabled); + //LOG_MAU8_I("Bit mask of enabled modules", identifyRsp.vBit_mask_of_enabled_modules, sizeof(identifyRsp.vBit_mask_of_enabled_modules)); + LOG_I("%s = 0x%02X", "Tag pre-perso state (Must be 0x07)", identifyRsp.vTag_pre_perso_state); + LOG_D("%s = 0x%02X", "Length pre-perso state 0x01", identifyRsp.vLength_pre_perso_state); + LOG_I("%s = 0x%02X", "Bit mask of pre-perso state var", identifyRsp.vBit_mask_of_pre_perso_state); + + LOG_I("%s = 0x%02X", "Tag ROM ID (Must be 0x08)", identifyRsp.vTag_ROM_ID); + LOG_D("%s = 0x%02X", "Length ROM ID 0x08", identifyRsp.vLength_ROM_ID); + LOG_MAU8_I("ROM ID", identifyRsp.vROM_ID, sizeof(identifyRsp.vROM_ID)); + LOG_MAU8_I("Status Word (SW)", identifyRsp.vStatus_Word_SW_, sizeof(identifyRsp.vStatus_Word_SW_)); + } + else { + LOG_E("Error in retreiving the JCOP Identifier. Response is as follows"); + LOG_AU8_E((uint8_t *)&identifyRsp, sizeof(identifyRsp)); + goto cleanup; + } + status = kStatus_SSS_Success; + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_GetInfoPlainApplet Example Success !!!..."); + } + else { + LOG_E("se05x_GetInfoPlainApplet Example Failed !!!..."); + } + return status; +} + +/* See 5.1.1.2 Get CPLC data +* This command returns the Card Production Life Cycle (CPLC) data. The APDU can be sent without prior authentication. +* +* +* The Card Production Life Cycle data as defined in VISA GlobalPlatform Card Specification 2.1.1 are coded in 42 +* bytes. The CPLC format and the default values are shown below +* +*/ + +static sss_status_t JCOP4_GetCPLCData(void *conn_ctx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t rxStatus; + /* Must be packed */ + typedef struct + { + uint8_t p9F7F[2]; + uint8_t pLen[1]; // = 2A + uint8_t IC_fabricator[2]; // 2 '4790' NXP + uint8_t IC_type1[2]; // 2 'D321' NXP + uint8_t Operating_system_identifier[2]; // 2 '47' SS NXP + uint8_t Operating_system_release_date[2]; // 2 SS SS NXP + uint8_t Operating_system_release_level[2]; // 2 <Mask ID> <Patch ID> NXP + uint8_t IC_fabrication_date[2]; // tt NXP + uint8_t IC_Serial_number[4]; // 4 nnnb NXP + uint8_t IC_Batch_identifier[2]; // 2 bb NXP + uint8_t IC_module_fabricator[2]; // 2 '00' '00' Customer + uint8_t IC_module_packaging_date[2]; // 2 '00' '00' Customer + uint8_t ICC_manufacturer[2]; // 2 '00' '00' Customer + uint8_t IC_embedding_date[2]; // 2 '00' '00' Customer + uint8_t IC_OS_initializer[2]; // 2 WX Customer + uint8_t IC_OS_initialization_date[2]; // 2 YN Customer + uint8_t IC_OS_initialization_equipment[4]; // ID 4 NNNN Customer + uint8_t IC_personalizer[2]; // 2 '00' '00' Customer + uint8_t IC_personalization_date[2]; // 2 '00' '00' Customer + uint8_t IC_personalization_equipment_ID[4]; // 4 '00'. . . '00' Customer + uint8_t SW[2]; + } cplcRsp_t; + + const uint8_t cmd[] = { + 0x80, // CLA '80' / '00' GlobalPlatform / ISO / IEC + 0xCA, // INS + 0x9F, // P1 + 0x7F, // P2 + 0x00, // Lc + }; + + cplcRsp_t cplc_data = {{0}}; + U32 cplc_data_len = sizeof(cplcRsp_t); + + SSS_ASSERT(sizeof(cplcRsp_t) == 47); + + rxStatus = smCom_TransceiveRaw(conn_ctx, (uint8_t *)cmd, sizeof(cmd), (uint8_t *)&cplc_data, &cplc_data_len); + if (rxStatus == SM_OK && cplc_data_len == sizeof(cplc_data)) { + LOG_W("#####################################################"); + LOG_AU8_I(cplc_data.IC_fabricator, sizeof(cplc_data.IC_fabricator)); + LOG_AU8_I(cplc_data.IC_type1, sizeof(cplc_data.IC_type1)); + LOG_AU8_I(cplc_data.Operating_system_identifier, sizeof(cplc_data.Operating_system_identifier)); + LOG_AU8_I(cplc_data.Operating_system_release_date, sizeof(cplc_data.Operating_system_release_date)); + LOG_AU8_I(cplc_data.Operating_system_release_level, sizeof(cplc_data.Operating_system_release_level)); + LOG_AU8_I(cplc_data.IC_fabrication_date, sizeof(cplc_data.IC_fabrication_date)); + LOG_AU8_I(cplc_data.IC_Serial_number, sizeof(cplc_data.IC_Serial_number)); + LOG_AU8_I(cplc_data.IC_Batch_identifier, sizeof(cplc_data.IC_Batch_identifier)); + LOG_AU8_I(cplc_data.IC_module_fabricator, sizeof(cplc_data.IC_module_fabricator)); + LOG_AU8_I(cplc_data.IC_module_packaging_date, sizeof(cplc_data.IC_module_packaging_date)); + LOG_AU8_I(cplc_data.ICC_manufacturer, sizeof(cplc_data.ICC_manufacturer)); + LOG_AU8_I(cplc_data.IC_embedding_date, sizeof(cplc_data.IC_embedding_date)); + LOG_AU8_I(cplc_data.IC_OS_initializer, sizeof(cplc_data.IC_OS_initializer)); + LOG_AU8_I(cplc_data.IC_OS_initialization_date, sizeof(cplc_data.IC_OS_initialization_date)); + LOG_AU8_I(cplc_data.IC_OS_initialization_equipment, sizeof(cplc_data.IC_OS_initialization_equipment)); + LOG_AU8_I(cplc_data.IC_personalizer, sizeof(cplc_data.IC_personalizer)); + LOG_AU8_I(cplc_data.IC_personalization_date, sizeof(cplc_data.IC_personalization_date)); + LOG_AU8_I(cplc_data.IC_personalization_equipment_ID, sizeof(cplc_data.IC_personalization_equipment_ID)); + LOG_AU8_I(cplc_data.SW, sizeof(cplc_data.SW)); + } + else { + LOG_E("Error in retreiving the CPLC Data. Response is as follows"); + LOG_AU8_E((uint8_t *)&cplc_data, sizeof(cplc_data)); + goto cleanup; + } + status = kStatus_SSS_Success; + +cleanup: + return status; +}
diff --git a/demos/se05x/se05x_I2cMaster/CMakeLists.txt b/demos/se05x/se05x_I2cMaster/CMakeLists.txt new file mode 100644 index 0000000..7acb72f --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/CMakeLists.txt
@@ -0,0 +1,35 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_I2cMaster) + +FILE( + GLOB + ${PROJECT_NAME}_files + se05x_I2cMaster.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME}) + +PROJECT(se05x_I2cMasterWithAttestation) + +FILE( + GLOB + ${PROJECT_NAME}_files + se05x_I2cMasterWithAttestation.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_I2cMaster/I2C-Master-operation.png b/demos/se05x/se05x_I2cMaster/I2C-Master-operation.png new file mode 100644 index 0000000..7034e2e --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/I2C-Master-operation.png Binary files differ
diff --git a/demos/se05x/se05x_I2cMaster/I2C-Master-operation.uml b/demos/se05x/se05x_I2cMaster/I2C-Master-operation.uml new file mode 100644 index 0000000..99fbae1 --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/I2C-Master-operation.uml
@@ -0,0 +1,15 @@ +@startuml + + title I2C Master example to read Accelerometer value + + FrdmK64F -> SE050 : I2CM configure slave device + SE050 -> Accelerometer : Acknowledge slave address + SE050 <- Accelerometer : Response + FrdmK64F <-> SE050 : I2CM Response + + FrdmK64F -> SE050 : I2CM read request + SE050 -> Accelerometer : Read Accelerometer data + SE050 <- Accelerometer : Response + FrdmK64F <-> SE050 : I2CM Response + +@enduml \ No newline at end of file
diff --git a/demos/se05x/se05x_I2cMaster/frdmk64f_nop_wfi.bin b/demos/se05x/se05x_I2cMaster/frdmk64f_nop_wfi.bin new file mode 100644 index 0000000..e47910d --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/frdmk64f_nop_wfi.bin Binary files differ
diff --git a/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-photo.jpg b/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-photo.jpg new file mode 100644 index 0000000..fb8c450 --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-photo.jpg Binary files differ
diff --git a/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-wiring.png b/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-wiring.png new file mode 100644 index 0000000..0f21454 --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/i2cm-accelerometer-k64f-wiring.png Binary files differ
diff --git a/demos/se05x/se05x_I2cMaster/readme.rst b/demos/se05x/se05x_I2cMaster/readme.rst new file mode 100644 index 0000000..7693526 --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/readme.rst
@@ -0,0 +1,107 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: bat + +.. _ex-i2cMaster: + +======================================================================= + I2C Master Example +======================================================================= + +This page is regarding the documentation on I2CM, for more information on +I2CM Transaction, See :numref:`se05x-stack-i2cm` :ref:`se05x-stack-i2cm` + +Prerequisites +======================================================================= + +- Bring Up Hardware. (Refer :ref:`dev-platforms`) + +- Connection to be done for I2C Master example. + +.. image:: i2cm-accelerometer-k64f-wiring.png + + +Here is a photograph of above wiring diagram. + +.. image:: i2cm-accelerometer-k64f-photo.jpg + + +.. note:: - We are using 2nd freedom K64F board only for connecting Accelerometer device to I2CM. + - Short Jumper J9 & J10 of se050ARD board. + +Disable K64F on board 2 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. warning:: If the K64F of the 2nd board doing some operations on I2C Pins, this demo would not work. + +Follow below steps to make this demo work. + +- Flash :file:`frdmk64f_nop_wfi.bin` binary located at :file:`demos/se05x/se05x_I2cMaster` directory to K64F board. +- This binary will put K64F in unoperation state and we will have easy access to Accelerometer through I2C pins. + +Below is the c code :: + + int main(void) + { + /* Init board hardware. */ + BOARD_InitPins(); + BOARD_BootClockRUN(); + BOARD_InitDebugConsole(); + + __disable_irq(); + while (1) + { + __disable_irq(); + __WFI(); + } + } + + +About the Example +======================================================================= + +This example reads Accelerometer data via the I2C master interface. + +The Accelerometer on other K64F is used as an I2C Slave. + +.. image:: I2C-Master-operation.png + +It uses the following APIs and data types: + +- :cpp:func:`Se05x_i2c_master_txn()` +- :cpp:func:`Se05x_i2c_master_attst_txn()` +- :cpp:enumerator:`kSE05x_I2CM_Configure` from :cpp:type:`SE05x_I2CM_TLV_type_t` +- :cpp:enumerator:`kSE05x_I2CM_Write` from :cpp:type:`SE05x_I2CM_TLV_type_t` +- :cpp:enumerator:`kSE05x_I2CM_Read` from :cpp:type:`SE05x_I2CM_TLV_type_t` +- :cpp:enumerator:`kSE05x_I2CM_Baud_Rate_400Khz` from :cpp:type:`SE05x_I2CM_Baud_Rate_t` + + +Running the Demo +======================================================================= + +#) Import project :file:`cmake_project_frdmk64f` from :file:`simw-top/projects` directory. + +#) Mention :samp:`BUILD_TARGET` as :samp:`se05x_I2cMaster` or :file:`se05x_I2cMasterWithAttestation` in :file:`Debug/Makefile`. + +#) Build the project and flash binary inside :file:`FRDMK64F_SE050ARD` board. + +#) Either press the reset button on your board or launch the debugger in your IDE to begin running the demo. + +#) Rotate second K64F in any direction. + +If everything is setup correctly the output would be as follows:: + + App:INFO :I2CM example to read Accelerometer value + App:INFO :x = 113 , y = -73 , z = 2118 + App:INFO :x = 109 , y = -67 , z = 2103 + App:INFO :x = 108 , y = -68 , z = 2120 + App:INFO :x = 117 , y = -69 , z = 2109 + App:INFO :x = 117 , y = -71 , z = 2105 + App:INFO :x = 111 , y = -71 , z = 2108 + App:INFO :x = 115 , y = -72 , z = 2104 + App:INFO :x = 117 , y = -69 , z = 2122 + App:INFO :x = 115 , y = -73 , z = 2120 + App:INFO :x = 115 , y = -74 , z = 2114 + App:INFO :I2CM test completed !!!...
diff --git a/demos/se05x/se05x_I2cMaster/se05x_I2cMaster.c b/demos/se05x/se05x_I2cMaster/se05x_I2cMaster.c new file mode 100644 index 0000000..9a4d928 --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/se05x_I2cMaster.c
@@ -0,0 +1,157 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_const.h> +#include <string.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define I2C_SENSOR_BUS_ADDRESS 0x1D /* I2C bus address of sensor */ +#define KEYSIZE 256 +#define MAX_SIGNATURE_LEN 256 +#define I2C_MAX_DATA 32 +#define FXOS8700CQ_STATUS 0x00 +#define FXOS8700CQ_WHOAMI 0x0D +#define FXOS8700CQ_XYZ_DATA_CFG 0x0E +#define FXOS8700CQ_CTRL_REG1 0x2A +#define FXOS8700CQ_WHOAMI_VAL 0xC7 +#define ACCEL_READ_TIMES 100 + +/* ************************************************************************** */ +/* Static Defines */ +/* ************************************************************************** */ +static ex_sss_boot_ctx_t gex_sss_boot_ctx; + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +SE05x_I2CM_cmd_t TLV[5]; + +#include <ex_sss_main_inc.h> +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +static smStatus_t i2cm_Write(ex_sss_boot_ctx_t *pCtx, uint8_t *writebuf, uint32_t writeLength) +{ + smStatus_t status; + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Write; + TLV[1].cmd.w.writeLength = writeLength; + TLV[1].cmd.w.writebuf = writebuf; + + status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 2); + return status; +} +static smStatus_t i2cm_Read(ex_sss_boot_ctx_t *pCtx, uint8_t *readbuf, uint32_t readLength) +{ + smStatus_t status; + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Read; + TLV[1].cmd.rd.readLength = readLength; + TLV[1].cmd.rd.rdBuf = readbuf; + + status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 3); + return status; +} +static smStatus_t i2cm_WriteRead( + ex_sss_boot_ctx_t *pCtx, uint8_t *writebuf, uint32_t writeLength, uint8_t *readbuf, uint32_t readLength) +{ + smStatus_t status; + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Write; + TLV[1].cmd.w.writeLength = writeLength; + TLV[1].cmd.w.writebuf = writebuf; + + TLV[2].type = kSE05x_I2CM_Read; + TLV[2].cmd.rd.readLength = readLength; + TLV[2].cmd.rd.rdBuf = readbuf; + + status = Se05x_i2c_master_txn(&pCtx->session, &TLV[0], 3); + return status; +} + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + smStatus_t status; + uint8_t pAcclwhoAmIreg[] = {0x0D}; + uint8_t pAcclCtrlReg1[] = {0x2A, 0x00}; + uint8_t pAcclCtrlReg2[] = {0x2A, 0x0D, 0x00}; + uint8_t pAcclxyzDataCfg[] = {0x0E, 0x01}; + uint8_t pacclRead[I2C_MAX_DATA]; + uint8_t status_value = 0; + uint32_t i = 0; +#if LOG_INFO_ENABLED + int16_t x, y, z; +#endif + + LOG_I("I2CM example to read Accelerometer value"); + /* ------------------------------------------------------------------------------------------------------------------- */ + status = i2cm_WriteRead(pCtx, pAcclwhoAmIreg, sizeof(pAcclwhoAmIreg), pacclRead, 1); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_Write(pCtx, pAcclCtrlReg1, sizeof(pAcclCtrlReg1)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_Write(pCtx, pAcclxyzDataCfg, sizeof(pAcclxyzDataCfg)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_Write(pCtx, pAcclCtrlReg2, sizeof(pAcclCtrlReg2)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + for (i = 0; i < ACCEL_READ_TIMES; i++) { + /* wait for new data are ready. */ + while (status_value != 0xff) { + status = i2cm_Read(pCtx, pacclRead, 1); + ENSURE_OR_GO_EXIT(SM_OK == status); + status_value = TLV[1].cmd.rd.rdBuf[0]; + } + status = i2cm_Read(pCtx, pacclRead, 7); + ENSURE_OR_GO_EXIT(SM_OK == status); + +#if LOG_INFO_ENABLED + x = ((int16_t)(((TLV[1].cmd.rd.rdBuf[1] * 256U) | TLV[1].cmd.rd.rdBuf[2]))) / 4U; + y = ((int16_t)(((TLV[1].cmd.rd.rdBuf[3] * 256U) | TLV[1].cmd.rd.rdBuf[4]))) / 4U; + z = ((int16_t)(((TLV[1].cmd.rd.rdBuf[5] * 256U) | TLV[1].cmd.rd.rdBuf[6]))) / 4U; + LOG_I("x = %5d , y = %5d , z = %5d", x, y, z); +#endif + } + LOG_I("I2CM test completed !!!..."); + LOG_I("se05x_I2cMaster Example Success !!!..."); + return kStatus_SSS_Success; + +exit: + LOG_E("se05x_I2cMaster Example Failed !!!..."); + return kStatus_SSS_Fail; +}
diff --git a/demos/se05x/se05x_I2cMaster/se05x_I2cMasterWithAttestation.c b/demos/se05x/se05x_I2cMaster/se05x_I2cMasterWithAttestation.c new file mode 100644 index 0000000..fc9c13f --- /dev/null +++ b/demos/se05x/se05x_I2cMaster/se05x_I2cMasterWithAttestation.c
@@ -0,0 +1,360 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_const.h> +#include <string.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define I2C_SENSOR_BUS_ADDRESS 0x1D /* I2C bus address of sensor */ +#define KEYSIZE 256 +#define MAX_SIGNATURE_LEN 256 +#define I2C_MAX_DATA 32 +#define FXOS8700CQ_STATUS 0x00 +#define FXOS8700CQ_WHOAMI 0x0D +#define FXOS8700CQ_XYZ_DATA_CFG 0x0E +#define FXOS8700CQ_CTRL_REG1 0x2A +#define FXOS8700CQ_WHOAMI_VAL 0xC7 +#define ACCEL_READ_TIMES 100 + +/* ************************************************************************** */ +/* Static Defines */ +/* ************************************************************************** */ +static ex_sss_boot_ctx_t gex_sss_boot_ctx; + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +SE05x_I2CM_cmd_t TLV[5]; + +#include <ex_sss_main_inc.h> +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ +static sss_status_t i2cm_ConfigureAttestation(ex_sss_boot_ctx_t *pCtx, sss_object_t *key) +{ + sss_status_t ret = kStatus_SSS_Success; + //sss_object_t &key; + size_t keylen = KEYSIZE; + uint32_t keyId = __LINE__; + const sss_policy_u key_withPol = {.type = KPolicy_Asym_Key, + .auth_obj_id = 0, + .policy = {.asymmkey = { + .can_Sign = 1, + .can_Verify = 1, + .can_Encrypt = 1, + .can_Decrypt = 1, + .can_KD = 1, + .can_Wrap = 1, + .can_Write = 1, + .can_Gen = 1, + .can_Import_Export = 1, + .can_KA = 1, + .can_Read = 1, + .can_Attest = 1, + }}}; + const sss_policy_u common = {.type = KPolicy_Common, + .auth_obj_id = 0, + .policy = {.common = { + .can_Delete = 1, + .forbid_All = 0, + }}}; + sss_policy_t policy_for_asym_key = {.nPolicies = 2, .policies = {&key_withPol, &common}}; + ret = sss_key_object_init(key, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(kStatus_SSS_Success == ret); + + ret = sss_key_object_allocate_handle( + key, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(kStatus_SSS_Success == ret); + + /*ret = sss_key_object_get_handle(&key, keyId); + if (ret == kStatus_SSS_Success) { + LOG_W("KeyId 0x%8X Already Exsist", keyId); + ret = sss_key_store_erase_key(&pCtx->ks, &key); + ENSURE_OR_GO_CLEANUP(ret == kStatus_SSS_Success); + }*/ + + ENSURE_OR_GO_CLEANUP(kStatus_SSS_Success == ret); + + ret = sss_key_object_allocate_handle( + key, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(kStatus_SSS_Success == ret); + + /*ret = sss_key_object_get_handle(&key, keyId); + if (ret == kStatus_SSS_Success) { + LOG_W("KeyId 0x%8X Already Exsist", keyId); + ret = sss_key_store_erase_key(&pCtx->ks, &key); + ENSURE_OR_GO_CLEANUP(ret == kStatus_SSS_Success); + }*/ + + ret = sss_key_store_generate_key(&pCtx->ks, key, keylen, &policy_for_asym_key); + ENSURE_OR_GO_CLEANUP(kStatus_SSS_Success == ret); + + return kStatus_SSS_Success; +cleanup: + return kStatus_SSS_Fail; +} + +static smStatus_t i2cm_AttestedWrite(ex_sss_boot_ctx_t *pCtx, + uint8_t *random, + size_t randomLen, + sss_object_t *key, + SE05x_AttestationAlgo_t attest_algo, + uint8_t *writebuf, + uint32_t writeLength) +{ + smStatus_t status; + size_t iCnt; + uint8_t outrandom[16] = {0}; + /* clang-format on */ + size_t outrandomLen = sizeof(outrandom); + uint8_t chipId[SE050_MODULE_UNIQUE_ID_LEN] = {0}; + size_t chipIdLen = sizeof(chipId); + uint8_t signature[256] = {0}; + size_t signatureLen = MAX_SIGNATURE_LEN; + SE05x_TimeStamp_t timeStamp; + size_t timeStampLen = sizeof(timeStamp); + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Write; + TLV[1].cmd.w.writeLength = writeLength; + TLV[1].cmd.w.writebuf = writebuf; + + status = Se05x_i2c_master_attst_txn(&pCtx->session, + key, + &TLV[0], + random, + randomLen, + attest_algo, + &timeStamp, + &timeStampLen, + outrandom, + &outrandomLen, + chipId, + &chipIdLen, + signature, + &signatureLen, + 2); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_TIMESTAMP_SIZE == timeStampLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_CHIP_ID_SIZE == chipIdLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_FRESHNESS_SIZE == outrandomLen); + for (iCnt = 0; iCnt < outrandomLen; iCnt++) { + if (random[iCnt] == outrandom[iCnt]) + continue; + else { + LOG_E("failed to verify freshness data"); + return status; + } + } + return status; +exit: + return SM_NOT_OK; +} +static smStatus_t i2cm_AttestedRead(ex_sss_boot_ctx_t *pCtx, + uint8_t *random, + size_t randomLen, + sss_object_t *key, + SE05x_AttestationAlgo_t attest_algo, + uint8_t *readbuf, + uint32_t readLength) +{ + smStatus_t status; + uint32_t iCnt; + uint8_t outrandom[16] = {0}; + /* clang-format on */ + size_t outrandomLen = sizeof(outrandom); + uint8_t chipId[SE050_MODULE_UNIQUE_ID_LEN] = {0}; + size_t chipIdLen = sizeof(chipId); + uint8_t signature[256] = {0}; + size_t signatureLen = MAX_SIGNATURE_LEN; + SE05x_TimeStamp_t timeStamp; + size_t timeStampLen = sizeof(timeStamp); + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Read; + TLV[1].cmd.rd.readLength = readLength; + TLV[1].cmd.rd.rdBuf = readbuf; + + status = Se05x_i2c_master_attst_txn(&pCtx->session, + key, + &TLV[0], + random, + randomLen, + attest_algo, + &timeStamp, + &timeStampLen, + outrandom, + &outrandomLen, + chipId, + &chipIdLen, + signature, + &signatureLen, + 2); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_TIMESTAMP_SIZE == timeStampLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_CHIP_ID_SIZE == chipIdLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_FRESHNESS_SIZE == outrandomLen); + for (iCnt = 0; iCnt < outrandomLen; iCnt++) { + if (random[iCnt] == outrandom[iCnt]) + continue; + else { + LOG_E("failed to verify freshness data"); + return status; + } + } + return status; +exit: + return SM_NOT_OK; +} +static smStatus_t i2cm_AttestedWriteRead(ex_sss_boot_ctx_t *pCtx, + uint8_t *random, + size_t randomLen, + sss_object_t *key, + SE05x_AttestationAlgo_t attest_algo, + uint8_t *writebuf, + uint32_t writeLength, + uint8_t *readbuf, + uint32_t readLength) +{ + smStatus_t status; + uint32_t iCnt; + uint8_t outrandom[16] = {0}; + /* clang-format on */ + size_t outrandomLen = sizeof(outrandom); + uint8_t chipId[SE050_MODULE_UNIQUE_ID_LEN] = {0}; + size_t chipIdLen = sizeof(chipId); + uint8_t signature[256] = {0}; + size_t signatureLen = MAX_SIGNATURE_LEN; + SE05x_TimeStamp_t timeStamp; + size_t timeStampLen = sizeof(timeStamp); + TLV[0].type = kSE05x_I2CM_Configure; + TLV[0].cmd.cfg.I2C_addr = I2C_SENSOR_BUS_ADDRESS; + TLV[0].cmd.cfg.I2C_baudRate = kSE05x_I2CM_Baud_Rate_400Khz; + + TLV[1].type = kSE05x_I2CM_Write; + TLV[1].cmd.w.writeLength = writeLength; + TLV[1].cmd.w.writebuf = writebuf; + + TLV[2].type = kSE05x_I2CM_Read; + TLV[2].cmd.rd.readLength = readLength; + TLV[2].cmd.rd.rdBuf = readbuf; + + status = Se05x_i2c_master_attst_txn(&pCtx->session, + key, + &TLV[0], + random, + randomLen, + attest_algo, + &timeStamp, + &timeStampLen, + outrandom, + &outrandomLen, + chipId, + &chipIdLen, + signature, + &signatureLen, + 3); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_TIMESTAMP_SIZE == timeStampLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_CHIP_ID_SIZE == chipIdLen); + ENSURE_OR_GO_EXIT(SE05X_I2CM_MAX_FRESHNESS_SIZE == outrandomLen); + for (iCnt = 0; iCnt < outrandomLen; iCnt++) { + if (random[iCnt] == outrandom[iCnt]) + continue; + else { + LOG_E("failed to verify freshness data"); + return status; + } + } + return status; +exit: + return SM_NOT_OK; +} + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + smStatus_t status; + sss_status_t ret; + sss_object_t key; + uint8_t pAcclwhoAmIreg[] = {0x0D}; + uint8_t pAcclCtrlReg1[] = {0x2A, 0x00}; + uint8_t pAcclCtrlReg2[] = {0x2A, 0x0D, 0x00}; + uint8_t pAcclxyzDataCfg[] = {0x0E, 0x01}; + uint8_t pacclRead[I2C_MAX_DATA]; + uint8_t status_value = 0; + uint32_t i = 0; +#if LOG_INFO_ENABLED + int16_t x, y, z; +#endif + SE05x_AttestationAlgo_t attest_algo = kSE05x_AttestationAlgo_EC_SHA_512; + uint8_t random[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf}; + size_t randomLen = sizeof(random); + + LOG_I("I2CM example to read attested Accelerometer value"); + /* ------------------------------------------------------------------------------------------------------------------- */ + ret = i2cm_ConfigureAttestation(pCtx, &key); + ENSURE_OR_GO_EXIT(kStatus_SSS_Success == ret); + + status = i2cm_AttestedWriteRead( + pCtx, random, randomLen, &key, attest_algo, pAcclwhoAmIreg, sizeof(pAcclwhoAmIreg), pacclRead, 1); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_AttestedWrite(pCtx, random, randomLen, &key, attest_algo, pAcclCtrlReg1, sizeof(pAcclCtrlReg1)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_AttestedWrite(pCtx, random, randomLen, &key, attest_algo, pAcclxyzDataCfg, sizeof(pAcclxyzDataCfg)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + status = i2cm_AttestedWrite(pCtx, random, randomLen, &key, attest_algo, pAcclCtrlReg2, sizeof(pAcclCtrlReg2)); + ENSURE_OR_GO_EXIT(SM_OK == status); + ENSURE_OR_GO_EXIT(kSE05x_I2CM_Success == TLV[1].cmd.w.wrStatus); + + for (i = 0; i < ACCEL_READ_TIMES; i++) { + /* wait for new data are ready. */ + while (status_value != 0xff) { + status = i2cm_AttestedRead(pCtx, random, randomLen, &key, attest_algo, pacclRead, 1); + ENSURE_OR_GO_EXIT(SM_OK == status); + status_value = TLV[1].cmd.rd.rdBuf[0]; + } + status = i2cm_AttestedRead(pCtx, random, randomLen, &key, attest_algo, pacclRead, 7); + ENSURE_OR_GO_EXIT(SM_OK == status); + +#if LOG_INFO_ENABLED + x = ((int16_t)(((TLV[1].cmd.rd.rdBuf[1] * 256U) | TLV[1].cmd.rd.rdBuf[2]))) / 4U; + y = ((int16_t)(((TLV[1].cmd.rd.rdBuf[3] * 256U) | TLV[1].cmd.rd.rdBuf[4]))) / 4U; + z = ((int16_t)(((TLV[1].cmd.rd.rdBuf[5] * 256U) | TLV[1].cmd.rd.rdBuf[6]))) / 4U; + + LOG_I("x = %5d , y = %5d , z = %5d", x, y, z); +#endif + } + + LOG_I("I2CM test completed !!!..."); + + return kStatus_SSS_Success; + +exit: + return kStatus_SSS_Fail; +}
diff --git a/demos/se05x/se05x_ImportExternalObjectPrepare/CMakeLists.txt b/demos/se05x/se05x_ImportExternalObjectPrepare/CMakeLists.txt new file mode 100644 index 0000000..389d5d0 --- /dev/null +++ b/demos/se05x/se05x_ImportExternalObjectPrepare/CMakeLists.txt
@@ -0,0 +1,20 @@ +PROJECT(se05x_ImportExternalObjectPrepare) + +FILE( + GLOB + files + ${PROJECT_NAME}.c + ${PROJECT_NAME}.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_ImportExternalObjectPrepare/Readme.rst b/demos/se05x/se05x_ImportExternalObjectPrepare/Readme.rst new file mode 100644 index 0000000..f044050 --- /dev/null +++ b/demos/se05x/se05x_ImportExternalObjectPrepare/Readme.rst
@@ -0,0 +1,87 @@ +.. + Copyright 2020 NXP + + +.. _import-external-obj-prepare: + +================================================= + Import External Object Prepare +================================================= + +Import External Object command allows the user to import +an external object wrapped with a secure ``ECKey_Auth`` +context. A session is not required to execute this command, +the ``ECKey_Auth`` parameters are provided with the wrapped +WriteSecureObject command. The applet will use ``ECKey_Auth`` +parameters and derive session keys to unwrap the command +and execute it. ``ImportExternalObject`` command works in its +own session. It will open an ``ECKey`` session, write the secure +object and close the session. + + + +In this example, we prepare a complete raw APDU to be sent +to SE05x. A ``WriteSecureObject`` command needs to be prepared +which will be wrapped and sent as a part of ``ImportExternalObject`` +command. For an example we are preparing ``WriteSymmKey`` command as : + + +.. literalinclude:: se05x_ImportExternalObjectPrepare.c + :dedent: 4 + :language: c + :start-after: /* doc:start:writesecureobjbuf */ + :end-before: /* doc:end:writesecureobjbuf */ + + +.. literalinclude:: se05x_ImportExternalObjectPrepare.c + :language: c + :start-after: /* doc:start:createapdubuf */ + :end-before: /* doc:end:createapdubuf */ + +.. literalinclude:: se05x_ImportExternalObjectPrepare.c + :language: c + :start-after: /* doc:start:transformsapdubuf */ + :end-before: /* doc:end:transformsapdubuf */ + +.. literalinclude:: se05x_ImportExternalObjectPrepare.c + :language: c + :start-after: /* doc:start:transmitapdubuf */ + :end-before: /* doc:end:transmitapdubuf */ + +.. literalinclude:: se05x_ImportExternalObjectPrepare.c + :language: c + :start-after: /* doc:start:decryptsresponsebuf */ + :end-before: /* doc:end:decryptsresponsebuf */ + + +You can call any of the ``WriteSecureObject`` API with your data +and create the buffer. + + +Building +================================================= + +Build the project with the following configurations. + +**se05x_ImportExternalObjectPrepare** + +- ``Project = se05x_ImportExternalObjectPrepare`` +- ``SCP=SCP03_SSS`` +- ``SE05x_Auth=ECKey`` + + +How to use +================================================= + +Generate the raw APDU file by running the executable. Run +**se05x_ImportExternalObjectPrepare** as :: + + se05x_ImportExternalObjectPrepare.exe -keyid 0x7DA00003 -file eckey_ecdsa.der <portName> + +where, + +- *keyid* is the authentication keyId at which ECDSA public key is stored. +- *file* is the input ECDSA keypair file (in binary format) +- *portName* is the name of the port over which to connect (COMPORT in case running over VCOM) + +
diff --git a/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.c b/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.c new file mode 100644 index 0000000..c584c0a --- /dev/null +++ b/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.c
@@ -0,0 +1,799 @@ +/* +* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include "se05x_ImportExternalObjectPrepare.h" + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_policy.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <nxScp03_Apis.h> +#include <nxScp03_Const.h> +#include <se05x_APDU.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <smCom.h> + +#include "fsl_sss_util_asn1_der.h" +#include "smCom.h" + +static ex_sss_boot_ctx_t gex_sss_import_external_prepare; +uint8_t gTxBuffer[SE05X_MAX_BUF_SIZE_CMD]; +size_t gTxBufferLen; +Se05xSession_t *pgSe05xSessionCtx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_import_external_prepare) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#include <ex_sss_main_inc.h> + +void usage() +{ + LOG_W( + "\n\ + Usage:\n\ + se05x_ImportExternalObjectPrepare.exe \n\ + -keyid <ECDSA auth object id>\n\ + -file <Input ECDSA keypair file>"); + return; +} + +static sss_status_t parse_command_line_args(int argc, const char **argv); +static sss_status_t calculate_shared_secret(ex_sss_boot_ctx_t *pCtx); +static sss_status_t calculate_master_secret(ex_sss_boot_ctx_t *pCtx); +static sss_status_t nxECKey_HostLocal_CalculateSessionKeys(ex_sss_boot_ctx_t *pCtx); +static sss_status_t nxECKey_Calculate_Initial_Mac_Chaining_Value(ex_sss_boot_ctx_t *pCtx); + +static sss_status_t read_se_ecka_and_store(ex_sss_boot_ctx_t *pCtx); +static sss_status_t generate_tee_ecka_and_export(ex_sss_boot_ctx_t *pCtx, + uint8_t *pk_tee_ecka, + size_t *pk_tee_ecka_len, + size_t *publicKeyLen, + uint16_t *outKeyIndex); +static sss_status_t store_ecdsa_key(ex_sss_boot_ctx_t *pCtx); +static sss_status_t create_internal_auth_data(ex_sss_boot_ctx_t *pCtx, + uint8_t *p_to_be_signed_buf, + size_t *to_be_signed_len, + uint8_t *pk_tee_ecka, + size_t publicKeyLen); + +smStatus_t se05x_ImportExtObjTransformBuffer(Se05xSession_t *pwrite_apdubufferctx, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle); + +smStatus_t se05x_ImportExtObjCreateAPDU(Se05xSession_t *pwrite_apdubufferctx, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle); + +static smStatus_t se05x_ImportExtObjTransmitBuffer(void *conn_ctx, + struct _sss_se05x_tunnel_context *pChannelCtx, + SE_AuthType_t currAuth, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle); + +smStatus_t se05x_ImportExtObjDecryptResponse( + struct Se05xSession *pSessionCtx, size_t cmd_cmacLen, uint8_t *rsp, size_t *rspLength, uint8_t hasle); + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status; + smStatus_t sm_status = SM_NOT_OK; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + uint8_t pk_tee_ecka[256] = {0}; + size_t pk_tee_ecka_len = sizeof(pk_tee_ecka); + size_t publicKeyLen; + uint16_t outKeyIndex; + uint8_t to_be_signed[200] = {0}; + size_t to_be_signed_len = 0; + sss_digest_t digest_ctx; + uint8_t digest[32] = {0}; + size_t digestLen = sizeof(digest); + sss_asymmetric_t asymm_ctx; + uint8_t signature[80] = {0}; + size_t signatureLen = sizeof(signature); + uint8_t internal_auth_pk_tee_ecka_sig_tag[] = INTERNAL_AUTH_PK_TEE_ECKA_SIG_TAG; + uint8_t auth_data[256] = {0}; + size_t auth_data_len = 0; + uint8_t auth_id[4] = {0}; + NXSCP03_DynCtx_t dyn_ctx; + uint8_t EncryptedAPDU[100] = {0}; + uint8_t EncryptedAPDUWithHeader[300] = {0}; + size_t EncryptedAPDUWithHeaderLen = 0; + uint8_t mac[16] = {0}; + size_t macLen; + + sss_se05x_session_t *se05x_session = (sss_se05x_session_t *)&pCtx->session; + pgSe05xSessionCtx = &se05x_session->s_ctx; + + /* Parse commandline arguments */ + status = parse_command_line_args(argc, argv); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + for (int i = 0; i < 4; ++i) + auth_id[i] = ((uint8_t *)&ecdsa_auth_id)[3 - i]; + + sss_se05x_session_t se05xWriteBufferSession; + Se05xSession_t *pse05xWriteBufferSessionCtx = &se05xWriteBufferSession.s_ctx; + + /* Read PK.SE.ECKA */ + status = read_se_ecka_and_store(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Generate SK.TEE.ECKA and read PK.TEE.ECKA */ + status = generate_tee_ecka_and_export(pCtx, pk_tee_ecka, &pk_tee_ecka_len, &publicKeyLen, &outKeyIndex); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Store ECDSA key in host */ + status = store_ecdsa_key(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Create InternalAuth TLV to be signed by ECDSA key */ + status = create_internal_auth_data(pCtx, to_be_signed, &to_be_signed_len, &pk_tee_ecka[outKeyIndex], publicKeyLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Sign InternalAuth data + * Data should be hashed and signed + * Signature algorithm should be kAlgorithm_SSS_ECDSA_SHA256 + */ + status = sss_digest_context_init(&digest_ctx, &pCtx->host_session, kAlgorithm_SSS_SHA256, kMode_SSS_Digest); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_digest_one_go(&digest_ctx, to_be_signed, to_be_signed_len, digest, &digestLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + sss_digest_context_free(&digest_ctx); + + status = sss_asymmetric_context_init( + &asymm_ctx, &pCtx->host_session, &hostECDSAkey_object, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_asymmetric_sign_digest(&asymm_ctx, digest, digestLen, signature, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + sss_asymmetric_context_free(&asymm_ctx); + + /* Add signature to 0x5F37 tag */ + + memcpy(&auth_data[auth_data_len], to_be_signed, to_be_signed_len); + auth_data_len += to_be_signed_len; + memcpy(&auth_data[auth_data_len], internal_auth_pk_tee_ecka_sig_tag, sizeof(internal_auth_pk_tee_ecka_sig_tag)); + auth_data_len += sizeof(internal_auth_pk_tee_ecka_sig_tag); + auth_data[auth_data_len++] = (uint8_t)signatureLen; + memcpy(&auth_data[auth_data_len], signature, signatureLen); + auth_data_len += signatureLen; + + status = calculate_shared_secret(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = calculate_master_secret(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = nxECKey_HostLocal_CalculateSessionKeys(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = nxECKey_Calculate_Initial_Mac_Chaining_Value(pCtx); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + pse05xWriteBufferSessionCtx->authType = kSSS_AuthType_ECKey; + pse05xWriteBufferSessionCtx->pdynScp03Ctx = &dyn_ctx; + memcpy(&pse05xWriteBufferSessionCtx->pdynScp03Ctx->Enc, &enc_obj, sizeof(sss_object_t)); + memcpy(&pse05xWriteBufferSessionCtx->pdynScp03Ctx->Mac, &mac_obj, sizeof(sss_object_t)); + memcpy(&pse05xWriteBufferSessionCtx->pdynScp03Ctx->Rmac, &rmac_obj, sizeof(sss_object_t)); + memcpy(pse05xWriteBufferSessionCtx->pdynScp03Ctx->MCV, iniMacChaining, 16); + memcpy(pse05xWriteBufferSessionCtx->pdynScp03Ctx->cCounter, commandCounter, 16); + pse05xWriteBufferSessionCtx->pdynScp03Ctx->authType = kSSS_AuthType_ECKey; + pse05xWriteBufferSessionCtx->pdynScp03Ctx->SecurityLevel = SECURITY_LEVEL; + + /* doc:start:writesecureobjbuf */ + /* Symmetric Key */ + /* clang-format off */ + uint8_t keyValue[] = {0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x48, 0x45, 0x4C, 0x4C, 0x4F, 0x31}; + /* clang-format on */ + /* API to create buffer */ + pse05xWriteBufferSessionCtx->fp_TXn = &se05x_ImportExtObjCreateAPDU; + int index = 0; + + sm_status = Se05x_API_WriteSymmKey(pse05xWriteBufferSessionCtx, + NULL, + SE05x_MaxAttemps_NA, + __LINE__, + SE05x_KeyID_KEK_NONE, + keyValue, + sizeof(keyValue), + kSE05x_INS_NA, + kSE05x_SymmKeyType_AES); + if (sm_status != SM_OK) { + LOG_E("Failed to create buffer"); + status = kStatus_SSS_Fail; + goto exit; + } + + /* WriteSecureObject API will prepare complete APDU. + * We need to skip initial CLA INS P1 P2 and use just the TLVs + * + * The length is determined by the first length byte. If it + * is 0x00, the next two bytes are the length, otherwise that + * byte is the length. + * + * Determine the length here and accordingly determine the TLV. + */ + if (gTxBuffer[4] == 0x00) { + WriteSymmKeyAPDU_len = ((gTxBuffer[5] << 8) && 0xFF00) | ((gTxBuffer[6]) && 0xFF); + index = 7; + } + else { + WriteSymmKeyAPDU_len = gTxBuffer[4]; + index = 5; + } + if (WriteSymmKeyAPDU_len > sizeof(WriteSymmKeyAPDU)) { + LOG_E("Insufficient buffer"); + status = kStatus_SSS_Fail; + goto exit; + } + memcpy(WriteSymmKeyAPDU, &gTxBuffer[index], WriteSymmKeyAPDU_len); + /* doc:end:writesecureobjbuf */ + + /* Wrap WriteSecureObject APDU with FastSCP context */ + memcpy(EncryptedAPDU, WriteSymmKeyAPDU, WriteSymmKeyAPDU_len); + status = + nxSCP03_Encrypt_CommandAPDU(pse05xWriteBufferSessionCtx->pdynScp03Ctx, EncryptedAPDU, &WriteSymmKeyAPDU_len); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Add header containing CLA INS P1 P2 */ + EncryptedAPDUWithHeader[0] = 0x84; /* CLA */ + EncryptedAPDUWithHeader[1] = 0x01; /* INS */ + EncryptedAPDUWithHeader[2] = 0x03; /* P1 */ + EncryptedAPDUWithHeader[3] = 0x00; /* P2 */ + EncryptedAPDUWithHeader[4] = (uint8_t)WriteSymmKeyAPDU_len + 8 /* Length of mac added */; + + memcpy(&EncryptedAPDUWithHeader[5], EncryptedAPDU, WriteSymmKeyAPDU_len); + EncryptedAPDUWithHeaderLen = WriteSymmKeyAPDU_len + 5; + /* Add MAC to the wrapped command */ + status = nxpSCP03_CalculateMac_CommandAPDU( + pse05xWriteBufferSessionCtx->pdynScp03Ctx, EncryptedAPDUWithHeader, EncryptedAPDUWithHeaderLen, mac, &macLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + +#if SSS_HAVE_SE05X_VER_GTE_06_00 + /* Save MAC for RMAC calculation */ + memcpy(ObjectMAC, mac, 16); +#endif + + memcpy(&EncryptedAPDUWithHeader[EncryptedAPDUWithHeaderLen], mac, 8); + EncryptedAPDUWithHeaderLen += 8; + LOG_D("Restore MCV "); +#if SSS_HAVE_SE05X_VER_GTE_06_00 + /* For 5.10 applet onwards Current MAC is MCV*/ + memcpy(pse05xWriteBufferSessionCtx->pdynScp03Ctx->MCV, ObjectMAC, 16); +#else + /* Before 5.10 applet initial MAC is MCV*/ + memcpy(pse05xWriteBufferSessionCtx->pdynScp03Ctx->MCV, iniMacChaining, 16); +#endif + + pse05xWriteBufferSessionCtx->fp_TXn = &se05x_ImportExtObjTransformBuffer; + pse05xWriteBufferSessionCtx->fp_RawTXn = &se05x_ImportExtObjTransmitBuffer; + pse05xWriteBufferSessionCtx->fp_DeCrypt = &se05x_ImportExtObjDecryptResponse; + /* Create raw APDU for ImportExternalObject */ + sm_status = Se05x_API_ImportExternalObject(pse05xWriteBufferSessionCtx, + auth_data, + auth_data_len, + auth_id, + sizeof(auth_id), + EncryptedAPDUWithHeader, + EncryptedAPDUWithHeaderLen); + + status = (sm_status == SM_OK) ? kStatus_SSS_Success : kStatus_SSS_Fail; + +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_ImportExternalObjectPrepare Example Success !!!..."); + } + else { + LOG_E("se05x_ImportExternalObjectPrepare Example Failed !!!..."); + } + return status; +} + +static sss_status_t parse_command_line_args(int argc, const char **argv) +{ + bool ecdsa_file_parameter_passed = false; + bool ecdsa_auth_id_passed = false; + + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-file") == 0) { + ecdsa_file_parameter_passed = true; + j++; + const char *filename = argv[j]; + FILE *fp = fopen(filename, "rb"); + if (fp == NULL) { + LOG_E("Cannot open file"); + return kStatus_SSS_Fail; + } + fread(hostEcdsakey, sizeof(hostEcdsakey), 1, fp); + fclose(fp); + } + else if (strcmp(argv[j], "-keyid") == 0) { + ecdsa_auth_id_passed = true; + j++; + ecdsa_auth_id = (uint32_t)strtoul(argv[j], NULL, 16); + } + } + if (!ecdsa_file_parameter_passed) { + LOG_E("ECDSA file parameter not passed"); + usage(); + return kStatus_SSS_Fail; + } + if (!ecdsa_auth_id_passed) { + LOG_E("ECDSA KeyID not passed"); + usage(); + return kStatus_SSS_Fail; + } + + return kStatus_SSS_Success; +} + +static sss_status_t calculate_shared_secret(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_derive_key_t dervCtx; + size_t sharedSecBitLen = 0; + /* Derive shared secret using PK.SE.ECKA and SK.TEE.ECKA + * This will be stored in shsSecret object + */ + status = sss_key_object_init(&shsSecret, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &shsSecret, __LINE__, kSSS_KeyPart_Default, kSSS_CipherType_AES, 32, kKeyObject_Mode_Transient); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_derive_key_context_init( + &dervCtx, &pCtx->host_session, &sk_tee_ecka_obj, kAlgorithm_SSS_ECDH, kMode_SSS_ComputeSharedSecret); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_derive_key_dh(&dervCtx, &se_ecka_pub_host_obj, &shsSecret); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(shsSecret.keyStore, &shsSecret, sharedSecret, &sharedSecretLen, &sharedSecBitLen); + LOG_D("sharedSecret"); + LOG_AU8_D(sharedSecret, sharedSecretLen); + +cleanup: + sss_derive_key_context_free(&dervCtx); + sss_key_object_free(&shsSecret); + return status; +} + +static sss_status_t calculate_master_secret(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_digest_t md; + /* Fixed DR.SE */ + uint8_t dr_se[16] = {0}; + size_t dr_se_len = sizeof(dr_se); + + uint8_t derivationInput[100] = {0}; + size_t derivationInputLen = 0; + +#if SSS_HAVE_SE05X_VER_GTE_06_00 || SSS_HAVE_FIPS + const uint8_t kdf_counter[] = {0x00, 0x00, 0x00, 0x01}; + memcpy(&derivationInput[derivationInputLen], kdf_counter, sizeof(kdf_counter)); + derivationInputLen += sizeof(kdf_counter); +#endif + /* Calculate master secret using previously derived shared secret and dr.se (fixed) */ + memcpy(&derivationInput[derivationInputLen], sharedSecret, sharedSecretLen); + derivationInputLen += sharedSecretLen; + memcpy(&derivationInput[derivationInputLen], dr_se, dr_se_len); + derivationInputLen += dr_se_len; + + derivationInput[derivationInputLen++] = SCP_CONFIG; + derivationInput[derivationInputLen++] = SECURITY_LEVEL; + derivationInput[derivationInputLen++] = GPCS_KEY_TYPE_AES; + derivationInput[derivationInputLen++] = GPCS_KEY_LEN_AES; + + status = sss_digest_context_init(&md, &pCtx->host_session, kAlgorithm_SSS_SHA256, kMode_SSS_Digest); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_digest_one_go(&md, derivationInput, derivationInputLen, masterSk, &masterSkLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + sss_digest_context_free(&md); + masterSkLen = 16; + LOG_MAU8_D("Master Secret", masterSk, masterSkLen); + /*Set the Master secret as AES Key*/ + status = sss_key_object_init(&masterSec, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &masterSec, __LINE__, kSSS_KeyPart_Default, kSSS_CipherType_AES, 32, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_host_key_store_set_key(&pCtx->host_ks, &masterSec, masterSk, masterSkLen, masterSkLen * 8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_I("master shared Secret !!!!"); + LOG_AU8_I(masterSk, masterSkLen); +cleanup: + return status; +} + +static sss_status_t nxECKey_HostLocal_CalculateSessionKeys(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t ddA[128]; + uint16_t ddALen = sizeof(ddA); + uint8_t sessionEncKey[16]; + uint8_t sessionMacKey[16]; + uint8_t sessionRmacKey[16]; + uint32_t signatureLen = 16; + + /* Generation and Creation of Session ENC SSS Key Object */ + + // Set the Derviation data + nxScp03_setDerivationData( + ddA, &ddALen, DATA_DERIVATION_SENC, DATA_DERIVATION_L_128BIT, DATA_DERIVATION_KDF_CTR, NULL, 0); + // Calculate the Session-ENC key + status = nxScp03_Generate_SessionKey(&masterSec, ddA, ddALen, sessionEncKey, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_MAU8_I("sessionEncKey", sessionEncKey, 16); + // Set the Session-ENC key + status = sss_key_object_init(&enc_obj, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &enc_obj, __LINE__, kSSS_KeyPart_Default, kSSS_CipherType_AES, 32, kKeyObject_Mode_Persistent); + status = sss_key_store_set_key(&pCtx->host_ks, &enc_obj, sessionEncKey, 16, (16) * 8, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Generation and Creation of Session MAC SSS Key Object */ + + // Set the Derviation data + nxScp03_setDerivationData( + ddA, &ddALen, DATA_DERIVATION_SMAC, DATA_DERIVATION_L_128BIT, DATA_DERIVATION_KDF_CTR, NULL, 0); + // Calculate the Session-MAC key + status = nxScp03_Generate_SessionKey(&masterSec, ddA, ddALen, sessionMacKey, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_MAU8_I("sessionMacKey", sessionMacKey, 16); + // Set the Session-MAC key + status = sss_key_object_init(&mac_obj, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &mac_obj, __LINE__, kSSS_KeyPart_Default, kSSS_CipherType_AES, 32, kKeyObject_Mode_Persistent); + status = sss_host_key_store_set_key(&pCtx->host_ks, &mac_obj, sessionMacKey, 16, (16) * 8, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Generation and Creation of Session RMAC SSS Key Object */ + + // Set the Derviation data + nxScp03_setDerivationData( + ddA, &ddALen, DATA_DERIVATION_SRMAC, DATA_DERIVATION_L_128BIT, DATA_DERIVATION_KDF_CTR, NULL, 0); + // Calculate the Session-RMAC key + status = nxScp03_Generate_SessionKey(&masterSec, ddA, ddALen, sessionRmacKey, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_MAU8_I("sessionRmacKey", sessionRmacKey, 16); + // Set the Session-RMAC key + status = sss_key_object_init(&rmac_obj, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &rmac_obj, __LINE__, kSSS_KeyPart_Default, kSSS_CipherType_AES, 32, kKeyObject_Mode_Persistent); + status = sss_host_key_store_set_key(&pCtx->host_ks, &rmac_obj, sessionRmacKey, 16, (16) * 8, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); +exit: + return status; +} + +static sss_status_t nxECKey_Calculate_Initial_Mac_Chaining_Value(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t ddA[128]; + uint16_t ddALen = sizeof(ddA); + uint32_t signatureLen = 16; + + // Set the Derviation data + nxScp03_setDerivationData( + ddA, &ddALen, DATA_DERIVATION_INITIAL_MCV, DATA_DERIVATION_L_128BIT, DATA_DERIVATION_KDF_CTR, NULL, 0); + // Calculate the Initial MCV value + status = nxScp03_Generate_SessionKey(&masterSec, ddA, ddALen, iniMacChaining, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_MAU8_I("Initial MCV", iniMacChaining, 16); + // Set the Initial MCV value +exit: + return status; +} +/* doc:start:transformsapdubuf */ +/* This API transforms buffer to APDU and internally calls transmit and Decrypt */ +smStatus_t se05x_ImportExtObjTransformBuffer(Se05xSession_t *pSe05xSession, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle) +{ + memset(gTxBuffer, 0, sizeof(gTxBuffer)); + size_t i = 0; + memcpy(&gTxBuffer[i], hdr, sizeof(*hdr)); + smStatus_t ret = SM_NOT_OK; + i += sizeof(*hdr); + if (cmdBufLen > 0) { + // The Lc field must be extended in case the length does not fit + // into a single byte (Note, while the standard would allow to + // encode 0x100 as 0x00 in the Lc field, nobody who is sane in his mind + // would actually do that). + if ((cmdBufLen < 0xFF) && !hasle) { + gTxBuffer[i++] = (uint8_t)cmdBufLen; + } + else { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0xFFu & (cmdBufLen >> 8); + gTxBuffer[i++] = 0xFFu & (cmdBufLen); + } + ENSURE_OR_GO_EXIT(cmdBufLen <= sizeof(gTxBuffer) - i); + memcpy(&gTxBuffer[i], cmdBuf, cmdBufLen); + i += cmdBufLen; + } + if (hasle) { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0x00; + } + gTxBufferLen = i; + + LOG_D("Here is the buffer of Object needs to be Import"); + LOG_AU8_D(gTxBuffer, gTxBufferLen); + + ret = pSe05xSession->fp_RawTXn( + pgSe05xSessionCtx->conn_ctx, NULL, kSSS_AuthType_None, hdr, cmdBuf, cmdBufLen, rsp, rspLen, hasle); + ENSURE_OR_GO_EXIT(ret == SM_OK); + ret = pSe05xSession->fp_DeCrypt(pSe05xSession, cmdBufLen, rsp, rspLen, hasle); +exit: + return ret; +} +/* doc:end:transformsapdubuf */ + +/* doc:start:decryptsresponsebuf */ +/* This API decrypts the response buffer */ +smStatus_t se05x_ImportExtObjDecryptResponse( + struct Se05xSession *pSessionCtx, size_t cmd_cmacLen, uint8_t *rsp, size_t *rspLength, uint8_t hasle) +{ + U16 rv = SM_NOT_OK; + + if (*rspLength >= 2) { + rv = rsp[(*rspLength) - 2] << 8 | rsp[(*rspLength) - 1]; + if ((rv == SM_OK) && (pSessionCtx->pdynScp03Ctx != NULL)) { +#if SSS_HAVE_SCP_SCP03_SSS + rv = nxpSCP03_Decrypt_ResponseAPDU(pSessionCtx->pdynScp03Ctx, cmd_cmacLen, rsp, rspLength, hasle); +#else + LOG_W("Decrypting without SSS_HAVE_SCP_SCP03_SSS"); + rv = SM_NOT_OK; +#endif + } +#if SSS_HAVE_SCP_SCP03_SSS + else { /*Counter to be increament only in case of authentication is all kind of SCP + and response is not 9000 */ + if ((rv != SM_OK) && (pSessionCtx->pdynScp03Ctx != NULL)) { + if (((pSessionCtx->pdynScp03Ctx->authType == kSSS_AuthType_AESKey) || + (pSessionCtx->pdynScp03Ctx->authType == kSSS_AuthType_ECKey)) || + ((pSessionCtx->pdynScp03Ctx->authType == kSSS_AuthType_SCP03) && (cmd_cmacLen - 8) > 0)) { + nxpSCP03_Inc_CommandCounter(pSessionCtx->pdynScp03Ctx); + } + } + } +#endif + } + else { + rv = SM_NOT_OK; + } + + return rv; +} +/* doc:end:decryptsresponsebuf */ + +/* doc:start:transmitapdubuf */ +/* This API transmit the buffer in default session */ +static smStatus_t se05x_ImportExtObjTransmitBuffer(void *conn_ctx, + struct _sss_se05x_tunnel_context *pChannelCtx, + SE_AuthType_t currAuth, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle) +{ + uint8_t txBuf[SE05X_MAX_BUF_SIZE_CMD] = {0}; + size_t i = 0; + memcpy(&txBuf[i], hdr, sizeof(*hdr)); + smStatus_t ret = SM_NOT_OK; + i += sizeof(*hdr); + if (cmdBufLen > 0) { + // The Lc field must be extended in case the length does not fit + // into a single byte (Note, while the standard would allow to + // encode 0x100 as 0x00 in the Lc field, nobody who is sane in his mind + // would actually do that). + if ((cmdBufLen < 0xFF) && !hasle) { + txBuf[i++] = (uint8_t)cmdBufLen; + } + else { + txBuf[i++] = 0x00; + txBuf[i++] = 0xFFu & (cmdBufLen >> 8); + txBuf[i++] = 0xFFu & (cmdBufLen); + } + memcpy(&txBuf[i], cmdBuf, cmdBufLen); + i += cmdBufLen; + } + else { + if (cmdBufLen == 0) { + txBuf[i++] = 0x00; + } + } + + if (hasle) { + txBuf[i++] = 0x00; + txBuf[i++] = 0x00; + } + + uint32_t U32rspLen = (uint32_t)*rspLen; + ret = (smStatus_t)smCom_TransceiveRaw(conn_ctx, txBuf, (U16)i, rsp, &U32rspLen); + *rspLen = U32rspLen; + return ret; +} +/* doc:end:transmitapdubuf */ + +/* doc:start:createapdubuf */ +/* This API creates an APDU buffer of the object stores it to the global buffer */ +smStatus_t se05x_ImportExtObjCreateAPDU(Se05xSession_t *pwrite_apdubufferctx, + const tlvHeader_t *hdr, + uint8_t *cmdBuf, + size_t cmdBufLen, + uint8_t *rsp, + size_t *rspLen, + uint8_t hasle) +{ + memset(gTxBuffer, 0, sizeof(gTxBuffer)); + size_t i = 0; + memcpy(&gTxBuffer[i], hdr, sizeof(*hdr)); + smStatus_t ret = SM_OK; + i += sizeof(*hdr); + if (cmdBufLen > 0) { + // The Lc field must be extended in case the length does not fit + // into a single byte (Note, while the standard would allow to + // encode 0x100 as 0x00 in the Lc field, nobody who is sane in his mind + // would actually do that). + if ((cmdBufLen < 0xFF) && !hasle) { + gTxBuffer[i++] = (uint8_t)cmdBufLen; + } + else { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0xFFu & (cmdBufLen >> 8); + gTxBuffer[i++] = 0xFFu & (cmdBufLen); + } + memcpy(&gTxBuffer[i], cmdBuf, cmdBufLen); + i += cmdBufLen; + } + if (hasle) { + gTxBuffer[i++] = 0x00; + gTxBuffer[i++] = 0x00; + } + ret = SM_OK; + gTxBufferLen = i; + + LOG_AU8_I(gTxBuffer, gTxBufferLen); + + return ret; +} +/* doc:end:createapdubuf */ + +static sss_status_t read_se_ecka_and_store(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + size_t keyBitLen = 256; + status = sss_key_object_init(&se_ecka_pub_obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_get_handle(&se_ecka_pub_obj, SE_ECKA_PUB_OBJID); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_get_key(&pCtx->ks, &se_ecka_pub_obj, se_ecka_pub, &se_ecka_pub_len, &keyBitLen); + + LOG_D("SE ECKA Public Key"); + LOG_AU8_D(se_ecka_pub, se_ecka_pub_len); + + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + /* Set PK.SE.ECKA in host */ + status = sss_key_object_init(&se_ecka_pub_host_obj, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle(&se_ecka_pub_host_obj, + __LINE__, + kSSS_KeyPart_Public, + kSSS_CipherType_EC_NIST_P, + 256, + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = + sss_key_store_set_key(&pCtx->host_ks, &se_ecka_pub_host_obj, se_ecka_pub, se_ecka_pub_len, keyBitLen, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + +exit: + return status; +} + +static sss_status_t generate_tee_ecka_and_export( + ex_sss_boot_ctx_t *pCtx, uint8_t *pk_tee_ecka, size_t *pk_tee_ecka_len, size_t *publicKeyLen, uint16_t *outKeyIndex) +{ + sss_status_t status = kStatus_SSS_Fail; + size_t keyBitLen = 256; + status = sss_key_object_init(&sk_tee_ecka_obj, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle(&sk_tee_ecka_obj, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Pair, + kSSS_CipherType_EC_NIST_P, + sizeof(hostEcdsakey), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_generate_key(&pCtx->host_ks, &sk_tee_ecka_obj, 256, NULL); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->host_ks, &sk_tee_ecka_obj, pk_tee_ecka, pk_tee_ecka_len, &keyBitLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_D("HOST ECKA Keypair"); + LOG_AU8_D(pk_tee_ecka, *pk_tee_ecka_len); + status = sss_util_pkcs8_asn1_get_ec_public_key_index(pk_tee_ecka, *pk_tee_ecka_len, outKeyIndex, publicKeyLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); +exit: + return status; +} + +static sss_status_t store_ecdsa_key(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + status = sss_key_object_init(&hostECDSAkey_object, &pCtx->host_ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle(&hostECDSAkey_object, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Pair, + kSSS_CipherType_EC_NIST_P, + sizeof(hostEcdsakey), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = + sss_key_store_set_key(&pCtx->host_ks, &hostECDSAkey_object, hostEcdsakey, sizeof(hostEcdsakey), 256, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + +exit: + return status; +} + +static sss_status_t create_internal_auth_data(ex_sss_boot_ctx_t *pCtx, + uint8_t *p_to_be_signed_buf, + size_t *to_be_signed_len, + uint8_t *pk_tee_ecka, + size_t publicKeyLen) +{ + sss_status_t status = kStatus_SSS_Success; + uint8_t internal_auth_pk_tee_ecka_tag[] = INTERNAL_AUTH_PK_TEE_ECKA_TAG; + size_t internal_auth_pk_tee_ecka_tag_size = sizeof(internal_auth_pk_tee_ecka_tag); + + uint8_t eckey_fixed_params[] = ECKEY_PARAMS; + /* Copy fixed ECKey params of InternalAuthenticate */ + memcpy(&p_to_be_signed_buf[*to_be_signed_len], eckey_fixed_params, sizeof(eckey_fixed_params)); + (*to_be_signed_len) += sizeof(eckey_fixed_params); + /* Create 0x7F49 TLV */ + memcpy(&p_to_be_signed_buf[*to_be_signed_len], internal_auth_pk_tee_ecka_tag, internal_auth_pk_tee_ecka_tag_size); + (*to_be_signed_len) += internal_auth_pk_tee_ecka_tag_size; + /* Length of value of 0x7F49 */ + uint8_t *pinternal_auth_pk_tee_ecka_len = &p_to_be_signed_buf[(*to_be_signed_len)++]; + p_to_be_signed_buf[(*to_be_signed_len)++] = 0xB0; /* PK.TEE.ECKA Tag */ + p_to_be_signed_buf[(*to_be_signed_len)++] = (uint8_t)publicKeyLen; /* PK.TEE.ECKA Tag */ + memcpy(&p_to_be_signed_buf[*to_be_signed_len], pk_tee_ecka, publicKeyLen); + (*to_be_signed_len) += publicKeyLen; + p_to_be_signed_buf[(*to_be_signed_len)++] = 0xF0; /* ECCurve identifier Tag */ + p_to_be_signed_buf[(*to_be_signed_len)++] = 0x01; /* ECCurve identifier Length */ + p_to_be_signed_buf[(*to_be_signed_len)++] = 0x03; /* ECCurve identifier Value */ + *pinternal_auth_pk_tee_ecka_len = + (uint8_t)(publicKeyLen + 2 /* Tag & Length for 0xF0 */ + 3 /* TLV for ECCurve Identifier */); + + return status; +}
diff --git a/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.h b/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.h new file mode 100644 index 0000000..9a25bc8 --- /dev/null +++ b/demos/se05x/se05x_ImportExternalObjectPrepare/se05x_ImportExternalObjectPrepare.h
@@ -0,0 +1,71 @@ +/* +* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#ifndef __IMPORT_EXT_OBJ_PREPARE__ +#define __IMPORT_EXT_OBJ_PREPARE__ + +#include "fsl_sss_api.h" + +#define INTERNAL_AUTH_PK_TEE_ECKA_TAG \ + { \ + 0x7F, 0x49 \ + } +#define INTERNAL_AUTH_PK_TEE_ECKA_SIG_TAG \ + { \ + 0x5F, 0x37 \ + } +#define SE_ECKA_PUB_OBJID 0x7FFF0202 + +uint32_t ecdsa_auth_id = 0x0; + +/* clang-format off */ +#define ECKEY_PARAMS { 0xA6, 0x1D, 0x4F, 0x10, 0xA0, 0x00, 0x00, 0x03, 0x96, 0x54, 0x53, 0x00, \ +0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x90, 0x03, 0xAB, 0x01, \ +0x33, 0x80, 0x01, 0x88, 0x81, 0x01, 0x10, \ +} +/* clang-format on */ + +uint8_t WriteSymmKeyAPDU[1024] = {0}; +/* clang-format on */ +size_t WriteSymmKeyAPDU_len = sizeof(WriteSymmKeyAPDU); + +/* TEE ECKA KeyPair */ +sss_object_t sk_tee_ecka_obj = {0}; +uint8_t hostEckakey[1024] = {0}; +size_t hostEckakey_len = sizeof(hostEckakey); + +/* SE ECKA Public key */ +sss_object_t se_ecka_pub_obj = {0}; +sss_object_t se_ecka_pub_host_obj = {0}; +uint8_t se_ecka_pub[256] = {0}; +size_t se_ecka_pub_len = sizeof(se_ecka_pub); + +/* Host ECDSA Keypair */ +sss_object_t hostECDSAkey_object = {0}; +uint8_t hostEcdsakey[1024] = {0}; +size_t hostEcdsakey_len = sizeof(hostEcdsakey); + +/* Shared Secret */ +sss_object_t shsSecret = {0}; +uint8_t sharedSecret[32]; +size_t sharedSecretLen = sizeof(shsSecret); + +/* Master Secret */ +sss_object_t masterSec = {0}; +uint8_t masterSk[32]; +size_t masterSkLen = sizeof(masterSk); + +sss_object_t enc_obj = {0}; +sss_object_t mac_obj = {0}; +sss_object_t rmac_obj = {0}; +uint8_t iniMacChaining[16]; +uint8_t ObjectMAC[16] = {0}; +/* clang-format off */ +const uint8_t commandCounter[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }; +/* clang-format on */ + +#endif //__IMPORT_EXT_OBJ_PREPARE__
diff --git a/demos/se05x/se05x_InjectCertificate/CMakeLists.txt b/demos/se05x/se05x_InjectCertificate/CMakeLists.txt new file mode 100644 index 0000000..5ab4cb5 --- /dev/null +++ b/demos/se05x/se05x_InjectCertificate/CMakeLists.txt
@@ -0,0 +1,19 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_InjectCertificate) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE .) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_InjectCertificate/Readme.rst b/demos/se05x/se05x_InjectCertificate/Readme.rst new file mode 100644 index 0000000..c186a81 --- /dev/null +++ b/demos/se05x/se05x_InjectCertificate/Readme.rst
@@ -0,0 +1,42 @@ +.. + Copyright 2020 NXP + + +.. highlight:: shell + +.. _se-inject-certificate: + +========================================================== + Inject Certificate into SE +========================================================== + +This tool is to demonstrate how to inject certificates into +the SE. The keyIDs where certificates are injected are defined +in :file:`se05x_InjectCertificate.h`: + +.. literalinclude:: se05x_InjectCertificate.h + :language: c + :start-after: /* doc:start:keyIDs */ + :end-before: /* doc:end:keyIDs */ + +.. note:: Certificates to be injected are also defined in + :file:`se05x_InjectCertificate.h` file. These can be + changed as required. + +Building the example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Use the following CMake configurations to compile the example + +- Project: ``se05x_InjectCertificate`` + + +How to use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Run the tool as:: + + se05x_InjectCertificate <port> + +- For systems connecting with T=1 over I2C, the port parameter can be skipped. +
diff --git a/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.c b/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.c new file mode 100644 index 0000000..a51afd0 --- /dev/null +++ b/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.c
@@ -0,0 +1,99 @@ +/* + * + * Copyright 2018,2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include "se05x_InjectCertificate.h" + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_ecc_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_ecc_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Success; + sss_object_t ecc_cert_object, rsa_cert_object; + uint8_t ecc_cert[] = ECC_CERTIFICATE; + uint8_t rsa_cert[] = RSA_CERTIFICATE; + uint32_t ecc_object_id = ECC_CERTIFICATE_KEYID; + uint32_t rsa_object_id = RSA_CERTIFICATE_KEYID; + + LOG_I("Inject certificate example"); + + status = sss_key_object_init(&ecc_cert_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + status = sss_key_object_init(&rsa_cert_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&ecc_cert_object, + ecc_object_id, + kSSS_KeyPart_Default, + kSSS_CipherType_Binary, + sizeof(ecc_cert), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Injecting ECC certificate at 0x%08X", ecc_object_id); + status = + sss_key_store_set_key(&pCtx->ks, &ecc_cert_object, ecc_cert, sizeof(ecc_cert), sizeof(ecc_cert) * 8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(&rsa_cert_object, + rsa_object_id, + kSSS_KeyPart_Default, + kSSS_CipherType_Binary, + sizeof(rsa_cert), + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("Injecting RSA certificate at 0x%08X", rsa_object_id); + status = + sss_key_store_set_key(&pCtx->ks, &rsa_cert_object, rsa_cert, sizeof(rsa_cert), sizeof(rsa_cert) * 8, NULL, 0); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_InjectCertificate Example Success !!!..."); + } + else { + LOG_E("se05x_InjectCertificate Example Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.h b/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.h new file mode 100644 index 0000000..614aee0 --- /dev/null +++ b/demos/se05x/se05x_InjectCertificate/se05x_InjectCertificate.h
@@ -0,0 +1,119 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __SE05X_INJECT_CERTIFICATE__ +#define __SE05X_INJECT_CERTIFICATE__ + +/* doc:start:keyIDs */ +#define ECC_CERTIFICATE_KEYID 0x00000014 +#define RSA_CERTIFICATE_KEYID 0x00000011 +/* doc:end:keyIDs */ + +#define ECC_CERTIFICATE \ + { \ + 0x30, 0x82, 0x01, 0x6D, 0x30, 0x82, 0x01, 0x12, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xE8, 0x5F, \ + 0xC5, 0x73, 0x5E, 0x6C, 0x7A, 0xB0, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x04, 0x03, \ + 0x02, 0x30, 0x11, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x06, 0x64, 0x65, 0x6D, \ + 0x6F, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x30, 0x30, 0x33, 0x33, 0x30, 0x31, 0x36, 0x34, 0x31, \ + 0x35, 0x33, 0x5A, 0x17, 0x0D, 0x32, 0x37, 0x31, 0x31, 0x32, 0x39, 0x31, 0x36, 0x34, 0x31, 0x35, 0x33, \ + 0x5A, 0x30, 0x11, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x06, 0x64, 0x65, 0x6D, \ + 0x6F, 0x43, 0x41, 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x02, 0x01, 0x06, \ + 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0x03, 0x42, 0x00, 0x04, 0x8D, 0xBE, 0x66, 0x75, \ + 0xA7, 0xED, 0xAD, 0xDE, 0xAF, 0xDF, 0x1C, 0xC2, 0xBB, 0x7C, 0xF5, 0x42, 0x57, 0x51, 0x6F, 0x34, 0x63, \ + 0x8F, 0x39, 0x25, 0x9D, 0x3A, 0x0E, 0x36, 0x3E, 0x6B, 0xA6, 0x69, 0x83, 0x8E, 0x0D, 0xD0, 0xF0, 0x6B, \ + 0xBA, 0x43, 0x70, 0x73, 0x96, 0x06, 0x38, 0x7D, 0xB7, 0xB5, 0xB5, 0x59, 0x63, 0xA2, 0x26, 0xE5, 0x19, \ + 0xC6, 0x35, 0x88, 0x3E, 0x29, 0x62, 0xF3, 0x44, 0xA4, 0xA3, 0x53, 0x30, 0x51, 0x30, 0x1D, 0x06, 0x03, \ + 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x40, 0x2A, 0x82, 0x2B, 0xA9, 0x25, 0x6A, 0x5B, 0x11, 0x12, \ + 0x3C, 0x51, 0xC3, 0x4F, 0x93, 0xBC, 0x51, 0x74, 0x85, 0xF7, 0x30, 0x1F, 0x06, 0x03, 0x55, 0x1D, 0x23, \ + 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x40, 0x2A, 0x82, 0x2B, 0xA9, 0x25, 0x6A, 0x5B, 0x11, 0x12, 0x3C, \ + 0x51, 0xC3, 0x4F, 0x93, 0xBC, 0x51, 0x74, 0x85, 0xF7, 0x30, 0x0F, 0x06, 0x03, 0x55, 0x1D, 0x13, 0x01, \ + 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, \ + 0x3D, 0x04, 0x03, 0x02, 0x03, 0x49, 0x00, 0x30, 0x46, 0x02, 0x21, 0x00, 0xAD, 0x52, 0x10, 0x75, 0x32, \ + 0xBA, 0x85, 0xB8, 0x14, 0xE5, 0x0E, 0x44, 0x8B, 0xF6, 0x9F, 0x0C, 0xC0, 0x1B, 0xDB, 0x00, 0x7B, 0xC3, \ + 0x1E, 0xA0, 0x30, 0x94, 0x89, 0xB5, 0x1F, 0xF0, 0x59, 0x44, 0x02, 0x21, 0x00, 0xDC, 0xD0, 0x57, 0xBF, \ + 0xF9, 0xB5, 0x52, 0x10, 0xBE, 0xA7, 0x76, 0x95, 0x1D, 0xC6, 0xB4, 0xCE, 0x60, 0xBD, 0x5A, 0x70, 0xE3, \ + 0x1A, 0x3F, 0x6A, 0x4C, 0x7C, 0x45, 0x61, 0x44, 0x7F, 0x14, 0x95 \ + } + +#define RSA_CERTIFICATE \ + { \ + 0x30, 0x82, 0x04, 0xF8, 0x30, 0x82, 0x02, 0xE0, 0xA0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00, 0xB5, 0xDC, \ + 0xCE, 0xD7, 0x6A, 0xA5, 0xA6, 0xED, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, \ + 0x01, 0x0B, 0x05, 0x00, 0x30, 0x11, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x06, \ + 0x64, 0x65, 0x6D, 0x6F, 0x43, 0x41, 0x30, 0x1E, 0x17, 0x0D, 0x32, 0x30, 0x30, 0x33, 0x32, 0x39, 0x31, \ + 0x34, 0x31, 0x38, 0x31, 0x30, 0x5A, 0x17, 0x0D, 0x32, 0x37, 0x31, 0x31, 0x32, 0x38, 0x31, 0x34, 0x31, \ + 0x38, 0x31, 0x30, 0x5A, 0x30, 0x11, 0x31, 0x0F, 0x30, 0x0D, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0C, 0x06, \ + 0x64, 0x65, 0x6D, 0x6F, 0x43, 0x41, 0x30, 0x82, 0x02, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, \ + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x02, 0x0F, 0x00, 0x30, 0x82, 0x02, 0x0A, \ + 0x02, 0x82, 0x02, 0x01, 0x00, 0xB4, 0xB0, 0x75, 0x1C, 0x60, 0x51, 0xAA, 0x35, 0x37, 0x90, 0x38, 0x6C, \ + 0xC7, 0x86, 0xD7, 0xA2, 0x5A, 0xD0, 0x5D, 0x17, 0x4E, 0x91, 0x18, 0x27, 0xA5, 0x4E, 0x71, 0x7B, 0x27, \ + 0xDB, 0xE7, 0xAB, 0xAD, 0xE6, 0xD3, 0x10, 0x3C, 0x18, 0x9D, 0x21, 0x02, 0xF9, 0x0F, 0xA7, 0xB2, 0xE2, \ + 0x78, 0x20, 0x8D, 0x87, 0x34, 0x14, 0xDC, 0xA1, 0x6F, 0x55, 0x4B, 0xDB, 0x23, 0x9F, 0x21, 0x73, 0x09, \ + 0x75, 0x50, 0xF2, 0x91, 0x31, 0x8A, 0x26, 0x35, 0x6C, 0xD9, 0x4C, 0xC9, 0xD9, 0x8E, 0xB0, 0x6F, 0x59, \ + 0x36, 0x76, 0x06, 0xB3, 0x71, 0xF1, 0x22, 0x05, 0x4D, 0xC6, 0xCB, 0x63, 0x7A, 0xF8, 0x05, 0x19, 0x13, \ + 0xEA, 0x6B, 0x49, 0xBD, 0xE0, 0xBF, 0x90, 0x15, 0x4C, 0x5D, 0x87, 0x24, 0x09, 0x5F, 0x1A, 0x90, 0xBA, \ + 0xCB, 0x66, 0x12, 0x9F, 0x12, 0x7F, 0xFF, 0x87, 0x7B, 0xD1, 0x77, 0x69, 0xC8, 0xA3, 0xE6, 0x53, 0xB7, \ + 0xDF, 0x82, 0x56, 0x0F, 0x54, 0x8A, 0x74, 0x7B, 0xDD, 0x9D, 0x23, 0x85, 0x39, 0xE3, 0x13, 0x7C, 0xF5, \ + 0x19, 0x83, 0xD3, 0x31, 0xEE, 0xD7, 0x5E, 0xF4, 0x79, 0x1C, 0xA7, 0x3E, 0x09, 0x38, 0x3A, 0x20, 0xF9, \ + 0xFB, 0x6B, 0x3F, 0x40, 0x69, 0x20, 0x42, 0xCE, 0xED, 0x38, 0x41, 0x2A, 0xEC, 0x09, 0x49, 0xB9, 0xED, \ + 0x75, 0x77, 0xEE, 0xFD, 0x69, 0x8A, 0xFF, 0xE1, 0x99, 0x5C, 0x1F, 0x06, 0x1A, 0xCE, 0xD2, 0x8A, 0x4D, \ + 0x7D, 0x2B, 0xDB, 0x16, 0x64, 0x0F, 0x97, 0xA3, 0x4C, 0x4B, 0x51, 0x05, 0x62, 0x79, 0x50, 0x15, 0x1C, \ + 0x88, 0x63, 0x8D, 0x1F, 0x60, 0xE5, 0xF5, 0x17, 0xA0, 0x32, 0x1D, 0xE7, 0xAE, 0x5E, 0x5B, 0xFF, 0xB0, \ + 0x6C, 0xB9, 0xFC, 0x29, 0xBC, 0xFD, 0x62, 0x52, 0xD8, 0x6C, 0xD0, 0x14, 0x15, 0x8E, 0x2D, 0x2D, 0x0F, \ + 0xEE, 0x67, 0x2C, 0xBD, 0x81, 0x04, 0x01, 0x83, 0x24, 0xD4, 0xB8, 0x05, 0xBA, 0x83, 0x6E, 0x0B, 0xDE, \ + 0x0B, 0x14, 0x01, 0xDC, 0xFE, 0x9C, 0x7E, 0x5A, 0x5E, 0x68, 0xC5, 0x46, 0x12, 0x00, 0xA5, 0x23, 0x1A, \ + 0x16, 0x34, 0xD2, 0xB4, 0xE6, 0x8F, 0xE0, 0x67, 0x80, 0xF6, 0x74, 0x04, 0x22, 0x4C, 0xD7, 0x00, 0x56, \ + 0x6C, 0x6E, 0x05, 0x45, 0x11, 0x1E, 0xAF, 0xD4, 0x74, 0x27, 0xCB, 0x2F, 0x2E, 0x2C, 0x6F, 0x8C, 0xD9, \ + 0xB3, 0x6E, 0xBB, 0xE8, 0xA7, 0x85, 0x4E, 0x2D, 0x94, 0xD8, 0x92, 0x5A, 0xC1, 0x6C, 0xF3, 0xC8, 0xEA, \ + 0x04, 0xF8, 0x5C, 0x2D, 0x82, 0x19, 0x57, 0x82, 0x25, 0xE6, 0x60, 0xE1, 0xEB, 0x92, 0x93, 0xA3, 0x0E, \ + 0xB2, 0x51, 0x50, 0x49, 0x74, 0x9F, 0x50, 0x94, 0xDF, 0xC2, 0x02, 0x32, 0xB5, 0x44, 0x52, 0xAA, 0x4D, \ + 0x6C, 0x29, 0xDE, 0x6D, 0x02, 0xC6, 0xE0, 0x92, 0x3B, 0x7F, 0x44, 0xD0, 0x4E, 0x7A, 0xCB, 0x57, 0x26, \ + 0x3D, 0xB0, 0x1C, 0xB2, 0x84, 0x50, 0x08, 0xE3, 0xDB, 0x06, 0x4C, 0x02, 0x05, 0xB2, 0x21, 0x55, 0x8A, \ + 0x70, 0xE7, 0xBF, 0x2C, 0x14, 0x25, 0x7B, 0xAF, 0xEA, 0xA0, 0xF2, 0x5C, 0xB9, 0x16, 0xCD, 0x15, 0xE4, \ + 0x35, 0xEC, 0x0C, 0x98, 0x5D, 0x6A, 0xC2, 0x44, 0x37, 0xEB, 0xF6, 0x1C, 0x78, 0x02, 0x45, 0xC8, 0x80, \ + 0xFC, 0x3B, 0xB2, 0xF2, 0x13, 0xBE, 0x3F, 0x3E, 0xC4, 0x5C, 0x80, 0x08, 0x49, 0xD0, 0x54, 0xF6, 0x93, \ + 0x00, 0x27, 0x12, 0x9C, 0xF8, 0xEF, 0xB0, 0x19, 0x29, 0x0E, 0x19, 0xD3, 0xEC, 0x37, 0x76, 0x71, 0x27, \ + 0x89, 0x92, 0x0A, 0x62, 0xBF, 0x43, 0x3E, 0x8D, 0x9B, 0x3F, 0x3B, 0x1E, 0x28, 0x41, 0x28, 0xF8, 0x8B, \ + 0x68, 0xA3, 0xFD, 0x7C, 0x3C, 0xFF, 0x6A, 0x1E, 0x5D, 0x91, 0xB8, 0x9E, 0x15, 0x2A, 0x89, 0x50, 0x5D, \ + 0x3D, 0x55, 0x8C, 0xFB, 0xF6, 0xD8, 0x23, 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x53, 0x30, 0x51, 0x30, \ + 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, 0x16, 0x04, 0x14, 0x80, 0x65, 0xD5, 0xE0, 0x20, 0x52, 0x2B, \ + 0xA1, 0x40, 0xD7, 0xC8, 0x08, 0x29, 0xDF, 0x1E, 0x58, 0xBC, 0xF5, 0xEB, 0x79, 0x30, 0x1F, 0x06, 0x03, \ + 0x55, 0x1D, 0x23, 0x04, 0x18, 0x30, 0x16, 0x80, 0x14, 0x80, 0x65, 0xD5, 0xE0, 0x20, 0x52, 0x2B, 0xA1, \ + 0x40, 0xD7, 0xC8, 0x08, 0x29, 0xDF, 0x1E, 0x58, 0xBC, 0xF5, 0xEB, 0x79, 0x30, 0x0F, 0x06, 0x03, 0x55, \ + 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xFF, 0x30, 0x0D, 0x06, 0x09, 0x2A, \ + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x0B, 0x05, 0x00, 0x03, 0x82, 0x02, 0x01, 0x00, 0x65, 0xB3, \ + 0xEA, 0xB2, 0x61, 0x77, 0xF2, 0x4D, 0x1B, 0x52, 0xF2, 0x03, 0xE2, 0xD8, 0x8C, 0x56, 0xD0, 0xCE, 0xD1, \ + 0x8E, 0xC0, 0xE7, 0xD7, 0x59, 0xFE, 0x2C, 0xE5, 0xFB, 0xE5, 0xD1, 0xC7, 0x07, 0xD4, 0xBC, 0x27, 0xF5, \ + 0x19, 0xCF, 0xE8, 0x1A, 0x84, 0x66, 0xB8, 0x4B, 0x3D, 0xEB, 0x7A, 0xD1, 0xD2, 0x60, 0x81, 0xAC, 0x1B, \ + 0xAC, 0x0A, 0xED, 0xDA, 0x53, 0x64, 0xE0, 0x78, 0x71, 0xE5, 0x69, 0xA8, 0xC7, 0xB4, 0x93, 0xB1, 0x25, \ + 0xF7, 0xB1, 0x84, 0xA7, 0xFF, 0x6D, 0x7B, 0x26, 0x02, 0xE8, 0xBF, 0x47, 0xA8, 0xC1, 0x05, 0x47, 0x67, \ + 0x7F, 0x81, 0x66, 0x66, 0x1C, 0xAD, 0x85, 0x8D, 0x22, 0xB6, 0x7A, 0xC3, 0xC9, 0x63, 0x98, 0x0C, 0x81, \ + 0x18, 0x70, 0xE5, 0xE9, 0x22, 0x72, 0x6C, 0x45, 0x6D, 0x96, 0x66, 0xE6, 0x28, 0xFE, 0xD0, 0x51, 0x58, \ + 0xC3, 0x00, 0x96, 0x3B, 0x19, 0xDB, 0xA6, 0x63, 0xF5, 0xAC, 0xA0, 0x7F, 0x15, 0x51, 0xDA, 0x44, 0xA9, \ + 0x86, 0xFC, 0x72, 0x3A, 0xB1, 0xF4, 0xFB, 0x1D, 0xE1, 0x7C, 0xCC, 0x09, 0xB1, 0xFB, 0x93, 0x73, 0x55, \ + 0xF1, 0x0B, 0x8F, 0x63, 0x9C, 0xC6, 0x2D, 0xC9, 0xB1, 0x94, 0x5E, 0x6E, 0x0E, 0x83, 0x54, 0x09, 0x32, \ + 0xA3, 0x89, 0x86, 0x4C, 0x0E, 0xF5, 0x6D, 0xB4, 0x70, 0x8A, 0xB7, 0x9C, 0xB7, 0xCD, 0x37, 0xFB, 0x20, \ + 0xB4, 0x17, 0x01, 0x86, 0x7B, 0x85, 0x21, 0x70, 0x6F, 0x0F, 0x9C, 0x4F, 0x37, 0x17, 0xA3, 0x95, 0x15, \ + 0x71, 0x99, 0x37, 0xF5, 0x93, 0x19, 0x9C, 0x23, 0xF3, 0x70, 0xDE, 0xBC, 0x97, 0x31, 0xC7, 0x7D, 0xA1, \ + 0x36, 0xFC, 0xBF, 0x6E, 0x75, 0xCE, 0x43, 0xD0, 0x21, 0xB2, 0x36, 0x00, 0x98, 0xD7, 0x48, 0x88, 0x9E, \ + 0x26, 0xF2, 0xF5, 0x50, 0x59, 0x55, 0xBB, 0x26, 0x6A, 0x93, 0x4C, 0x04, 0x8D, 0x3A, 0xCB, 0x8F, 0x5F, \ + 0xF4, 0x44, 0x1F, 0xD3, 0x62, 0x90, 0x20, 0xB8, 0xA2, 0x6A, 0xDE, 0x1F, 0xF8, 0x2F, 0x02, 0x8D, 0x14, \ + 0x78, 0x49, 0x20, 0x58, 0xB3, 0xDD, 0xDF, 0x6A, 0xB2, 0x09, 0x1E, 0xE5, 0x3E, 0xD1, 0xE5, 0x15, 0x84, \ + 0x46, 0xA6, 0xCF, 0xA6, 0x74, 0xDE, 0xC0, 0x13, 0x5E, 0xA8, 0xDD, 0xB0, 0x9D, 0x65, 0x6B, 0x4B, 0xBB, \ + 0x49, 0x81, 0x8D, 0x8D, 0xEF, 0x85, 0xE4, 0xD8, 0x18, 0x95, 0x3F, 0x39, 0xAA, 0x95, 0x24, 0x82, 0x72, \ + 0x9F, 0xA3, 0x7B, 0x4D, 0xA7, 0x6A, 0x4A, 0x17, 0x0E, 0x2F, 0x53, 0x6A, 0xD1, 0xC7, 0xC1, 0xD0, 0x77, \ + 0x22, 0x6A, 0xA1, 0xF8, 0xAE, 0x64, 0x84, 0x83, 0xDF, 0x8F, 0x97, 0x7C, 0xA6, 0x51, 0x7D, 0xE6, 0x86, \ + 0x0C, 0x1C, 0x8D, 0xE4, 0xF0, 0x1E, 0xA2, 0x55, 0xFA, 0x8F, 0x75, 0xEF, 0x64, 0x03, 0xCF, 0xDD, 0xFF, \ + 0xA7, 0x2A, 0x1A, 0x84, 0x2D, 0xE9, 0x9D, 0x4D, 0x87, 0x5D, 0x1F, 0x4A, 0xF0, 0x67, 0x39, 0x27, 0x0E, \ + 0x7B, 0x21, 0x1F, 0x00, 0x5A, 0x6A, 0xDC, 0x6C, 0x4E, 0xE5, 0xD9, 0xFF, 0xC0, 0x12, 0x56, 0x04, 0x66, \ + 0x01, 0xA6, 0x1E, 0xB0, 0x91, 0x7D, 0xDA, 0x0D, 0x48, 0x57, 0x6A, 0x05, 0xB3, 0x3E, 0xC3, 0xC6, 0x0D, \ + 0x9A, 0xAE, 0x66, 0x4F, 0x39, 0xCE, 0xCD, 0x2C, 0x83, 0x40, 0xC6, 0xB6, 0xD2, 0x84, 0x4C, 0xF6, 0xCB, \ + 0xCC, 0x41, 0xC3, 0x7A, 0x37, 0x56, 0xCD, 0xD0, 0xD3, 0x61, 0x3B, 0xB9, 0x02, 0xAE, 0xF0, 0xC4, 0x21, \ + 0xC6, 0xA5, 0x6C, 0xD2, 0xE6, 0x37, 0x87, 0x59, 0x1B, 0x78, 0xB3, 0xBD, 0x47, 0x7E, 0x1C, 0x07, 0x91, \ + 0x23, 0x27, 0x65, 0xA2, 0x1A, 0x76, 0xEB, 0x65, 0x6A, 0x93, 0x5C, 0x3E, 0x96, 0xE0, 0xBB, 0x2A, 0x9A, \ + 0x5F, 0x82, 0x5B, 0x80, 0x28, 0x57, 0x1C, 0xB2, 0x92, 0x6B, 0x85, 0xCB, 0xFD, 0xC2, 0x78, 0xFA, 0x5A \ + } + +#endif //__SE05X_INJECT_CERTIFICATE__ \ No newline at end of file
diff --git a/demos/se05x/se05x_InvokeGarbageCollection/CMakeLists.txt b/demos/se05x/se05x_InvokeGarbageCollection/CMakeLists.txt new file mode 100644 index 0000000..466d2db --- /dev/null +++ b/demos/se05x/se05x_InvokeGarbageCollection/CMakeLists.txt
@@ -0,0 +1,28 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_InvokeGarbageCollection) +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/se05x/se05x_InvokeGarbageCollection/out_se05x_InvokeGarbageCollection.rst.txt b/demos/se05x/se05x_InvokeGarbageCollection/out_se05x_InvokeGarbageCollection.rst.txt new file mode 100644 index 0000000..b25c169 --- /dev/null +++ b/demos/se05x/se05x_InvokeGarbageCollection/out_se05x_InvokeGarbageCollection.rst.txt
@@ -0,0 +1,16 @@ +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +hostLib:WARN :Invoking this api will close the existing session to SE05X. +hostLib:WARN :To use SE05X, open session again. +hostLib:INFO :Sending Select command +hostLib:INFO :Command Successful!!! +hostLib:INFO :Command Response (Len=18) + 6F 10 84 08 A0 00 00 01 51 00 00 00 A5 04 9F 65 + 01 FF +hostLib:INFO :Sending 'Invoke Garbage Collection' Command +hostLib:INFO :Command Successful!!! +hostLib:INFO :Command Response (Len=5) + FE 03 DF 25 00 +App :INFO :se05x_InvokeGarbageCollection Success !!!... +App :INFO :ex_sss Finished
diff --git a/demos/se05x/se05x_InvokeGarbageCollection/readme.rst b/demos/se05x/se05x_InvokeGarbageCollection/readme.rst new file mode 100644 index 0000000..d4238b5 --- /dev/null +++ b/demos/se05x/se05x_InvokeGarbageCollection/readme.rst
@@ -0,0 +1,51 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-invoke-garbage-collection: + +======================================================================= + SE05X Invoke Garbage Collection Example +======================================================================= + +The example will trigger the garbage collection in SE05X. +Invoking ``CM_InvokeGarbageCollection`` api will close the existing session to SE05X. To use SE05X, open session again. + +.. warning:: + Excessive calls to ``CM_InvokeGarbageCollection`` API will impact the device durability + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_InvokeGarbageCollection`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_InvokeGarbageCollection.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_InvokeGarbageCollection + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_InvokeGarbageCollection.rst.txt + :start-after: smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050
diff --git a/demos/se05x/se05x_InvokeGarbageCollection/se05x_InvokeGarbageCollection.c b/demos/se05x/se05x_InvokeGarbageCollection/se05x_InvokeGarbageCollection.c new file mode 100644 index 0000000..6240205 --- /dev/null +++ b/demos/se05x/se05x_InvokeGarbageCollection/se05x_InvokeGarbageCollection.c
@@ -0,0 +1,38 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <nxLog_App.h> +#include "cm_commands.h" + +static ex_sss_boot_ctx_t gex_sss_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + U32 ret = 0; + + ret = CM_InvokeGarbageCollection(pSession->s_ctx.conn_ctx); + if (ret != SM_OK) { + goto exit; + } + + status = kStatus_SSS_Success; +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_InvokeGarbageCollection Success !!!..."); + } + else { + LOG_E("se05x_InvokeGarbageCollection Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_MandatePlatformSCP/CMakeLists.txt b/demos/se05x/se05x_MandatePlatformSCP/CMakeLists.txt new file mode 100644 index 0000000..08196da --- /dev/null +++ b/demos/se05x/se05x_MandatePlatformSCP/CMakeLists.txt
@@ -0,0 +1,24 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# +PROJECT(se05x_MandatePlatformSCP) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_MandatePlatformSCP/Readme.rst b/demos/se05x/se05x_MandatePlatformSCP/Readme.rst new file mode 100644 index 0000000..4e138d9 --- /dev/null +++ b/demos/se05x/se05x_MandatePlatformSCP/Readme.rst
@@ -0,0 +1,47 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-mandate-scp: + +======================================================================= + SE05X Mandate SCP example +======================================================================= + +This project demonstrates how to configure SE05X to mandate platform SCP. This +can be used if you always want the communication with SE05X to be encrypted. + +.. note:: After this example runs successfully, further communication would require + Platform SCP03 encryption. + + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_MandatePlatformSCP`` + + - CMake configuration + + ``SE05X_Auth``:``None`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_MandatePlatformSCP.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_MandatePlatformSCP
diff --git a/demos/se05x/se05x_MandatePlatformSCP/se05x_MandatePlatformSCP.c b/demos/se05x/se05x_MandatePlatformSCP/se05x_MandatePlatformSCP.c new file mode 100644 index 0000000..f403a9e --- /dev/null +++ b/demos/se05x/se05x_MandatePlatformSCP/se05x_MandatePlatformSCP.c
@@ -0,0 +1,132 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* TO BE Run only under default session */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <string.h> + +#include "ex_sss_auth.h" +#include "smCom.h" + +/* clang-format off */ +#define MandateSCP_UserID_VALUE \ + { \ + 'N', 'E', 'E', 'D', 'S', 'C', 'P' \ + } +/* clang-format ON */ + +static ex_sss_boot_ctx_t gex_sss_mandate_scp_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_mandate_scp_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status; + SE_Connect_Ctx_t eraseAuthCtx = { 0 }; + sss_se05x_session_t *pSession = + (sss_se05x_session_t *)&pCtx->session; + smStatus_t sw_status; + Se05xSession_t *pSe05xSession; + SE_Connect_Ctx_t* pOpenCtx; + sss_object_t ex_id = { 0 }; + + const uint8_t host_userid_value[] = MandateSCP_UserID_VALUE; + const uint8_t userid_value_factoryreset[] = MandateSCP_UserID_VALUE; + eraseAuthCtx.auth.ctx.idobj.pObj = &ex_id; + + /* Prepare host */ + + status = sss_key_object_init(eraseAuthCtx.auth.ctx.idobj.pObj, &pCtx->host_ks); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_object_init"); + goto cleanup; + } + status = sss_key_object_allocate_handle(eraseAuthCtx.auth.ctx.idobj.pObj, + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Default, + kSSS_CipherType_UserID, + sizeof(host_userid_value), + kKeyObject_Mode_Transient); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_object_allocate_handle"); + goto cleanup; + } + status = sss_key_store_set_key(&pCtx->host_ks, + eraseAuthCtx.auth.ctx.idobj.pObj, + host_userid_value, + sizeof(host_userid_value), + sizeof(host_userid_value) * 8, + NULL, + 0); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_store_set_key"); + goto cleanup; + } + + pSe05xSession = &pSession->s_ctx; + + sw_status = Se05x_API_WriteUserID(pSe05xSession, + NULL, + SE05x_MaxAttemps_NA, + kSE05x_AppletResID_PLATFORM_SCP, + userid_value_factoryreset, + sizeof(userid_value_factoryreset), + kSE05x_AttestationType_AUTH); + + pOpenCtx = &pCtx->se05x_open_ctx; + eraseAuthCtx.tunnelCtx = pOpenCtx->tunnelCtx; + eraseAuthCtx.connType = pOpenCtx->connType; + eraseAuthCtx.portName = pOpenCtx->portName; + eraseAuthCtx.auth.authType = kSSS_AuthType_ID; + + + sss_session_close(&pCtx->session); + + pSe05xSession = &pSession->s_ctx; + + status = sss_session_open(&pCtx->session, kType_SSS_SE_SE05x, + kSE05x_AppletResID_PLATFORM_SCP, + kSSS_ConnectionType_Password, &eraseAuthCtx); + + + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_session_open"); + goto cleanup; + } + + + /* Call SE05X API to Mandate Platform SCP. */ + + sw_status = Se05x_API_SetPlatformSCPRequest(&pSession->s_ctx, kSE05x_PlatformSCPRequest_REQUIRED); + if(SM_OK != sw_status) { + LOG_E("Se05x_API_SetPlatformSCPRequest Failed"); + goto cleanup; + } + else { + LOG_I("Se05x_API_SetPlatformSCPRequest Successful"); + LOG_W("Further communication must be encrypted"); + } + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_MandatePlatformSCP Example Success !!!..."); + } + else { + LOG_E("se05x_MandatePlatformSCP Example Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_Minimal/CMakeLists.txt b/demos/se05x/se05x_Minimal/CMakeLists.txt new file mode 100644 index 0000000..e91cf09 --- /dev/null +++ b/demos/se05x/se05x_Minimal/CMakeLists.txt
@@ -0,0 +1,28 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_Minimal) +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF(WithHost_LinuxLike) + INSTALL(TARGETS ${PROJECT_NAME} DESTINATION bin) +ENDIF()
diff --git a/demos/se05x/se05x_Minimal/Makefile b/demos/se05x/se05x_Minimal/Makefile new file mode 100644 index 0000000..04ac624 --- /dev/null +++ b/demos/se05x/se05x_Minimal/Makefile
@@ -0,0 +1,43 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +INCLUDE_FLAGS := -I/usr/local/include/se05x +DEFINES := -DSSS_USE_FTR_FILE +LIBRARY_PATH := -L/usr/local/lib + +# Auto generated and copied by make install. +-include /usr/local/share/se05x/cmake_options.mak + +SIMW_LIBRARIES := \ + -lex_common \ + -lSSS_APIs \ + -lse05x \ + -la7x_utils \ + -lsmCom + +ifeq (1,$(SSS_HAVE_SMCOM_JRCP_V2)) + SIMW_LIBRARIES := $(SIMW_LIBRARIES) -ljrcplib +endif + +OPENSSL_LIBRARIES := -lcrypto + +# Inluding libraries twice for cyclic-depdendencies across libraries. +CFLAGS += -MD -MMD $(INCLUDE_FLAGS) \ + $(DEFINES) \ + $(LIBRARY_PATH) \ + $(SIMW_LIBRARIES) \ + $(SIMW_LIBRARIES) \ + $(OPENSSL_LIBRARIES) \ + $(LOCAL_LIBRARIES) + +all: + c++ -fPIC -g se05x_Minimal.c $(CFLAGS) -o se05x_Minimal + +clean: + -rm *.d + -rm se05x_Minimal + +-include se05x_Minimal.d
diff --git a/demos/se05x/se05x_Minimal/out_se05x_Minimal.rst.txt b/demos/se05x/se05x_Minimal/out_se05x_Minimal.rst.txt new file mode 100644 index 0000000..6a2095b --- /dev/null +++ b/demos/se05x/se05x_Minimal/out_se05x_Minimal.rst.txt
@@ -0,0 +1,10 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\se05x_Minimal.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :mem=32767 +App :INFO :ex_sss Finished
diff --git a/demos/se05x/se05x_Minimal/readme.rst b/demos/se05x/se05x_Minimal/readme.rst new file mode 100644 index 0000000..4584dde --- /dev/null +++ b/demos/se05x/se05x_Minimal/readme.rst
@@ -0,0 +1,48 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-minimal: + +======================================================================= + SE05X Minimal example +======================================================================= + +This project gets available memory from secure element. This is a good +starting point to work with SE05X at low level. + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_Minimal`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_Minimal.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_Minimal + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_Minimal.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_Minimal/se05x_Minimal.c b/demos/se05x/se05x_Minimal/se05x_Minimal.c new file mode 100644 index 0000000..d306853 --- /dev/null +++ b/demos/se05x/se05x_Minimal/se05x_Minimal.c
@@ -0,0 +1,52 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> + +#ifdef __cplusplus +} +#endif + +static ex_sss_boot_ctx_t gex_sss_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Success; + + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + + uint16_t mem = 0; + smStatus_t sm_status; + sm_status = Se05x_API_GetFreeMemory(&pSession->s_ctx, kSE05x_MemoryType_PERSISTENT, &mem); + if (sm_status != SM_OK) { + LOG_E("Se05x_API_GetFreeMemory Failed"); + status = kStatus_SSS_Fail; + } + LOG_U16_I(mem); + + if (kStatus_SSS_Success == status) { + LOG_I("se05x_Minimal Example Success !!!..."); + } + else { + LOG_E("se05x_Minimal Example Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_MultiThread/CMakeLists.txt b/demos/se05x/se05x_MultiThread/CMakeLists.txt new file mode 100644 index 0000000..f7006bd --- /dev/null +++ b/demos/se05x/se05x_MultiThread/CMakeLists.txt
@@ -0,0 +1,32 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# +PROJECT(se05x_MultiThread) + +FILE( + GLOB + files + *.c + *.h +) +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + SSS_APIs + ex_common +) + +IF(CMAKE_COMPILER_IS_GNUCC AND (NOT WithKSDK)) + TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + -lpthread + ) +ENDIF() + +EXPOSE_SE05X_AUTH_STRATEGY() +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_MultiThread/Readme.rst b/demos/se05x/se05x_MultiThread/Readme.rst new file mode 100644 index 0000000..b434fb1 --- /dev/null +++ b/demos/se05x/se05x_MultiThread/Readme.rst
@@ -0,0 +1,66 @@ +.. + Copyright 2020 NXP + + + +.. highlight:: bat + +.. _se05x_MultiThread_demo: + +======================================================================= + SE05X MultiThread demo +======================================================================= + +This project demonstrates two threads, opening two sessions with the +se05x using tunneling api's. Each thread performing ecc sign and verify operations. + +If we use user sessions then at least two authentication objects need to be provisioned +in se05x using the ``delete and test provision`` utility before running the demo: + +- For an overview of authentication objects refer to :ref:`Auth_objects` +- For a provisioning example refer to :ref:`delete-and-test-provision` + +In Multistep operations the concurrent execution with same cipher mode is not allowd. +(Refer :ref:`limitations`) + +.. note:: This demo can be build for FreeRTOS on embedded + platforms or for pthread on POSIX systems (e.g. Linux). + +Prerequisites +===================== +- Micro USB cable +- FRDM-K64F/imx-RT1060/Raspberry-Pi/iMX board +- Personal Computer +- SE05x Arduino shield + + +Building the Demo +======================================================================= +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_MultiThread`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_Multithread.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_Multithread + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_multithreaded_demo.rst.txt + :start-after: sss :INFO :atr (Len=0) \ No newline at end of file
diff --git a/demos/se05x/se05x_MultiThread/out_se05x_multithreaded_demo.rst.txt b/demos/se05x/se05x_MultiThread/out_se05x_multithreaded_demo.rst.txt new file mode 100644 index 0000000..bc80f95 --- /dev/null +++ b/demos/se05x/se05x_MultiThread/out_se05x_multithreaded_demo.rst.txt
@@ -0,0 +1,17 @@ +App :INFO :PlugAndTrust_v03.00.02_20200826 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is with Plain. +sss :WARN :!!!Not recommended for production use.!!! +sss :WARN :Communication channel is with Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :Key Store Generate Key success user 2!!! +App :INFO :Key Store Generate Key success user 1!!! +App :INFO :sss_asymmetric_sign_digest success user 2 +App :INFO :sss_asymmetric_sign_digest success user 1 +App :INFO :Set public key success user 2 +App :INFO :Set public key success user 1 +App :INFO :sss_asymmetric_verify_digest success user 2 +App :INFO :Done User 2 +App :INFO :sss_asymmetric_verify_digest success user 1 +App :INFO :Done User 1 +App :INFO :SE05x Multithreaded example finished \ No newline at end of file
diff --git a/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.c b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.c new file mode 100644 index 0000000..f911c73 --- /dev/null +++ b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.c
@@ -0,0 +1,132 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + * */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <nxLog_App.h> + +#include <sm_timer.h> +#include "se05x_multithreaded_demo.h" +#include "PlugAndTrust_Pkg_Ver.h" + +#ifdef HAVE_KSDK +#include "ex_sss_main_inc_ksdk.h" +#endif + +#if AX_EMBEDDED && USE_RTOS +#include "FreeRTOS.h" +#endif +/******************************************************************************* + * Definitions + ******************************************************************************/ + +#if defined(__linux__) && defined(T1oI2C) +#if SSS_HAVE_APPLET_SE05X_IOT +#include "ex_sss_main_inc_linux.h" +#endif +#endif + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ +#if (__GNUC__ && !AX_EMBEDDED) +pthread_t tid[2]; +#endif +extern demoCtx_t guser_session_1; +extern demoCtx_t guser_session_2; +extern demoCtx_t gbaseSession; +const char *portName; +/******************************************************************* +* MACROS +*******************************************************************/ +#if AX_EMBEDDED && USE_RTOS +#define FREERTOS_MULTITHREAD_TASK_PRIORITY (1) +#define FREERTOS_MULTITHREAD_TASK_STACK_SIZE 3000 +#endif + +//#include <ex_sss_main_inc.h> + +/******************************************************************************* + * AFR + ******************************************************************************/ +extern sss_status_t setup_se05x(void); +extern void cleanup_se05x(void); +extern void* Sign_Verify_eccsecp256r1_sha224_guser1(void *ptr); +extern void* Sign_Verify_eccsecp256r1_sha512_user2(void *ptr); + +/******************************************************************************* + * Code + ******************************************************************************/ +int main(int argc, const char *argv[]) +{ +#if AX_EMBEDDED + ex_sss_main_ksdk_bm(); +#endif + +#if defined(__linux__) && defined(T1oI2C) && SSS_HAVE_APPLET_SE05X_IOT + ex_sss_main_linux_conf(); +#endif // defined(__linux__) && defined(T1oI2C) && SSS_HAVE_APPLET_SE05X_IOT + + LOG_I(PLUGANDTRUST_PROD_NAME_VER_FULL); + +#if AX_EMBEDDED + portName = NULL; +#else + sss_status_t status; + status = ex_sss_boot_connectstring(argc, argv, &portName); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_boot_connectstring Failed"); + return 1; + } +#endif // AX_EMBEDDED + +#if (__GNUC__ && !AX_EMBEDDED) + int ret; + sss_status_t st; + st = setup_se05x(); + if (st != kStatus_SSS_Success) { + return 1; + } + ret = pthread_create(&(tid[0]), NULL, Sign_Verify_eccsecp256r1_sha224_guser1, (void *)&guser_session_1); + if (ret != 0) { + LOG_E("Thread can't be created"); + return 1; + } + ret = pthread_create(&(tid[1]), NULL, Sign_Verify_eccsecp256r1_sha512_user2, (void *)&guser_session_2); + if (ret != 0) { + LOG_E("Thread can't be created"); + return 1; + } + + pthread_join(tid[1], NULL); + pthread_join(tid[0], NULL); + cleanup_se05x(); + +#elif AX_EMBEDDED && USE_RTOS + if (xTaskCreate((TaskFunction_t)setup_se05x, "multithreadTestsetup", 3000, NULL, 2, NULL) != pdPASS) { + LOG_E("Task creation failed!."); + while(1); + } + if (xTaskCreate((TaskFunction_t)Sign_Verify_eccsecp256r1_sha224_guser1, "multithreadTest1", FREERTOS_MULTITHREAD_TASK_STACK_SIZE, (void *)&guser_session_1, FREERTOS_MULTITHREAD_TASK_PRIORITY, NULL) != pdPASS) { + LOG_E("Task creation failed!."); + while(1); + } + if (xTaskCreate((TaskFunction_t)Sign_Verify_eccsecp256r1_sha512_user2, "multithreadTest2", FREERTOS_MULTITHREAD_TASK_STACK_SIZE, (void *)&guser_session_2, FREERTOS_MULTITHREAD_TASK_PRIORITY, NULL) != pdPASS) { + LOG_E("Task creation failed!."); + while(1); + } + if (xTaskCreate((TaskFunction_t)cleanup_se05x, "multithreadTestcleanup", 2000, NULL, 1, NULL) != pdPASS) { + LOG_E("Task creation failed!."); + while(1); + } + + vTaskStartScheduler(); + while(1); // Should never return here + +#endif + return 0; +}
diff --git a/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.h b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.h new file mode 100644 index 0000000..438084a --- /dev/null +++ b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo.h
@@ -0,0 +1,69 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef SE05X_MULTITHREADED_DEMO_H +#define SE05X_MULTITHREADED_DEMO_H +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ +#include <ex_sss.h> +#if AX_EMBEDDED +#include<ex_sss_boot.h> +#endif +#include "ex_sss_auth.h" + +/******************************************************************* +* Defines +*******************************************************************/ + + +#if defined(FRDM_KW41Z) || defined(FRDM_K64F) || defined(IMX_RT) || defined(LPC_55x) +#define HAVE_KSDK +#endif + +#if (SSS_HAVE_SE05X_AUTH_USERID) || \ + (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) //UserID Session +#define TST_LOCAL_OBJ_AUTH_ID_USER1 EX_SSS_AUTH_SE05X_UserID_AUTH_ID + USER1 +#define TST_LOCAL_OBJ_AUTH_ID_USER2 EX_SSS_AUTH_SE05X_UserID_AUTH_ID + USER2 +#elif (SSS_HAVE_SE05X_AUTH_NONE) || \ + (SSS_HAVE_SE05X_AUTH_PLATFSCP03) //No auth +#define TST_LOCAL_OBJ_AUTH_ID_USER1 EX_SSS_AUTH_SE05X_NONE_AUTH_ID + USER1 +#define TST_LOCAL_OBJ_AUTH_ID_USER2 EX_SSS_AUTH_SE05X_NONE_AUTH_ID + USER1 +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || \ + (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) //AESKey +#define TST_LOCAL_OBJ_AUTH_ID_USER1 EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID + USER1 +#define TST_LOCAL_OBJ_AUTH_ID_USER2 EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID + USER2 +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || \ + (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) //ECKey session +#define TST_LOCAL_OBJ_AUTH_ID_USER1 \ + EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID + USER1 +#define TST_LOCAL_OBJ_AUTH_ID_USER2 \ + EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID + USER2 +#endif + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +typedef struct demoCtx_t +{ + sss_session_t session; + sss_key_store_t ks; + sss_object_t key; + sss_object_t public_key; + sss_asymmetric_t asymm; + +#if SSS_HAVE_APPLET_SE05X_IOT + sss_session_t hostSession; + sss_key_store_t hostKs; + SE_Connect_Ctx_t se05x_AuthCtx; + SE_Connect_Ctx_t se05x_ChannelCtx; + sss_tunnel_t *tunnel_ctx; + ex_SE05x_authCtx_t tst_se05x_auth; + sss_se05x_session_t *pSession_SE05x; +#endif +} demoCtx_t; + +#endif \ No newline at end of file
diff --git a/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo_task.c b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo_task.c new file mode 100644 index 0000000..fa77218 --- /dev/null +++ b/demos/se05x/se05x_MultiThread/se05x_multithreaded_demo_task.c
@@ -0,0 +1,533 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + * */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <nxLog_App.h> + +#include <sm_timer.h> +#include "se05x_multithreaded_demo.h" +#include "se05x_APDU.h" + +#if AX_EMBEDDED && USE_RTOS +#include "FreeRTOS.h" +#endif + +#define USER1 0x00 +#define USER2 0x10 +#define KEY_BIT_LENGTH 256 + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +demoCtx_t guser_session_1 = {0}; +demoCtx_t guser_session_2 = {0}; +demoCtx_t gbaseSession; +sss_tunnel_t gtunnel_ctx; +extern const char *portName; + +uint8_t task1_status = false; +uint8_t task2_status = false; + +#if AX_EMBEDDED && USE_RTOS +uint8_t setup_done = false; +#endif + +sss_status_t userSessionOpen(demoCtx_t *Testctx, uint32_t userId); +sss_status_t baseSessionOpen(demoCtx_t *Testctx); +/******************************************************************************* + * Code + ******************************************************************************/ + +sss_status_t setup_se05x(void) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pCtx = (sss_se05x_session_t *)&guser_session_1.session; + + status = baseSessionOpen(&gbaseSession); + if(kStatus_SSS_Success != status) { + LOG_I("baseSessionOpen Failed"); + goto exit; + } + + status = sss_tunnel_context_init( + >unnel_ctx, &gbaseSession.session /* session */); + if(kStatus_SSS_Success != status) { + LOG_I("sss_tunnel_context_init Failed"); + goto exit; + } + + status = userSessionOpen(&guser_session_1, USER1); + if(kStatus_SSS_Success != status) { + LOG_I("userSessionOpen 1 Failed"); + goto exit; + } + + status = userSessionOpen(&guser_session_2, USER2); + if(kStatus_SSS_Success != status) { + LOG_I("userSessionOpen 2 Failed"); + goto exit; + } + + Se05x_API_DeleteAll_Iterative(&(pCtx->s_ctx)); + +exit: +#if AX_EMBEDDED && USE_RTOS + setup_done = true; + vTaskDelete(NULL); +#endif + return status; +} + + +void cleanup_se05x() +{ +#if AX_EMBEDDED && USE_RTOS + while(!(task1_status && task2_status)) { + sm_sleep(2); + } +#endif + sss_session_close(&guser_session_1.session); + sss_session_close(&guser_session_2.session); + sss_session_close(&gbaseSession.session); + sss_tunnel_context_free(>unnel_ctx); + + if ((task1_status == task2_status) == 1) + LOG_I("SE05x Multithreaded Example Success"); + + LOG_I("ex_sss Finished"); +#if AX_EMBEDDED && USE_RTOS + vTaskDelete(NULL); +#endif +} + +void* Sign_Verify_eccsecp256r1_sha224_guser1(void *ptr) +{ + sss_status_t status; + uint8_t digest[28] = "Hello World"; + size_t digestLen = sizeof(digest); + uint8_t signature[KEY_BIT_LENGTH] = {0}; + size_t signatureLen = sizeof(signature); + uint8_t pbKey[100] = {0}; + size_t pbKeyBitLen = 0; + size_t pbKeyByteLen = sizeof(pbKey); + sss_asymmetric_t asymVerifyCtx; + sss_algorithm_t algorithm; + sss_mode_t mode; + uint32_t keyId = MAKE_TEST_ID(__LINE__); + size_t keylen = KEY_BIT_LENGTH / 8; + + demoCtx_t *pCtx = (demoCtx_t *)ptr; +#if AX_EMBEDDED && USE_RTOS + while(!setup_done) { + sm_sleep(2); + } +#endif + + algorithm = kAlgorithm_SSS_SHA224; + mode = kMode_SSS_Sign; + + status = sss_key_object_allocate_handle( + &pCtx->key, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + if (kStatus_SSS_Success != status) { + LOG_I("key_object_allocate_handle Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + + status = sss_asymmetric_context_init(&pCtx->asymm, &pCtx->session, &pCtx->key, algorithm, mode); + if (kStatus_SSS_Success != status) { + LOG_I("Asymmetric Init Context Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + + status = sss_key_store_generate_key(&pCtx->ks, &pCtx->key, KEY_BIT_LENGTH, 0); + if (kStatus_SSS_Success != status) { + LOG_I("Key Store Generate Key Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + else { + LOG_I("Key Store Generate Key success user 1!!!"); + } + + sm_sleep(2); + status = sss_asymmetric_sign_digest(&pCtx->asymm, digest, digestLen, signature, &signatureLen); + if (kStatus_SSS_Success != status) { + LOG_I("Signing Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + else { + LOG_I("sss_asymmetric_sign_digest success user 1"); + } + sm_sleep(2); + status = sss_key_store_get_key(&pCtx->ks, &pCtx->key, pbKey, &pbKeyByteLen, &pbKeyBitLen); + if (kStatus_SSS_Success != status) { + LOG_I(" Get Public Key Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + + uint32_t pbkeyId = MAKE_TEST_ID(__LINE__); + + status = sss_key_object_init(&pCtx->public_key, &pCtx->ks); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_object_init for derived key Failed user 1"); + task1_status = 0x10; + goto exit; + } + + status = sss_key_object_allocate_handle( + &pCtx->public_key, + pbkeyId, + kSSS_KeyPart_Public, + kSSS_CipherType_EC_NIST_P, + pbKeyByteLen, + kKeyObject_Mode_Persistent); + if(kStatus_SSS_Success != status){ + LOG_I("sss_key_object_allocate_handle Failed user 1"); + task1_status = 0x10; + goto exit; + } + + status = sss_key_store_set_key( + &pCtx->ks, &pCtx->public_key, pbKey, pbKeyByteLen, KEY_BIT_LENGTH, NULL, 0); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_store_set_key Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + else { + LOG_I("Set public key success user 1"); + } + sm_sleep(2); + sss_asymmetric_context_init(&asymVerifyCtx, &pCtx->session, &pCtx->public_key, algorithm, kMode_SSS_Verify); + + status = sss_asymmetric_verify_digest(&asymVerifyCtx, digest, digestLen, signature, signatureLen); + if (kStatus_SSS_Success != status) { + LOG_I("Verification Failed user 1!!!"); + task1_status = 0x10; + goto exit; + } + else { + LOG_I("sss_asymmetric_verify_digest success user 1"); + } + sss_asymmetric_context_free(&asymVerifyCtx); + LOG_I("Done User 1"); + task1_status = 1; + +exit: +#if AX_EMBEDDED && USE_RTOS + vTaskDelete(NULL); +#endif + return NULL; +} + +void* Sign_Verify_eccsecp256r1_sha512_user2(void *ptr) +{ + sss_status_t status; + uint8_t digest[64] = "Hello World"; + size_t digestLen = sizeof(digest); + uint8_t signature[KEY_BIT_LENGTH] = {0}; + size_t signatureLen = sizeof(signature); + uint8_t pbKey[100] = {0}; + size_t pbKeyBitLen = 0; + size_t pbKeyByteLen = sizeof(pbKey); + sss_asymmetric_t asymVerifyCtx; + sss_algorithm_t algorithm; + sss_mode_t mode; + uint32_t keyId = MAKE_TEST_ID(__LINE__); + size_t keylen = KEY_BIT_LENGTH / 8; + + demoCtx_t *pCtx = (demoCtx_t *)ptr; +#if AX_EMBEDDED && USE_RTOS + while(!setup_done) { + sm_sleep(2); + } +#endif + + algorithm = kAlgorithm_SSS_SHA512; + mode = kMode_SSS_Sign; + + status = sss_key_object_allocate_handle( + &pCtx->key, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + if (kStatus_SSS_Success != status) { + LOG_I( "key_object_allocate_handle Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + + status = sss_asymmetric_context_init(&pCtx->asymm, &pCtx->session, &pCtx->key, algorithm, mode); + if (kStatus_SSS_Success != status) { + LOG_I( "Asymmetric Init Context Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + + status = sss_key_store_generate_key(&pCtx->ks, &pCtx->key, KEY_BIT_LENGTH, 0); + if (kStatus_SSS_Success != status) { + LOG_I( "Key Store Generate Key Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + else { + LOG_I("Key Store Generate Key success user 2!!!"); + } + sm_sleep(2); + status = sss_asymmetric_sign_digest(&pCtx->asymm, digest, digestLen, signature, &signatureLen); + if (kStatus_SSS_Success != status) { + LOG_I( "Signing Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + else { + LOG_I("sss_asymmetric_sign_digest success user 2"); + } + + sm_sleep(2); + status = sss_key_store_get_key(&pCtx->ks, &pCtx->key, pbKey, &pbKeyByteLen, &pbKeyBitLen); + if (kStatus_SSS_Success != status) { + LOG_I( " Get Public Key Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + + uint32_t pbkeyId = MAKE_TEST_ID(__LINE__); + status = sss_key_object_init(&pCtx->public_key, &pCtx->ks); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_object_init for derived key Failed user 2"); + task2_status = 0x10; + goto exit; + } + + status = sss_key_object_allocate_handle( + &pCtx->public_key, + pbkeyId, + kSSS_KeyPart_Public, + kSSS_CipherType_EC_NIST_P, + pbKeyByteLen, + kKeyObject_Mode_Persistent); + if(kStatus_SSS_Success != status){ + LOG_I("sss_key_object_allocate_handle Failed user 2"); + task2_status = 0x10; + goto exit; + } + + status = sss_key_store_set_key( + &pCtx->ks, &pCtx->public_key, pbKey, pbKeyByteLen, KEY_BIT_LENGTH, NULL, 0); + if(kStatus_SSS_Success != status) { + LOG_I(" sss_key_store_set_key Failed user 2!!!"); + task2_status = 0x10; + goto exit; + } + else { + LOG_I("Set public key success user 2"); + } + sm_sleep(2); + + sss_asymmetric_context_init(&asymVerifyCtx, &pCtx->session, &pCtx->public_key, algorithm, kMode_SSS_Verify); + + status = sss_asymmetric_verify_digest(&asymVerifyCtx, digest, digestLen, signature, signatureLen); + if (kStatus_SSS_Success != status) { + LOG_I( "Verification Failed!!!"); + task2_status = 0x10; + goto exit; + } + else { + LOG_I("sss_asymmetric_verify_digest success user 2"); + } + sss_asymmetric_context_free(&asymVerifyCtx); + + LOG_I("Done User 2"); + task2_status = 1; + +exit: +#if AX_EMBEDDED && USE_RTOS + vTaskDelete(NULL); +#endif + return NULL; +} + +sss_status_t baseSessionOpen(demoCtx_t *Testctx) +{ + sss_status_t status = kStatus_SSS_Success; + sss_type_t subsystem = kType_SSS_SE_SE05x; + sss_connection_type_t connectType = kSSS_ConnectionType_Plain; + +#if SSS_HAVE_SE05X +#if (RJCT_VCOM) || (SMCOM_JRCP_V1) || (SMCOM_JRCP_V2) || (SCI2C) || \ + (T1oI2C) || defined(SMCOM_THREAD) + SE_Connect_Ctx_t *pSessionCtxt = &Testctx->se05x_AuthCtx; +#endif +#endif /* SSS_HAVE_SE05X */ + +#if defined(SMCOM_JRCP_V1) + pSessionCtxt->connType = kType_SE_Conn_Type_JRCP_V1; + pSessionCtxt->portName = portName; +#endif +#if defined(SMCOM_JRCP_V2) + pSessionCtxt->connType = kType_SE_Conn_Type_JRCP_V2; + pSessionCtxt->portName = portName; +#endif +#if defined(RJCT_VCOM) + pSessionCtxt->connType = kType_SE_Conn_Type_VCOM; + pSessionCtxt->portName = portName; +#endif +#if defined(SCI2C) + pSessionCtxt->connType = kType_SE_Conn_Type_SCII2C; + pSessionCtxt->portName = NULL; +#endif +#if defined(T1oI2C) + pSessionCtxt->connType = kType_SE_Conn_Type_T1oI2C; + pSessionCtxt->portName = NULL; +#endif + + if (subsystem == kType_SSS_SE_SE05x) { +#if (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_USERID) || \ + (SSS_HAVE_SE05X_AUTH_ECKEY) || (SSS_HAVE_SE05X_AUTH_AESKEY) + pSessionCtxt->auth.authType = kSSS_AuthType_None; + connectType = kSSS_ConnectionType_Plain; +#elif (SSS_HAVE_SE05X_AUTH_PLATFSCP03) || \ + (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) || \ + (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) || \ + (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) + pSessionCtxt->auth.authType = kSSS_AuthType_SCP03; + //status = HostCrypto_CheckAuthMech_StoreAuthObj(pSessionCtxt); + status = ex_sss_se05x_prepare_host_keys(&Testctx->hostSession, + &Testctx->hostKs, + pSessionCtxt, + &Testctx->tst_se05x_auth, + __LINE__); + if (status != kStatus_SSS_Success) { + printf("Storing Auth SCPO3 object keys failed..."); + return status; + } + connectType = kSSS_ConnectionType_Encrypted; +#endif + } + + status = sss_session_open( + &Testctx->session, subsystem, 0, connectType, pSessionCtxt); + + if(kStatus_SSS_Success != status) { + LOG_I("Open Session Failed!!!"); + return status; + } + + status = sss_key_store_context_init(&Testctx->ks, &Testctx->session); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_store_context_init Failed!!!"); + return status; + } + + status = sss_key_object_init(&Testctx->key, &Testctx->ks); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_object_init Failed!!!"); + return status; + } + return status; +} + +sss_status_t userSessionOpen(demoCtx_t *Testctx, uint32_t userId) +{ + sss_status_t status = kStatus_SSS_Success; + SE_Connect_Ctx_t *pUserConnectCtxt = &Testctx->se05x_ChannelCtx; + pUserConnectCtxt->connType = kType_SE_Conn_Type_Channel; + Testctx->tunnel_ctx = >unnel_ctx; + pUserConnectCtxt->tunnelCtx = Testctx->tunnel_ctx; + sss_connection_type_t connectType = kSSS_ConnectionType_Plain; + +#if (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_PLATFSCP03) + connectType = kSSS_ConnectionType_Plain; + pUserConnectCtxt->auth.authType = kSSS_AuthType_None; + status = sss_session_open(&Testctx->session, + kType_SSS_SE_SE05x, + 0, + connectType, + pUserConnectCtxt); + +#elif (SSS_HAVE_SE05X_AUTH_USERID) || \ + (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) + connectType = kSSS_ConnectionType_Password; + pUserConnectCtxt->auth.authType = kSSS_AuthType_ID; + status = ex_sss_se05x_prepare_host_keys(&Testctx->hostSession, + &Testctx->hostKs, + pUserConnectCtxt, + &Testctx->tst_se05x_auth, + userId); + if (status != kStatus_SSS_Success) { + printf("Storing Auth UserID object failed..."); + return status; + } + status = sss_session_open(&Testctx->session, + kType_SSS_SE_SE05x, + kEX_SSS_ObjID_UserID_Auth + userId, + connectType, + pUserConnectCtxt); + +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || \ + (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) + connectType = kSSS_ConnectionType_Encrypted; + pUserConnectCtxt->auth.authType = kSSS_AuthType_AESKey; + status = ex_sss_se05x_prepare_host_keys(&Testctx->hostSession, + &Testctx->hostKs, + pUserConnectCtxt, + &Testctx->tst_se05x_auth, + userId); + if (status != kStatus_SSS_Success) { + printf("Storing Auth AESKey object failed..."); + return status; + } + status = sss_session_open(&Testctx->session, + kType_SSS_SE_SE05x, + kEX_SSS_ObjID_APPLETSCP03_Auth + userId, + connectType, + pUserConnectCtxt); + +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || \ + (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) + connectType = kSSS_ConnectionType_Encrypted; + pUserConnectCtxt->auth.authType = kSSS_AuthType_ECKey; + status = ex_sss_se05x_prepare_host_keys(&Testctx->hostSession, + &Testctx->hostKs, + pUserConnectCtxt, + &Testctx->tst_se05x_auth, + userId); + if (status != kStatus_SSS_Success) { + printf("Storing Auth UserID object failed..."); + return status; + } + status = sss_session_open(&Testctx->session, + kType_SSS_SE_SE05x, + kEX_SSS_objID_ECKEY_Auth + userId, + connectType, + pUserConnectCtxt); + +#else + LOG_W("Invalid Auth Type!!!") +#endif + + if(kStatus_SSS_Success != status) { + LOG_I("Open Session Failed!!!"); + return status; + } + + status = sss_key_store_context_init(&Testctx->ks, &Testctx->session); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_store_context_init Failed!!!"); + return status; + } + + status = sss_key_object_init(&Testctx->key, &Testctx->ks); + if(kStatus_SSS_Success != status) { + LOG_I("sss_key_object_init Failed!!!"); + return status; + } + return status; +}
diff --git a/demos/se05x/se05x_PCR/CMakeLists.txt b/demos/se05x/se05x_PCR/CMakeLists.txt new file mode 100644 index 0000000..f9b354e --- /dev/null +++ b/demos/se05x/se05x_PCR/CMakeLists.txt
@@ -0,0 +1,37 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_PCR) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) +EXPOSE_SE05X_AUTH_STRATEGY() +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM} + ) +ENDIF()
diff --git a/demos/se05x/se05x_PCR/Readme.rst b/demos/se05x/se05x_PCR/Readme.rst new file mode 100644 index 0000000..2b2020f --- /dev/null +++ b/demos/se05x/se05x_PCR/Readme.rst
@@ -0,0 +1,47 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x_PCR: + +======================================================================= + SE05X PCR example +======================================================================= + +This project can be used to demonstrate PCR as Policy. + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_PCR`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_PCR.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_PCR + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_PCR.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_PCR/out_se05x_PCR.rst.txt b/demos/se05x/se05x_PCR/out_se05x_PCR.rst.txt new file mode 100644 index 0000000..1b5a558 --- /dev/null +++ b/demos/se05x/se05x_PCR/out_se05x_PCR.rst.txt
@@ -0,0 +1,169 @@ +App :INFO :PlugAndTrust_v02.14.00_20200331 +App :INFO :Running C:\_ddm\develop\simw-top_build\se_x86\bin\Debug\se05x_PCR.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +smCom :DEBUG:Opening connection to JRCP successful +smCom :DEBUG:Tx> (Len=5) + 00 A4 04 00 00 +smCom :DEBUG:<Rx (Len=20) + 6F 10 84 08 A0 00 00 01 51 00 00 00 A5 04 9F 65 + 01 FF 90 00 +smCom :DEBUG:Tx> (Len=21) + 00 A4 04 00 0F A0 00 00 03 96 54 53 00 00 00 01 + 03 00 00 00 00 +smCom :DEBUG:<Rx (Len=9) + 05 06 FE 3F FF FF FF 90 00 +smCom :INFO :selectResponseData (Len=7) + 05 06 FE 3F FF FF FF +sss :INFO :Newer version of Applet Found +sss :INFO :Compiled for 0x30100. Got newer 0x506FE +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! + +APDU :DEBUG:CheckObjectExists [] +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0xEF000040 +smCom :DEBUG:Tx> (Len=11) + 80 04 00 27 06 41 04 EF 00 00 40 +smCom :DEBUG:<Rx (Len=5) + 41 01 02 90 00 +sss :DEBUG:sss_key_store_generate_key(@EF000040, cipherType=kSSS_CipherType_EC_NIST_P, keyBitLen=256) + +APDU :DEBUG:ReadECCurveList [] +smCom :DEBUG:Tx> (Len=5) + 80 02 0B 25 00 +smCom :DEBUG:<Rx (Len=23) + 41 82 00 11 01 01 02 01 01 01 01 01 01 01 01 01 + 01 01 01 01 01 90 00 + +APDU :DEBUG:CheckObjectExists [] +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0xEF000040 +smCom :DEBUG:Tx> (Len=11) + 80 04 00 27 06 41 04 EF 00 00 40 +smCom :DEBUG:<Rx (Len=5) + 41 01 02 90 00 + +APDU :DEBUG:WriteECKey [] +APDU :DEBUG:kSE05x_TAG_POLICY +APDU :DEBUG:policy (Len=45) + 2C 00 00 00 00 1F FD 90 00 7F FF FF FF 87 D3 E3 + 93 19 8F 5C 80 E0 BC 9B C9 82 00 1F B0 EE 20 1C + 27 0B 6D C8 84 52 E4 13 A3 25 56 81 75 +APDU :DEBUG:kSE05x_TAG_MAX_ATTEMPTS [maxAttempt] = 0x0 +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0xEF000040 +APDU :DEBUG:kSE05x_TAG_2 [curveID] = 0x3 +APDU :DEBUG:kSE05x_TAG_3 [privKey] (Len=0) +APDU :DEBUG:kSE05x_TAG_4 [pubKey] (Len=0) +smCom :DEBUG:Tx> (Len=61) + 80 01 61 00 38 11 2D 2C 00 00 00 00 1F FD 90 00 + 7F FF FF FF 87 D3 E3 93 19 8F 5C 80 E0 BC 9B C9 + 82 00 1F B0 EE 20 1C 27 0B 6D C8 84 52 E4 13 A3 + 25 56 81 75 41 04 EF 00 00 40 42 01 03 +smCom :DEBUG:<Rx (Len=2) + 90 00 + +APDU :DEBUG:ECDSASign [] +APDU :DEBUG:kSE05x_TAG_1 [objectID] = 0xEF000040 +APDU :DEBUG:kSE05x_TAG_2 [ecSignAlgo] = 0x21 +APDU :DEBUG:kSE05x_TAG_3 [inputData] (Len=32) + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +smCom :DEBUG:Tx> (Len=48) + 80 03 0C 09 2B 41 04 EF 00 00 40 42 01 21 43 20 + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +smCom :DEBUG:<Rx (Len=2) + 69 85 +sss :WARN :nxEnsure:'ret == SM_OK' failed. At Line:5601 Function:sss_se05x_TXn +App :INFO :Sign failed due to PCR expected value mismatch!!! + +APDU :DEBUG:CheckObjectExists [] +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0x7FFFFFFF +smCom :DEBUG:Tx> (Len=11) + 80 04 00 27 06 41 04 7F FF FF FF +smCom :DEBUG:<Rx (Len=5) + 41 01 02 90 00 + +APDU :DEBUG:WritePCR [] +APDU :INFO :Policy is NULL +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0x7FFFFFFF +APDU :DEBUG:kSE05x_TAG_2 [initialValue] (Len=32) + 12 A1 49 82 32 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +APDU :DEBUG:kSE05x_TAG_3 [inputData] (Len=0) +smCom :DEBUG:Tx> (Len=45) + 80 01 09 00 28 41 04 7F FF FF FF 42 20 12 A1 49 + 82 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 +smCom :DEBUG:<Rx (Len=2) + 90 00 + +APDU :DEBUG:WritePCR [] +APDU :INFO :Policy is NULL +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0x7FFFFFFF +APDU :DEBUG:kSE05x_TAG_2 [initialValue] (Len=0) +APDU :DEBUG:kSE05x_TAG_3 [inputData] (Len=5) + 12 A1 49 82 32 +smCom :DEBUG:Tx> (Len=18) + 80 01 09 00 0D 41 04 7F FF FF FF 43 05 12 A1 49 + 82 32 +smCom :DEBUG:<Rx (Len=2) + 90 00 + +APDU :DEBUG:ECDSASign [] +APDU :DEBUG:kSE05x_TAG_1 [objectID] = 0xEF000040 +APDU :DEBUG:kSE05x_TAG_2 [ecSignAlgo] = 0x21 +APDU :DEBUG:kSE05x_TAG_3 [inputData] (Len=32) + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +smCom :DEBUG:Tx> (Len=48) + 80 03 0C 09 2B 41 04 EF 00 00 40 42 01 21 43 20 + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +smCom :DEBUG:<Rx (Len=76) + 41 82 00 46 30 44 02 20 50 06 84 FF D1 CE 87 E7 + F6 89 BE 6C 5B 93 EE EB 26 FB 9D 86 01 25 4F C5 + CE EF 4E 0D 68 9A 64 D9 02 20 6A 4F 27 D0 95 CC + BD D4 20 66 60 B2 9E 52 26 96 A1 31 3C 1F 7D 77 + E3 16 02 AA B2 E3 36 61 05 70 90 00 + +APDU :DEBUG:ECDSAVerify [] +APDU :DEBUG:kSE05x_TAG_1 [objectID] = 0xEF000040 +APDU :DEBUG:kSE05x_TAG_2 [ecSignAlgo] = 0x21 +APDU :DEBUG:kSE05x_TAG_3 [inputData] (Len=32) + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +APDU :DEBUG:kSE05x_TAG_5 [signature] (Len=70) + 30 44 02 20 50 06 84 FF D1 CE 87 E7 F6 89 BE 6C + 5B 93 EE EB 26 FB 9D 86 01 25 4F C5 CE EF 4E 0D + 68 9A 64 D9 02 20 6A 4F 27 D0 95 CC BD D4 20 66 + 60 B2 9E 52 26 96 A1 31 3C 1F 7D 77 E3 16 02 AA + B2 E3 36 61 05 70 +smCom :DEBUG:Tx> (Len=120) + 80 03 0C 0A 73 41 04 EF 00 00 40 42 01 21 43 20 + 48 65 6C 6C 6F 20 57 6F 72 6C 64 00 00 00 00 00 + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 45 46 30 44 02 20 50 06 84 FF D1 CE 87 E7 F6 89 + BE 6C 5B 93 EE EB 26 FB 9D 86 01 25 4F C5 CE EF + 4E 0D 68 9A 64 D9 02 20 6A 4F 27 D0 95 CC BD D4 + 20 66 60 B2 9E 52 26 96 A1 31 3C 1F 7D 77 E3 16 + 02 AA B2 E3 36 61 05 70 +smCom :DEBUG:<Rx (Len=5) + 41 01 01 90 00 +App :INFO :Sign & Verify is Success with Expected PCR value!!! + +APDU :DEBUG:DeleteSecureObject [] +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0xEF000040 +smCom :DEBUG:Tx> (Len=11) + 80 04 00 28 06 41 04 EF 00 00 40 +smCom :DEBUG:<Rx (Len=2) + 90 00 + +APDU :DEBUG:DeleteSecureObject [] +APDU :DEBUG:kSE05x_TAG_1 [object id] = 0x7FFFFFFF +smCom :DEBUG:Tx> (Len=11) + 80 04 00 28 06 41 04 7F FF FF FF +smCom :DEBUG:<Rx (Len=2) + 90 00 +App :INFO :ex_sss Finished +Press any key to continue . . . \ No newline at end of file
diff --git a/demos/se05x/se05x_PCR/se05x_PCR.c b/demos/se05x/se05x_PCR/se05x_PCR.c new file mode 100644 index 0000000..973aeec --- /dev/null +++ b/demos/se05x/se05x_PCR/se05x_PCR.c
@@ -0,0 +1,196 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <string.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include "ex_sss_auth.h" + +#if SSS_HAVE_APPLET_SE05X_IOT +static ex_sss_boot_ctx_t gex_sss_pcr_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_pcr_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> +#if (SSS_HAVE_SE05X_AUTH_USERID) || (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) //UserID Session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_UserID_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_PLATFSCP03) //No auth +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_NONE_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) //AESKey +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) //ECKey session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID +#endif +#define ECC256R1_KEY_BIT_LENGTH 256 + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t retval = SM_NOT_OK; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + + sss_object_t ec_keyPair; + sss_asymmetric_t asymm = {0}; + uint8_t digest[32] = "Hello World"; + size_t digestLen = sizeof(digest); + uint8_t signature[ECC256R1_KEY_BIT_LENGTH] = {0}; + size_t signatureLen = sizeof(signature); + + sss_object_t pcr_object; + uint8_t pcr_init_value[32] = {0x12, 0xa1, 0x49, 0x82, 0x32}; + uint8_t pcr_update_value[] = {0x12, 0xa1, 0x49, 0x82, 0x32}; + size_t pcr_init_value_size = sizeof(pcr_init_value); + size_t pcr_update_value_size = sizeof(pcr_update_value); + + uint32_t keyId = (0xEF000000u + __LINE__); + size_t keylen = ECC256R1_KEY_BIT_LENGTH / 8; + +#if SSS_HAVE_SE05X_VER_GTE_06_00 + /* clang-format off */ + uint8_t pcr_expected_value[] = { + 0x87, 0xD3, 0xE3, 0x93, 0x19, 0x8F, 0x5C, 0x80, 0xE0, 0xBC, 0x9B, 0xC9, 0x82, 0x00, 0x1F, 0xB0, 0xEE, 0x20, 0x1C, 0x27, 0x0B, 0x6D, 0xC8, 0x84, 0x52, 0xE4, 0x13, 0xA3, 0x25, 0x56, 0x81, 0x75}; +#else + uint8_t pcr_expected_value[] = { + 0x89, 0x51, 0x56, 0x9f, 0x41, 0x5f, 0xeb, 0x4f, 0xb6, 0x37, 0x02, 0x86, 0xe7, 0xdd, 0xa0, 0x99, 0x33, 0x6c, 0x46, 0x36, 0xbc, 0xbb, 0x4c, 0x11, 0x04, 0x10, 0x0a, 0x86, 0x0d, 0x0c, 0xa4, 0x14}; + /* clang-format on */ +#endif + size_t pcr_expected_value_size = sizeof(pcr_expected_value); + + /* clang-format off */ + + /* Policies for ecc key */ + const sss_policy_u key_withPol = { + .type = KPolicy_Asym_Key, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = { + .asymmkey = { + .can_Sign = 1, + .can_Verify = 1, + .can_Encrypt = 1, + .can_Decrypt = 1, + .can_KD = 1, + .can_Wrap = 1, + .can_Write = 1, + .can_Gen = 1, + .can_Import_Export = 1, + .can_KA = 1, + .can_Read = 1, + .can_Attest = 1, + } + } + }; + + /* Common rules */ + const sss_policy_u common = { + .type = KPolicy_Common, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = { + .common = { + .req_Sm = 0, + .can_Delete = 1, + .forbid_All = 0, + } + } + }; + + sss_policy_u pcr = { + .type = KPolicy_Common_PCR_Value, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = { + .common_pcr_value = { + .pcrObjId = 0x7fffffff, + } + } + }; + memset(pcr.policy.common_pcr_value.pcrExpectedValue, + 0x00, + sizeof(pcr.policy.common_pcr_value.pcrExpectedValue)); + memcpy(pcr.policy.common_pcr_value.pcrExpectedValue, + pcr_expected_value, pcr_expected_value_size); + + /* create policy set */ + sss_policy_t policy_for_ec_key = { + .nPolicies = 3, + .policies = { &key_withPol, &common,&pcr} + }; + /* clang-format on */ + + status = sss_key_object_init(&ec_keyPair, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle( + &ec_keyPair, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_generate_key(&pCtx->ks, &ec_keyPair, ECC256R1_KEY_BIT_LENGTH, &policy_for_ec_key); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_asymmetric_context_init(&asymm, &pCtx->session, &ec_keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_asymmetric_sign_digest(&asymm, digest, digestLen, signature, &signatureLen); + if (status == kStatus_SSS_Fail) { + LOG_I("Sign failed due to PCR expected value mismatch!!!"); + } + sss_asymmetric_context_free(&asymm); + + /* Create a PCR Object */ + + status = sss_key_object_init(&pcr_object, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_object_allocate_handle( + &pcr_object, 0x7fffffff, kSSS_KeyPart_Default, kSSS_CipherType_PCR, pcr_init_value_size, kKeyObject_Mode_None); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + /* + *Inject PCR object and update value + */ + retval = Se05x_API_WritePCR(&(pSession->s_ctx), NULL, 0x7fffffff, pcr_init_value, pcr_init_value_size, NULL, 0); + ENSURE_OR_GO_EXIT(retval == SM_OK); + retval = Se05x_API_WritePCR(&(pSession->s_ctx), NULL, 0x7fffffff, NULL, 0, pcr_update_value, pcr_update_value_size); + ENSURE_OR_GO_EXIT(retval == SM_OK); + + status = sss_asymmetric_context_init(&asymm, &pCtx->session, &ec_keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_asymmetric_sign_digest(&asymm, digest, digestLen, signature, &signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + sss_asymmetric_context_free(&asymm); + + status = sss_asymmetric_context_init(&asymm, &pCtx->session, &ec_keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Verify); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_asymmetric_verify_digest(&asymm, digest, digestLen, signature, signatureLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + LOG_I("Sign & Verify is Success with Expected PCR value!!!"); + + sss_asymmetric_context_free(&asymm); + + status = sss_key_store_erase_key(&pCtx->ks, &ec_keyPair); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_erase_key(&pCtx->ks, &pcr_object); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = kStatus_SSS_Success; +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_PCR Example Success !!!..."); + } + else { + LOG_E("se05x_PCR Example Failed !!!..."); + } + return status; +} +#endif //if SSS_HAVE_SE05X
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/CMakeLists.txt b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/CMakeLists.txt new file mode 100644 index 0000000..4e60ce8 --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/CMakeLists.txt
@@ -0,0 +1,32 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_Perso_Delete_Mod_RSAKeyGen) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM} + ) +ENDIF()
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/out_se05x_Perso_Delete_Mod_RSAKeyGen.rst.txt b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/out_se05x_Perso_Delete_Mod_RSAKeyGen.rst.txt new file mode 100644 index 0000000..00a7e67 --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/out_se05x_Perso_Delete_Mod_RSAKeyGen.rst.txt
@@ -0,0 +1,8 @@ +App :INFO :PlugAndTrust_v02.15.00_20200522 +App :INFO :Running se05x_Perso_Delete_Mod_RSAKeyGen.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +App :INFO :# Running Remove Module RSAKEYGEN : On chip generation of RSA keys. +App :INFO :# Remove Module RSAKEYGEN is complete. +App :INFO :ex_sss Finished \ No newline at end of file
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/readme.rst b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/readme.rst new file mode 100644 index 0000000..8b2666e --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/readme.rst
@@ -0,0 +1,48 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x_Perso_Delete_Mod_RSAKeyGen: + +======================================================================= + SE05X Personalization Remove RSA Key Generation Module +======================================================================= + +This project permanently deletes rsa key generation module from secure element. Running +this example will restrict the generation of rsa keys inside the secure element. + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_Perso_Delete_Mod_RSAKeyGen`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_Perso_Delete_Mod_RSAKeyGen.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_Perso_Delete_Mod_RSAKeyGen + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_Perso_Delete_Mod_RSAKeyGen.rst.txt + :start-after: smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 \ No newline at end of file
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen.h b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen.h new file mode 100644 index 0000000..ada62ad --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen.h
@@ -0,0 +1,41 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Perso_Delete_Mod_RSAKeyGen.h + * + * This file solves purpose for + */ + +#ifndef DEMOS_SE05X_PERSO_DELETE_MOD_RSA_KEYGEN_H +#define DEMOS_SE05X_PERSO_DELETE_MOD_RSA_KEYGEN_H + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss_boot.h> + +/* ************************************************************************** */ +/* Defines */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Structrues and Typedefs */ +/* ************************************************************************** */ + +/** Personalization infterface */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Functions */ +/* ************************************************************************** */ + +smStatus_t ex_perso_OpenApplet(pSe05xSession_t session_ctx); +smStatus_t ex_perso_RM_MOD_RSAKEYGEN(pSe05xSession_t session_ctx); + +#endif /* DEMOS_SE05X_PERSO_DELETE_MOD_RSA_KEYGEN_H */
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_Main.c b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_Main.c new file mode 100644 index 0000000..23fe9cc --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_Main.c
@@ -0,0 +1,81 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization_Main.c + * + * This file solves purpose for + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include "se05x_Perso_Delete_Mod_RSAKeyGen.h" +#include "nxLog_App.h" +#include "se05x_perso_api.h" +#include "nxEnsure.h" + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_perso_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_perso_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sm_status = SM_NOT_OK; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + smStatus_t open_perso_applet_status = ex_perso_OpenApplet(&pSession->s_ctx); + ENSURE_OR_GO_EXIT(SM_OK == open_perso_applet_status); + LOG_I("# Running Remove Module RSAKEYGEN : On chip generation of RSA keys."); + sm_status = ex_perso_RM_MOD_RSAKEYGEN(&pSession->s_ctx); + + if (sm_status == SM_OK) { + LOG_I("# Remove Module RSAKEYGEN is complete."); + status = kStatus_SSS_Success; + } +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_Perso_Delete_Mod_RSAKeyGen Example Success !!!..."); + } + else { + LOG_E("se05x_Perso_Delete_Mod_RSAKeyGen Example Failed !!!..."); + } + return status; +} + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +smStatus_t ex_perso_OpenApplet(pSe05xSession_t session_ctx) +{ + smStatus_t status = Se05x_API_Perso_SelectApplet(session_ctx); + return status; +} \ No newline at end of file
diff --git a/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_del.c b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_del.c new file mode 100644 index 0000000..27d31cb --- /dev/null +++ b/demos/se05x/se05x_Perso_Delete_Mod_RSAKeyGen/se05x_Perso_Delete_Mod_RSAKeyGen_del.c
@@ -0,0 +1,51 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization_del.c + * + * This file solves purpose for + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include "se05x_Perso_Delete_Mod_RSAKeyGen.h" +#include "se05x_perso_api.h" +#include "nxEnsure.h" +#include "nxLog_hostLib.h" + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +smStatus_t ex_perso_RM_MOD_RSAKEYGEN(pSe05xSession_t session_ctx) +{ + smStatus_t status; + const uint8_t rm_mod[] = SE05X_API_PERSO_MOD_RSAKEYGEN; + + status = Se05x_API_Perso_Set_DELETE_OS_MODULE(session_ctx, rm_mod, sizeof(rm_mod)); + ENSURE_OR_GO_CLEANUP(status == SM_OK); +cleanup: + return status; +} +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */
diff --git a/demos/se05x/se05x_Personalization/CMakeLists.txt b/demos/se05x/se05x_Personalization/CMakeLists.txt new file mode 100644 index 0000000..6fd019b --- /dev/null +++ b/demos/se05x/se05x_Personalization/CMakeLists.txt
@@ -0,0 +1,32 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_Personalization) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM} + ) +ENDIF()
diff --git a/demos/se05x/se05x_Personalization/readme.rst b/demos/se05x/se05x_Personalization/readme.rst new file mode 100644 index 0000000..ef0bb13 --- /dev/null +++ b/demos/se05x/se05x_Personalization/readme.rst
@@ -0,0 +1,57 @@ +.. + Copyright 2019 NXP + + +.. _se05x-personalization: + +================================================= + DEMO for Personalization of SE051 +================================================= + + +This demo can be used to personalize some of the +parameters for SE051. + + +The demo is self explanatory:: + + se05x_Personalization.exe <operation> [operation] <port_name> + + Where, 'operation': one or sequence of the following: + + HELP : Prints list of APIs + I2C_DisableClockStretching : I2C: Disables clock stretching + I2C_EnableCLockStretching : I2C: Enables clock stretching + I2C_ProtocolGP : I2C: Use GP Mode for I2C + I2C_ProtocolUM : I2C: Use UM Mode like SE050 for I2C + I2C_ProtocolAutoDetect : I2C: Automatically detect I2C Protocol + I2C_ProtocolManual : I2C: Manually use fixed Protocol + I2C_EnablePowerSave : I2C: Go to power save after last APDU + I2C_DisablePowerSave : I2C: DO not go to power save after last APDU + I2C_SemiBlocking : I2C: SEMI Blocking I2C + I2C_NonBlocking : I2C: Non Blocking I2C + RM_MOD_IOT_EXTENDED : Delete: Extension to Elliptic Curve Cryptography. + RM_MOD_IOT_BASE : Delete: Collection of crypto algorithms often used in IoT devices. + RM_MODX_EGOVACCELERATORS : Delete: Secure Messaging Accelerators for eGovernment applications and modular arithmetic math API. + RM_MOD_RSAKEYGEN : On chip generation of RSA keys. + +For further details, please see product user manual. + +.. note:: You can add more operations in a single command. + +.. warning:: These values are effective only after IC Reset. + + +Compatible settings from host and SE +================================================= + +Some parameters need compatible settings at +both sides, from host and SE. Else it leaves +system in a non-operable state. + +e.g. If the SE is configured to be in ``ProtocolGP``, +and host is using ``ProtocolUM``, there can't be any +further communication with the SE without re-compiling +the middleware/demo at the host. And since the communication +between Host and SE is not function, there is no direct/easy +way to re-configure the SE Back.
diff --git a/demos/se05x/se05x_Personalization/se05x_Personalization.h b/demos/se05x/se05x_Personalization/se05x_Personalization.h new file mode 100644 index 0000000..dcad158 --- /dev/null +++ b/demos/se05x/se05x_Personalization/se05x_Personalization.h
@@ -0,0 +1,70 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization.h + * + * This file solves purpose for + */ + +#ifndef DEMOS_SE05X_SE05X_PERSONALIZATION_SE05X_PERSONALIZATION_H_ +#define DEMOS_SE05X_SE05X_PERSONALIZATION_SE05X_PERSONALIZATION_H_ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss_boot.h> + +/* ************************************************************************** */ +/* Defines */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Structrues and Typedefs */ +/* ************************************************************************** */ + +/** Personalization infterface */ + +typedef smStatus_t (*ex_perso_api_t)(pSe05xSession_t session_ctx); +typedef struct +{ + const char *name; + const char *description; + ex_perso_api_t fpAPI; +} ex_perso_if_t; + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Functions */ +/* ************************************************************************** */ + +smStatus_t ex_perso_HELP(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_OpenApplet(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_I2C_EnableCLockStretching(pSe05xSession_t session_ctx); +smStatus_t ex_perso_I2C_DisableClockStretching(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_I2C_ProtocolGP(pSe05xSession_t session_ctx); +smStatus_t ex_perso_I2C_ProtocolUM(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_I2C_ProtocolAutoDetect(pSe05xSession_t session_ctx); +smStatus_t ex_perso_I2C_ProtocolManual(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_I2C_EnablePowerSave(pSe05xSession_t session_ctx); +smStatus_t ex_perso_I2C_DisablePowerSave(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_I2C_SemiBlocking(pSe05xSession_t session_ctx); +smStatus_t ex_perso_I2C_NonBlocking(pSe05xSession_t session_ctx); + +smStatus_t ex_perso_RM_MOD_IOT_BASE(pSe05xSession_t session_ctx); +smStatus_t ex_perso_RM_MOD_IOT_EXTENDED(pSe05xSession_t session_ctx); +smStatus_t ex_perso_RM_MODX_EGOVACCELERATORS(pSe05xSession_t session_ctx); +smStatus_t ex_perso_RM_MOD_RSAKEYGEN(pSe05xSession_t session_ctx); + +#endif /* DEMOS_SE05X_SE05X_PERSONALIZATION_SE05X_PERSONALIZATION_H_ */
diff --git a/demos/se05x/se05x_Personalization/se05x_Personalization_I2C.c b/demos/se05x/se05x_Personalization/se05x_Personalization_I2C.c new file mode 100644 index 0000000..6c7ef59 --- /dev/null +++ b/demos/se05x/se05x_Personalization/se05x_Personalization_I2C.c
@@ -0,0 +1,113 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization_I2C.c + * + * This file solves purpose for + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include "se05x_Personalization.h" +#include <se05x_perso_api.h> +#include <se05x_perso_cnst.h> +#include <nxEnsure.h> +#include <nxLog_App.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +#define I2C_SET_API(NAME, DEF_NAME) \ + smStatus_t ex_perso_I2C_##NAME(pSe05xSession_t session_ctx) \ + { \ + smStatus_t status; \ + uint8_t i2c_params = 0; \ + status = Se05x_API_Perso_Get_I2C_PARAMS(session_ctx, &i2c_params); \ + ENSURE_OR_GO_CLEANUP(status == SM_OK); \ + i2c_params |= SE05X_PERSO_I2C_PARAMS_SET_##DEF_NAME; \ + status = Se05x_API_Perso_Set_I2C_PARAMS(session_ctx, i2c_params); \ + ENSURE_OR_GO_CLEANUP(status == SM_OK); \ + cleanup: \ + return status; \ + } + +#define I2C_MSK_API(NAME, DEF_NAME) \ + smStatus_t ex_perso_I2C_##NAME(pSe05xSession_t session_ctx) \ + { \ + smStatus_t status; \ + uint8_t i2c_params = 0; \ + status = Se05x_API_Perso_Get_I2C_PARAMS(session_ctx, &i2c_params); \ + ENSURE_OR_GO_CLEANUP(status == SM_OK); \ + i2c_params &= SE05X_PERSO_I2C_PARAMS_MSK_##DEF_NAME; \ + status = Se05x_API_Perso_Set_I2C_PARAMS(session_ctx, i2c_params); \ + ENSURE_OR_GO_CLEANUP(status == SM_OK); \ + cleanup: \ + return status; \ + } + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +#if 0 +smStatus_t ex_perso_I2CEnableCLockStretching2(pSe05xSession_t session_ctx) { + smStatus_t status; + uint8_t i2c_params = 0; + status = Se05x_API_Perso_Get_I2C_PARAMS(session_ctx, &i2c_params); + ENSURE_OR_GO_CLEANUP(status == SM_OK); + i2c_params |= (SE05X_PERSO_I2C_PARAMS_SET_SLAVE_CLK_STRCH); + status = Se05x_API_Perso_Set_I2C_PARAMS(session_ctx, i2c_params); + ENSURE_OR_GO_CLEANUP(status == SM_OK); +cleanup: + return status; +} + +smStatus_t ex_perso_I2CDisableClockStretching2(pSe05xSession_t session_ctx) { + smStatus_t status; + uint8_t i2c_params = 0; + status = Se05x_API_Perso_Get_I2C_PARAMS(session_ctx, &i2c_params); + ENSURE_OR_GO_CLEANUP(status == SM_OK); + i2c_params &= SE05X_PERSO_I2C_PARAMS_MSK_SLAVE_CLK_STRCH; + status = Se05x_API_Perso_Set_I2C_PARAMS(session_ctx, i2c_params); + ENSURE_OR_GO_CLEANUP(status == SM_OK); +cleanup: + return status; +} + +#endif + +I2C_SET_API(EnableCLockStretching, CLK_STRCH_ENABLED) +I2C_MSK_API(DisableClockStretching, CLK_STRCH_DISABLED) + +I2C_SET_API(ProtocolGP, I2C_GP) +I2C_MSK_API(ProtocolUM, I2C_UM) + +I2C_SET_API(EnablePowerSave, PWR_SAVE_ENABLED) +I2C_MSK_API(DisablePowerSave, PWR_SAVE_DISABLED) + +I2C_SET_API(SemiBlocking, I2C_SEMI_BLOCKING) +I2C_MSK_API(NonBlocking, I2C_NON_BLOCKING) + +I2C_MSK_API(ProtocolAutoDetect, PROTO_DETECT_AUTO) +I2C_SET_API(ProtocolManual, PROTO_SEL_MANUAL)
diff --git a/demos/se05x/se05x_Personalization/se05x_Personalization_Main.c b/demos/se05x/se05x_Personalization/se05x_Personalization_Main.c new file mode 100644 index 0000000..d6dc575 --- /dev/null +++ b/demos/se05x/se05x_Personalization/se05x_Personalization_Main.c
@@ -0,0 +1,171 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization_Main.c + * + * This file solves purpose for + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include "se05x_Personalization.h" +#include "nxLog_App.h" +#include "se05x_perso_api.h" +#include "nxEnsure.h" + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_perso_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_perso_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#include <ex_sss_main_inc.h> + +#define PERSO_IF_API(NAME, DESCRIPTION) \ + { \ + (#NAME), (DESCRIPTION), (&ex_perso_##NAME) \ + } + +static const ex_perso_if_t gpExPersoIF[] = { + PERSO_IF_API(HELP, "Prints list of APIs"), + PERSO_IF_API(I2C_DisableClockStretching, "I2C: Disables clock stretching"), + PERSO_IF_API(I2C_EnableCLockStretching, "I2C: Enables clock stretching"), + + PERSO_IF_API(I2C_ProtocolGP, "I2C: Use GP Mode for I2C"), + PERSO_IF_API(I2C_ProtocolUM, "I2C: Use UM Mode like SE050 for I2C"), + + PERSO_IF_API(I2C_ProtocolAutoDetect, "I2C: Automatically detect I2C Protocol"), + PERSO_IF_API(I2C_ProtocolManual, "I2C: Manually use fixed Protocol"), + + PERSO_IF_API(I2C_EnablePowerSave, "I2C: Go to power save after last APDU"), + PERSO_IF_API(I2C_DisablePowerSave, "I2C: DO not go to power save after last APDU"), + + PERSO_IF_API(I2C_SemiBlocking, "I2C: SEMI Blocking I2C"), + PERSO_IF_API(I2C_NonBlocking, "I2C: Non Blocking I2C"), + + PERSO_IF_API(RM_MOD_IOT_EXTENDED, "Delete: Extension to Elliptic Curve Cryptography."), + + PERSO_IF_API(RM_MOD_IOT_BASE, "Delete: Collection of crypto algorithms often used in IoT devices."), + + PERSO_IF_API(RM_MODX_EGOVACCELERATORS, + "Delete: Secure Messaging Accelerators for eGovernment applications and modular arithmetic math API."), + + PERSO_IF_API(RM_MOD_RSAKEYGEN, "On chip generation of RSA keys."), + + {NULL, NULL, NULL}, +}; + +const char *program_name = NULL; + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sm_status = SM_NOT_OK; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + int i = 0; + program_name = gex_sss_argv[0]; + bool fFound = FALSE; + + const ex_perso_if_t *apis_to_run[50] = {0}; + + for (i = 0; i < ARRAY_SIZE(apis_to_run); i++) { + int j; + for (j = i + 1; j < (gex_sss_argc - 1) && apis_to_run[i] == NULL; j++) { + for (const ex_perso_if_t *pf = &gpExPersoIF[0]; pf->name != NULL; pf++) { + if (0 == STRNICMP(pf->name, gex_sss_argv[j], strlen(pf->name) + 1)) { + apis_to_run[i] = pf; + fFound = TRUE; + break; + } + } + if (apis_to_run[i] == NULL) { + LOG_E("Don't know what to do with argument '%s'", gex_sss_argv[j]); + fFound = FALSE; + i = ARRAY_SIZE(apis_to_run); + break; + } + } + } + + if (fFound) { + smStatus_t open_perso_applet_status = ex_perso_OpenApplet(&pSession->s_ctx); + ENSURE_OR_GO_EXIT(SM_OK == open_perso_applet_status); + for (i = 0; i < ARRAY_SIZE(apis_to_run); i++) { + const ex_perso_if_t *api_to_run = apis_to_run[i]; + if (api_to_run != NULL) { + LOG_I("# Running %s : %s", api_to_run->name, api_to_run->description); + sm_status = api_to_run->fpAPI(&pSession->s_ctx); + ENSURE_OR_GO_EXIT(SM_OK == sm_status); + } + } + } + else { + // ! fFound; + sm_status = ex_perso_HELP(&pSession->s_ctx); + } + + if (sm_status == SM_OK) { + status = kStatus_SSS_Success; + } +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_Personalization Example Success !!!..."); + } + else { + LOG_E("se05x_Personalization Example Failed !!!..."); + } + return status; +} + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +smStatus_t ex_perso_OpenApplet(pSe05xSession_t session_ctx) +{ + smStatus_t status = Se05x_API_Perso_SelectApplet(session_ctx); + return status; +} + +smStatus_t ex_perso_HELP(pSe05xSession_t session_ctx) +{ + printf("\nUSAGE:\n"); + if (program_name != NULL) { + printf("%s <operation> [operation] <port_name>\n", program_name); + printf("\n"); + printf("Where, 'operation': one or sequence of the following:\n\n"); + for (const ex_perso_if_t *pf = &gpExPersoIF[0]; pf->name != NULL; pf++) { + printf(" %30s : %s\n", pf->name, pf->description); + } + printf("\n"); + LOG_I("NOTE-1: You can add more operations in a single command."); + LOG_W("NOTE-2: These values are effective only after IC Reset."); + printf("\n"); + } + return SM_OK; +}
diff --git a/demos/se05x/se05x_Personalization/se05x_Personalization_del.c b/demos/se05x/se05x_Personalization/se05x_Personalization_del.c new file mode 100644 index 0000000..d9478d7 --- /dev/null +++ b/demos/se05x/se05x_Personalization/se05x_Personalization_del.c
@@ -0,0 +1,74 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file se05x_Personalization_del.c + * + * This file solves purpose for + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include "se05x_Personalization.h" +#include "se05x_perso_api.h" +#include "nxEnsure.h" +#include "nxLog_hostLib.h" + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +#define RM_PERSO_MOD(MOD_NAME) \ + smStatus_t ex_perso_RM_##MOD_NAME(pSe05xSession_t session_ctx) \ + { \ + smStatus_t status; \ + const uint8_t rm_mod[] = SE05X_API_PERSO_##MOD_NAME; \ + \ + status = Se05x_API_Perso_Set_DELETE_OS_MODULE(session_ctx, rm_mod, sizeof(rm_mod)); \ + ENSURE_OR_GO_CLEANUP(status == SM_OK); \ + cleanup: \ + return status; \ + } +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#if 0 +smStatus_t ex_perso_RM_MOD_IOT_BASE(pSe05xSession_t session_ctx) { + smStatus_t status; + const uint8_t rm_mod[] = SE05X_API_PERSO_MOD_IOT_BASE; + + status = Se05x_API_Perso_Set_DELETE_OS_MODULE( + session_ctx, rm_mod, sizeof(rm_mod)); + ENSURE_OR_GO_CLEANUP(status == SM_OK); +cleanup: + return status; +} +#endif + +RM_PERSO_MOD(MOD_IOT_BASE) + +RM_PERSO_MOD(MOD_IOT_EXTENDED) + +RM_PERSO_MOD(MODX_EGOVACCELERATORS) + +RM_PERSO_MOD(MOD_RSAKEYGEN) + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */
diff --git a/demos/se05x/se05x_ReadState/CMakeLists.txt b/demos/se05x/se05x_ReadState/CMakeLists.txt new file mode 100644 index 0000000..3d4e839 --- /dev/null +++ b/demos/se05x/se05x_ReadState/CMakeLists.txt
@@ -0,0 +1,37 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ReadState) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM} + ) +ENDIF()
diff --git a/demos/se05x/se05x_ReadState/Readme.rst b/demos/se05x/se05x_ReadState/Readme.rst new file mode 100644 index 0000000..9eb5c2c --- /dev/null +++ b/demos/se05x/se05x_ReadState/Readme.rst
@@ -0,0 +1,62 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _ex-se05x-ReadState: + +======================================================================= + SE05X Read State example +======================================================================= + +This project can be used to get SE05X state information. +The state information is w.r.t + +1) LockState +#) Restriction on Object Creation +#) Platform SCP mandate state + +Refer to :cpp:type:`SE05x_LockState_t` +Refer to :cpp:type:`SE05x_RestrictMode_t` +Refer to :cpp:type:`SE05x_PlatformSCPRequest_t` + +.. literalinclude:: se05x_ReadState.c + :language: c + :dedent: 4 + :start-after: /* doc:start:read state variables */ + :end-before: /* doc:end:read state variables*/ + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_ReadState`` + + +Running the Example +======================================================================= + +If you have built a binary, flash the binary on to the board and reset +the board. + +If you have built an *exe* to be run from Windows using VCOM, run as:: + + se05x_ReadState.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_ReadState + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_ReadState.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_ReadState/out_se05x_ReadState.rst.txt b/demos/se05x/se05x_ReadState/out_se05x_ReadState.rst.txt new file mode 100644 index 0000000..2f5c0a9 --- /dev/null +++ b/demos/se05x/se05x_ReadState/out_se05x_ReadState.rst.txt
@@ -0,0 +1,33 @@ +App :INFO :PlugAndTrust_v02.15.00_20200522 +App :INFO :Running C:\_ddm\develop\simw-top_build\se_x86\bin\Debug\se05x_ReadState.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +smCom :DEBUG:Opening connection to JRCP successful +smCom :DEBUG:Tx> (Len=5) + 00 A4 04 00 00 +smCom :DEBUG:<Rx (Len=20) + 6F 10 84 08 A0 00 00 01 51 00 00 00 A5 04 9F 65 + 01 FF 90 00 +smCom :DEBUG:Tx> (Len=21) + 00 A4 04 00 0F A0 00 00 03 96 54 53 00 00 00 01 + 03 00 00 00 00 +smCom :DEBUG:<Rx (Len=9) + 05 08 00 3F FF FF FF 90 00 +smCom :INFO :selectResponseData (Len=7) + 05 08 00 3F FF FF FF +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! + +APDU :DEBUG:ReadState [] +smCom :DEBUG:Tx> (Len=5) + 80 02 00 5B 00 +smCom :DEBUG:<Rx (Len=9) + 41 82 00 03 02 00 02 90 00 +App :INFO :SE05x Read State Successfully!!! +App :INFO :Following is the SE05x Read State status +App :INFO :SE05x Lock State = 0x2 i.e. SE05x is Unlocked!!! +App :INFO :SE05x Restrict Mode = 0x0 i.e. No Restriction is applied for object creation!!! +App :INFO :SE05x Platform SCP Request = 0x2 i.e. Platform SCP is not required for Communication!!! +App :INFO :ex_sss Finished +Press any key to continue . . . \ No newline at end of file
diff --git a/demos/se05x/se05x_ReadState/se05x_ReadState.c b/demos/se05x/se05x_ReadState/se05x_ReadState.c new file mode 100644 index 0000000..b10fc1e --- /dev/null +++ b/demos/se05x/se05x_ReadState/se05x_ReadState.c
@@ -0,0 +1,107 @@ +/* Copyright 2019 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_tlv.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> + +#ifdef __cplusplus +} +#endif + +static ex_sss_boot_ctx_t gex_sss_readstate_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_readstate_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + /* doc:start:read state variables */ + SE05x_LockState_t lockState; + SE05x_RestrictMode_t restrictMode; + SE05x_PlatformSCPRequest_t platformSCPRequest; + /* doc:end:read state variables*/ + uint8_t state[4] = {0}; + size_t stateLen = sizeof(state); + smStatus_t sm_status; + sm_status = Se05x_API_ReadState(&pSession->s_ctx, state, &stateLen); + if (sm_status != SM_OK) { + LOG_E("Se05x_API_ReadState Failed"); + goto exit; + } + if (stateLen == 3) { + LOG_I("SE05x Read State Successfully!!!"); + LOG_I("Following is the SE05x Read State status"); + lockState = state[0]; + if (lockState == kSE05x_LockState_LOCKED) { + LOG_I("%s = 0x%0X %s", "SE05x Lock State", lockState, " i.e. SE05x is Locked!!!"); + } + else { + LOG_I("%s = 0x%0X %s", "SE05x Lock State", lockState, " i.e. SE05x is Unlocked!!!"); + } + restrictMode = state[1]; + + if (restrictMode == kSE05x_RestrictMode_NA) { + LOG_I("%s = 0x%0X %s", + "SE05x Restrict Mode", + restrictMode, + " i.e. No Restriction is applied for object creation!!!"); + } + else if (restrictMode == kSE05x_RestrictMode_RESTRICT_NEW) { + LOG_I("%s = 0x%0X %s", + "SE05x Restrict Mode", + restrictMode, + " i.e. Restriction is applied for new object creation!!!"); + } + else if (restrictMode == kSE05x_RestrictMode_RESTRICT_ALL) { + LOG_I("%s = 0x%0X %s", + "SE05x Restrict Mode", + restrictMode, + " i.e. Restriction is applied for all objects !!!"); + } + else { + goto exit; + } + platformSCPRequest = state[2]; + if (platformSCPRequest == kSE05x_PlatformSCPRequest_REQUIRED) { + LOG_I("%s = 0x%0X %s", + "SE05x Platform SCP Request", + platformSCPRequest, + " i.e. Platform SCP is Requested for Communication!!!"); + } + else if (platformSCPRequest == kSE05x_PlatformSCPRequest_NOT_REQUIRED) { + LOG_I("%s = 0x%0X %s", + "SE05x Platform SCP Request", + platformSCPRequest, + " i.e. Platform SCP is not required for Communication!!!"); + } + else { + goto exit; + } + status = kStatus_SSS_Success; + } +exit: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_ReadState Example Success !!!..."); + } + else { + LOG_E("se05x_ReadState Example Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_ReadWithAttestation/CMakeLists.txt b/demos/se05x/se05x_ReadWithAttestation/CMakeLists.txt new file mode 100644 index 0000000..895e2da --- /dev/null +++ b/demos/se05x/se05x_ReadWithAttestation/CMakeLists.txt
@@ -0,0 +1,20 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ReadWithAttestation) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE .) + +EXPOSE_SE05X_AUTH_STRATEGY() +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_ReadWithAttestation/Readme.rst b/demos/se05x/se05x_ReadWithAttestation/Readme.rst new file mode 100644 index 0000000..98658b4 --- /dev/null +++ b/demos/se05x/se05x_ReadWithAttestation/Readme.rst
@@ -0,0 +1,98 @@ +.. + Copyright 2020 NXP + + +.. highlight::shell + +.. _read-with-attestation: + +================================================= + Read object with Attestation +================================================= + +This example demonstrates how to read an object with +attestation and parse the attested data to check +various object attributes. + +In this example, we use an EC NIST-P 256 keypair as the +attestation key and a binary object which will be attested. + +.. note:: The maximum size of a binary object that can be attested + at a time is 500 bytes. The API available will only work on + binary objects with size up to 500 bytes. To perform attestation + on an object of greater size, we need to call corresponding + ``Se05x`` API in a loop, verifying the obtained signature every time. + + A reference implementation is available at :ref:`read-large-bin-obj` + +Building +================================================= + +Build the project with the following configurations. + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``se05x_ReadWithAttestation`` + + +Running +================================================= + +On running the example, you would be able to see object attributes +logged on the screen like:: + + App :INFO :Key att data (Len=28) + 00 F5 EF FA 0B 01 00 00 00 00 00 00 00 00 08 00 + 00 00 00 00 34 00 00 01 00 00 00 00 + App :INFO :Object Id 0xF5EFFA + App :INFO :Object Type 0xB + App :INFO :Type: + App :INFO : BINARY_FILE + App :INFO :Object Auth Attribute 0x1 + App :INFO :Auth: + App :INFO : Not Set + App :INFO :Auth Object: + App :INFO : No authentication required + App :INFO :Policies: + App :INFO : POLICY_OBJ_ALLOW_READ + App :INFO : POLICY_OBJ_ALLOW_WRITE + App :INFO : POLICY_OBJ_ALLOW_DELETE + App :INFO :tagLen for AEAD:0x00 + App :INFO :RFU bytes:0x00 + App :INFO :Owner:0x0000 + App :INFO :Object origin : 0x1 + App :INFO :Origin: + App :INFO : EXTERNAL + App :INFO :Object Version : 0x0000 + App :INFO :se05x_ReadWithAttestation Example Success !!! + App :INFO :ex_sss Finished + +You can see the various attributes associated with the object such +as object type, authentication mechanism, origin and policies. + +An example of how to perform read with attestation is given below + +.. literalinclude:: se05x_ReadWithAttestation.c + :language: c + :start-after: /* doc:start:read-w-attestation */ + :end-before: /* doc:end:read-w-attestation */ + :dedent: 4 + +The data received in ``att_data`` variable can be parsed to +read the object attributes. + + +.. _read-large-bin-obj: + +Reading large binary objects with attestation +================================================= + +Following is an example code on how to read a large binary file +with attestation. + +.. note:: This is required only when reading binary objects of size larger + than 500 bytes. For any other case, you should use SSS API as above + +.. literalinclude:: se05x_ReadWithAttestation.c + :language: c + :start-after: /* doc:start:read-large-binary-obj-w-attestation */ + :end-before: /* doc:end:read-large-binary-obj-w-attestation */
diff --git a/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.c b/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.c new file mode 100644 index 0000000..e713513 --- /dev/null +++ b/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.c
@@ -0,0 +1,839 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_auth.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_APDU_apis.h> +#include <se05x_ReadWithAttestation.h> +#include <se05x_enums.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ +#define EC_KEY_BIT_LEN 256 + +#if (SSS_HAVE_SE05X_AUTH_USERID) || (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) //UserID Session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_UserID_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_PLATFSCP03) //No auth +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_NONE_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) //AESKey +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) //ECKey session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID +#endif + +#define AUTHENTICATION_OBJ_ATTR_POLICYLEN_OFFSET 14 +#define KEYOBJ_VERSION_LENGTH 4 + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + + +typedef struct authObj_attributes +{ + uint16_t auth_attempts_cntr; + uint16_t max_auth_attempts_cntr; +} authObj_attributes_t; + +typedef struct non_authObj_attributes +{ + uint16_t min_tagLen_for_AEAD; + uint16_t rfu; +} non_authObj_attributes_t; + +typedef union attr { + authObj_attributes_t authObjAttr; + non_authObj_attributes_t nonAuthObjAttr; +} attr_u; + +typedef struct ObjAttr { + uint32_t object_id; + SE05x_SecObjTyp_t object_type; + SE05x_SetIndicator_t auth_attr; + attr_u attr; + uint32_t auth_obj_id_owner; + SE05x_Origin_t object_origin; + uint32_t object_version; +} ObjAttr_t; + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_attst_read_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ +static sss_status_t create_attestation_key(ex_sss_boot_ctx_t *pCtx, size_t keyBitLen); +static sss_status_t create_object_to_attest(ex_sss_boot_ctx_t *pCtx); +static void log_attribute_type(const SE05x_SecObjTyp_t type); +static void log_attribute_auth(const SE05x_SetIndicator_t auth); +static void log_attribute_access_rule(uint32_t ar_header); +static void log_attribute_origin(const SE05x_Origin_t origin); +sss_status_t read_large_object_with_attestation(ex_sss_boot_ctx_t *pCtx, + sss_se05x_key_store_t *keyStore, + sss_se05x_object_t *keyObject, + uint8_t *key, + size_t *keylen, + size_t *pKeyBitLen, + sss_se05x_object_t *keyObject_attst, + sss_algorithm_t algorithm_attst, + uint8_t *random_attst, + size_t randomLen_attst, + sss_se05x_attst_data_t *attst_data); +static sss_status_t create_host_public_key( + ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen, sss_object_t *verification_object); +static void clean_attestation_objects(ex_sss_boot_ctx_t *pCtx, uint32_t attestation_key_id, uint32_t keyid_to_attest); +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_attst_read_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + LOG_I("Running example se05x_ReadWithAttestation"); + + sss_status_t status = kStatus_SSS_Success; + uint8_t obj[2500] = {0}; + size_t objByteLen = sizeof(obj); + size_t objBitLen = objByteLen * 8; + sss_object_t sss_object_to_attest; + sss_object_t sss_attestation_object; + sss_algorithm_t algorithm = kAlgorithm_SSS_ECDSA_SHA256; + uint32_t auth_obj = 0; + + /* Variables for verification */ + sss_object_t verification_object = {0}; + uint8_t plainData[2500] = {0}; + size_t plainDataLen = sizeof(plainData); + uint8_t digest[64] = {0}; + size_t digestLen = sizeof(digest); + sss_digest_t digest_ctx; + sss_algorithm_t digest_algorithm = kAlgorithm_SSS_SHA256; + sss_asymmetric_t verify_ctx; + uint8_t datai = 0; + uint8_t *att = NULL; + uint8_t i = 0; + size_t attr_Len = 0; + uint8_t attr_Cnt = 0; + //uint8_t attr_policyLen =0; + + /* doc:start:read-w-attestation */ + /* Prepare/init attestation data structure */ + + sss_se05x_attst_comp_data_t comp_data[2] = {0}; + sss_se05x_attst_data_t att_data = {.valid_number = 2}; + /* Random data from the host to check if SE + * answers to current attestation request and + * not an older response is used */ + + /* clang-format off */ + uint8_t freshness[16] = { 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f }; + /* doc:end:read-w-attestation */ + /* Generate Random Attestation key + * We use NIST-P 256 in this example + */ + status = create_attestation_key(pCtx, EC_KEY_BIT_LEN); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = create_host_public_key( + pCtx, ATTESTATION_KEY_ID, EC_KEY_BIT_LEN, &verification_object); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Import any object into the SE which will be + * read with attestation. In this example, we are + * importing a binary objecct + */ + status = create_object_to_attest(pCtx); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Initialize Attesttation Object */ + status = sss_key_object_init(&sss_attestation_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = + sss_key_object_get_handle(&sss_attestation_object, ATTESTATION_KEY_ID); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Initialize object to attest */ + status = sss_key_object_init(&sss_object_to_attest, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&sss_object_to_attest, OBJECT_KEY_ID); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* doc:start:read-w-attestation */ + memcpy(&att_data.data, &comp_data[0], sizeof(comp_data)); + att_data.data[0].attributeLen = sizeof(att_data.data[0].attribute); + att_data.data[0].outrandomLen = sizeof(att_data.data[0].outrandom); + att_data.data[0].chipIdLen = sizeof(att_data.data[0].attribute); + att_data.data[0].signatureLen = sizeof(att_data.data[0].signature); + att_data.data[1].attributeLen = sizeof(att_data.data[1].attribute); + att_data.data[1].outrandomLen = sizeof(att_data.data[1].outrandom); + att_data.data[1].chipIdLen = sizeof(att_data.data[1].attribute); + att_data.data[1].signatureLen = sizeof(att_data.data[1].signature); + + /* clang-format on */ + + /* Execute attested read + * We use attestation object to attest (sign) all read data + object attributes + * Returns object attributes and signature in att_data + */ + + status = sss_se05x_key_store_get_key_attst((sss_se05x_key_store_t *)&pCtx->ks, + (sss_se05x_object_t *)&sss_object_to_attest, + obj, + &objByteLen, + &objBitLen, + (sss_se05x_object_t *)&sss_attestation_object, + algorithm, + freshness, + sizeof(freshness), + &att_data); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Perform verification operation here on the following data + * (key + offset) + + * att_data->data[0].attribute + + * att_data->data[0].timestamp + + * att_data->data[0].outrandom + + * att_data->data[0].chipId + * with signature + * att_data->data[0].signature + * + * We perform signature verification on host. + * First we digest the data then pass it to verify API + */ + + memcpy(plainData, obj, objByteLen); + memcpy(plainData + objByteLen, att_data.data[0].attribute, att_data.data[0].attributeLen); + memcpy(plainData + objByteLen + att_data.data[0].attributeLen, + &(att_data.data[0].timeStamp), + att_data.data[0].timeStampLen); + memcpy(plainData + objByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen, + att_data.data[0].outrandom, + att_data.data[0].outrandomLen); + memcpy(plainData + objByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen + + att_data.data[0].outrandomLen, + att_data.data[0].chipId, + att_data.data[0].chipIdLen); + plainDataLen = objByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen + + att_data.data[0].outrandomLen + att_data.data[0].chipIdLen; + + status = sss_digest_context_init(&digest_ctx, &pCtx->host_session, digest_algorithm, kMode_SSS_Digest); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_digest_one_go(&digest_ctx, plainData, plainDataLen, digest, &digestLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + sss_digest_context_free(&digest_ctx); + + /* Verify signature */ + sss_asymmetric_context_init(&verify_ctx, &pCtx->host_session, &verification_object, algorithm, kMode_SSS_Verify); + + status = sss_asymmetric_verify_digest( + &verify_ctx, digest, digestLen, att_data.data[0].signature, att_data.data[0].signatureLen); + + sss_asymmetric_context_free(&verify_ctx); + + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* doc:end:read-w-attestation */ + + /* Only look at first part of attested data + * object-type-dependend further parts contain same policy data */ + LOG_MAU8_D("Key att content", obj, objByteLen); + LOG_MAU8_I("Key att data", (uint8_t *)att_data.data[datai].attribute, att_data.data[datai].attributeLen); + + att = (uint8_t *)att_data.data[datai].attribute; + ObjAttr_t attrib = { 0 }; + attr_Len = att_data.data[datai].attributeLen; + + + attrib.object_id = (uint32_t)att[attr_Cnt] << 24 | att[attr_Cnt + 1] << 16 | \ + att[attr_Cnt + 2] << 8 | att[attr_Cnt + 3] << 0; + attr_Cnt += 4; + attrib.object_type = att[attr_Cnt++]; + attrib.auth_attr = att[attr_Cnt++]; + + LOG_I("Object Id 0x%04X", attrib.object_id); + LOG_I("Object Type 0x%X", attrib.object_type); + /* Log object type */ + log_attribute_type(attrib.object_type); + LOG_I("Object Auth Attribute 0x%X", attrib.auth_attr); + /* Log Object Auth Attribute */ + log_attribute_auth(attrib.auth_attr); + + i = AUTHENTICATION_OBJ_ATTR_POLICYLEN_OFFSET; + //attr_policyLen = att[i]; + + /* Check for existing policies and loop over them to log */ + while (att[i] >= 4) { + uint8_t ar_length = att[i++]; + if ((ar_length < 4) | (ar_length > 40)) + LOG_E("Access rule header invalid length 0X%02X", ar_length); + + auth_obj = (uint32_t)att[i] << 24 | att[i + 1] << 16 | att[i + 2] << 8 | att[i + 3]; + LOG_I("Auth Object:"); + if (auth_obj == 0) { + LOG_I("\tNo authentication required"); + } + else { + LOG_I("\tAuthentication required"); + LOG_I("\t0x%08X", auth_obj); + } + + i += 4; + + uint32_t ar_header = (uint32_t)att[i] << 24 | att[i + 1] << 16 | att[i + 2] << 8 | att[i + 3]; + i += 4; + + /* Log Access Rules (Policies) associated with the object */ + log_attribute_access_rule(ar_header); + + /* Print AR extension for POLICY_OBJ_REQUIRE_PCR_VALUE */ + if (ar_length > 4) { + if (ar_header & POLICY_OBJ_REQUIRE_PCR_VALUE) { + LOG_MAU8_I("AR Extension: ", att + i + 4, ar_length - 4); + i += ar_length; + } + } + } + + /* Parse origin flag */ + attrib.object_origin = att[i++]; + + if (i == attr_Len) + { /*Data is retrieved for Se050*/ + attrib.attr.authObjAttr.auth_attempts_cntr = (uint16_t)att[attr_Cnt] << 8 | att[attr_Cnt + 1]; + attr_Cnt += 2; + attrib.auth_obj_id_owner = (uint32_t)att[attr_Cnt] << 24 | att[attr_Cnt + 1] << 16 | \ + att[attr_Cnt + 2] << 8 | att[attr_Cnt + 3] << 0; + attr_Cnt += 4; + attrib.attr.authObjAttr.max_auth_attempts_cntr = (uint16_t)att[attr_Cnt] << 8 |\ + att[attr_Cnt + 1]; + attr_Cnt += 2; + if (attr_Cnt == AUTHENTICATION_OBJ_ATTR_POLICYLEN_OFFSET) + { + //origin needs to be filled and printed + log_attribute_origin(attrib.object_origin); + status = kStatus_SSS_Success; + } + } + else + { + attrib.object_version = att[i] << 24 | att[i + 1] << 16 | att[i + 2] << 8 | att[i + 3]; + i += KEYOBJ_VERSION_LENGTH; + if (i == attr_Len) + { /*Data is retrieved for Se051*/ + if (attrib.auth_attr == kSE05x_SetIndicator_NOT_SET || attrib.auth_attr == kSE05x_SetIndicator_SET) + { + if (attrib.auth_attr == kSE05x_SetIndicator_NOT_SET) + { + attrib.attr.nonAuthObjAttr.min_tagLen_for_AEAD = (uint16_t)att[attr_Cnt] << 8 | att[attr_Cnt + 1]; + attr_Cnt += 2; + attrib.auth_obj_id_owner = (uint32_t)att[attr_Cnt] << 24 | att[attr_Cnt + 1] << 16 | \ + att[attr_Cnt + 2] << 8 | att[attr_Cnt + 3] << 0; + attr_Cnt += 4; + attrib.attr.nonAuthObjAttr.rfu = (uint16_t)att[attr_Cnt] << 8 | \ + att[attr_Cnt + 1]; + + /* Log min tagLen for AEAD obj*/ + LOG_I("tagLen for AEAD:0x%02X", attrib.attr.nonAuthObjAttr.min_tagLen_for_AEAD); + /* Log RFU bytes*/ + LOG_I("RFU bytes:0x%02X", attrib.attr.nonAuthObjAttr.rfu); + + } + else if (attrib.auth_attr == kSE05x_SetIndicator_SET) + { + attrib.attr.authObjAttr.auth_attempts_cntr = (uint16_t)att[attr_Cnt] << 8 | att[attr_Cnt + 1]; + attr_Cnt += 2; + attrib.auth_obj_id_owner = (uint32_t)att[attr_Cnt] << 24 | att[attr_Cnt + 1] << 16 | \ + att[attr_Cnt + 2] << 8 | att[attr_Cnt + 3] << 0; + attr_Cnt += 4; + attrib.attr.authObjAttr.max_auth_attempts_cntr = (uint16_t)att[attr_Cnt] << 8 | \ + att[attr_Cnt + 1]; + /* Log Auth attempts cntr*/ + LOG_I("Auth attempts cntr:0x%02X", attrib.attr.authObjAttr.auth_attempts_cntr); + /* Log Max auth attempts cntr*/ + LOG_I("Max auth attempts cntr:0x%02X", attrib.attr.authObjAttr.max_auth_attempts_cntr); + } + attr_Cnt += 2; + if (attr_Cnt == AUTHENTICATION_OBJ_ATTR_POLICYLEN_OFFSET) + { + /* Log object id owner*/ + LOG_I("Owner:0x%04X", attrib.auth_obj_id_owner); + /* Log object origin*/ + LOG_I("Object origin : 0x%X", attrib.object_origin); + log_attribute_origin(attrib.object_origin); + /* Log object version*/ + LOG_I("Object Version : 0x%04X", attrib.object_version); + status = kStatus_SSS_Success; + } + + } + else + { + status = kStatus_SSS_Fail; + } + } + else + { + status = kStatus_SSS_Fail; + } + } + + if (kStatus_SSS_Success == status) { + LOG_I("se05x_ReadWithAttestation Example Success !!!"); + } + else { + LOG_E("se05x_ReadWithAttestation Example Failed !!!"); + } +cleanup: + clean_attestation_objects(pCtx, ATTESTATION_KEY_ID, OBJECT_KEY_ID); + sss_key_object_free(&verification_object); + return status; +} + +static sss_status_t create_attestation_key(ex_sss_boot_ctx_t *pCtx, size_t keyBitLen) +{ + sss_status_t status = kStatus_SSS_Fail; + size_t keylen = keyBitLen / 8; + uint32_t keyId = ATTESTATION_KEY_ID; + sss_object_t key_attst = {0}; + sss_cipher_type_t cipherType = kSSS_CipherType_EC_NIST_P; + + const sss_policy_u key_pol = {.type = KPolicy_Asym_Key, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.asymmkey = { + .can_Sign = 1, + .can_Verify = 1, + .can_Encrypt = 1, + .can_Decrypt = 1, + .can_KD = 1, + .can_Wrap = 1, + .can_Write = 1, + .can_Gen = 1, + .can_Import_Export = 1, + .can_KA = 1, + .can_Read = 1, + .can_Attest = 1, + }}}; + const sss_policy_u common = {.type = KPolicy_Common, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.common = { + .can_Delete = 1, + }}}; + sss_policy_t policy_for_ec_key = {.nPolicies = 2, .policies = {&key_pol, &common}}; + + status = sss_key_object_init(&key_attst, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Generate asymmetric key */ + status = sss_key_object_allocate_handle( + &key_attst, keyId, kSSS_KeyPart_Pair, cipherType, keylen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_generate_key(&pCtx->ks, &key_attst, keyBitLen, &policy_for_ec_key); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + +cleanup: + return status; +} + +static sss_status_t create_host_public_key( + ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen, sss_object_t *verification_object) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t attestation_key = {0}; + uint8_t public_key[100] = {0}; + size_t public_key_len = sizeof(public_key); + + status = sss_key_object_init(&attestation_key, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&attestation_key, keyId); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->ks, &attestation_key, public_key, &public_key_len, &keyBitLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_init(verification_object, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(verification_object, + __LINE__, + kSSS_KeyPart_Public, + attestation_key.cipherType, + public_key_len, + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->host_ks, verification_object, public_key, public_key_len, keyBitLen, NULL, 0); + +cleanup: + return status; +} + +static sss_status_t create_object_to_attest(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t object_to_attest = {0}; + sss_key_part_t key_part = kSSS_KeyPart_Default; + sss_cipher_type_t cipherType = kSSS_CipherType_Binary; + uint8_t data[] = OBJECT_TO_ATTEST; + size_t dataLen = sizeof(data); + uint32_t keyId = OBJECT_KEY_ID; + + const sss_policy_u obj_pol = {.type = KPolicy_File, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.file = { + .can_Write = 1, + .can_Read = 1, + }}}; + const sss_policy_u common = {.type = KPolicy_Common, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.common = { + .can_Delete = 1, + }}}; + sss_policy_t policy_for_bin_obj = {.nPolicies = 2, .policies = {&obj_pol, &common}}; + + status = sss_key_object_init(&object_to_attest, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Generate asymmetric key */ + status = sss_key_object_allocate_handle( + &object_to_attest, keyId, key_part, cipherType, dataLen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key( + &pCtx->ks, &object_to_attest, data, dataLen, dataLen, &policy_for_bin_obj, sizeof(policy_for_bin_obj)); + +cleanup: + return status; +} + +static void log_attribute_type(const SE05x_SecObjTyp_t type) +{ + LOG_I("Type:"); + switch (type) { + case kSE05x_SecObjTyp_EC_KEY_PAIR: + LOG_I("\tEC_KEY_PAIR"); + break; + case kSE05x_SecObjTyp_EC_PRIV_KEY: + LOG_I("\tEC_PRIV_KEY"); + break; + case kSE05x_SecObjTyp_EC_PUB_KEY: + LOG_I("\tEC_PUB_KEY"); + break; + case kSE05x_SecObjTyp_RSA_KEY_PAIR: + LOG_I("\tRSA_KEY_PAIR"); + break; + case kSE05x_SecObjTyp_RSA_KEY_PAIR_CRT: + LOG_I("\tRSA_KEY_PAIR_CRT"); + break; + case kSE05x_SecObjTyp_RSA_PRIV_KEY: + LOG_I("\tRSA_PRIV_KEY"); + break; + case kSE05x_SecObjTyp_RSA_PRIV_KEY_CRT: + LOG_I("\tRSA_PRIV_KEY_CRT"); + break; + case kSE05x_SecObjTyp_RSA_PUB_KEY: + LOG_I("\tRSA_PUB_KEY"); + break; + case kSE05x_SecObjTyp_AES_KEY: + LOG_I("\tAES_KEY"); + break; + case kSE05x_SecObjTyp_DES_KEY: + LOG_I("\tDES_KEY"); + break; + case kSE05x_SecObjTyp_BINARY_FILE: + LOG_I("\tBINARY_FILE"); + break; + case kSE05x_SecObjTyp_UserID: + LOG_I("\tUserID"); + break; + case kSE05x_SecObjTyp_COUNTER: + LOG_I("\tCOUNTER"); + break; + case kSE05x_SecObjTyp_PCR: + LOG_I("\tPCR_KEY_PAIR"); + break; + case kSE05x_SecObjTyp_CURVE: + LOG_I("\tCURVE"); + break; + case kSE05x_SecObjTyp_HMAC_KEY: + LOG_I("\tHMAC_KEY"); + break; + default: + LOG_E("Unknown secure object type\n"); + } +} + +static void log_attribute_auth(const SE05x_SetIndicator_t auth) +{ + LOG_I("Auth:"); + switch (auth) { + case kSE05x_SetIndicator_NOT_SET: + LOG_I("\tNot Set"); + break; + case kSE05x_SetIndicator_SET: + LOG_I("\tSet"); + break; + default: + LOG_E("not allwed set indicator in object attribute\n"); + } +} + +static void log_attribute_origin(const SE05x_Origin_t origin) +{ + LOG_I("Origin:"); + switch (origin) { + case kSE05x_Origin_INTERNAL: + LOG_I("\tINTERNAL"); + break; + case kSE05x_Origin_EXTERNAL: + LOG_I("\tEXTERNAL"); + break; + case kSE05x_Origin_PROVISIONED: + LOG_I("\tPROVISIONED"); + break; + case kSE05x_Origin_NA: + default: + LOG_E("\tORIGIN INVALID"); + } +} + +static void log_attribute_access_rule(uint32_t ar_header) +{ + LOG_I("Policies:"); + if (ar_header & POLICY_OBJ_FORBID_ALL) { + LOG_I("\tPOLICY_OBJ_FORBID_ALL"); + }; + if (ar_header & POLICY_OBJ_ALLOW_SIGN) { + LOG_I("\tPOLICY_OBJ_ALLOW_SIGN"); + }; + if (ar_header & POLICY_OBJ_ALLOW_VERIFY) { + LOG_I("\tPOLICY_OBJ_ALLOW_VERIFY"); + }; + if (ar_header & POLICY_OBJ_ALLOW_KA) { + LOG_I("\tPOLICY_OBJ_ALLOW_KA"); + }; + if (ar_header & POLICY_OBJ_ALLOW_ENC) { + LOG_I("\tPOLICY_OBJ_ALLOW_ENC"); + }; + if (ar_header & POLICY_OBJ_ALLOW_DEC) { + LOG_I("\tPOLICY_OBJ_ALLOW_DEC"); + }; + if (ar_header & POLICY_OBJ_ALLOW_KDF) { + LOG_I("\tPOLICY_OBJ_ALLOW_KDF"); + }; + if (ar_header & POLICY_OBJ_ALLOW_WRAP) { + LOG_I("\tPOLICY_OBJ_ALLOW_WRAP"); + }; + if (ar_header & POLICY_OBJ_ALLOW_READ) { + LOG_I("\tPOLICY_OBJ_ALLOW_READ"); + }; + if (ar_header & POLICY_OBJ_ALLOW_WRITE) { + LOG_I("\tPOLICY_OBJ_ALLOW_WRITE"); + }; + if (ar_header & POLICY_OBJ_ALLOW_GEN) { + LOG_I("\tPOLICY_OBJ_ALLOW_GEN"); + }; + if (ar_header & POLICY_OBJ_ALLOW_DELETE) { + LOG_I("\tPOLICY_OBJ_ALLOW_DELETE"); + }; + if (ar_header & POLICY_OBJ_REQUIRE_SM) { + LOG_I("\tPOLICY_OBJ_REQUIRE_SM"); + }; + if (ar_header & POLICY_OBJ_REQUIRE_PCR_VALUE) { + LOG_I("\tPOLICY_OBJ_REQUIRE_PCR_VALUE"); + }; + if (ar_header & POLICY_OBJ_ALLOW_ATTESTATION) { + LOG_I("\tPOLICY_OBJ_ALLOW_ATTESTATION"); + }; + if (ar_header & POLICY_OBJ_ALLOW_DESFIRE_AUTHENTICATION) { + LOG_I("\tPOLICY_OBJ_ALLOW_DESFIRE_AUTHENTICATION"); + }; + if (ar_header & POLICY_OBJ_ALLOW_DESFIRE_DUMP_SESSION_KEYS) { + LOG_I("\tPOLICY_OBJ_ALLOW_DESFIRE_DUMP_SESSION_KEYS"); + }; + if (ar_header & POLICY_OBJ_ALLOW_IMPORT_EXPORT) { + LOG_I("\tOLICY_OBJ_ALLOW_IMPORT_EXPORT"); + }; +} + +static void clean_attestation_objects(ex_sss_boot_ctx_t *pCtx, uint32_t attestation_key_id, uint32_t keyid_to_attest) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t object_to_delete = {0}; + status = sss_key_object_init(&object_to_delete, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + /* Delete attestation object */ + status = sss_key_object_get_handle(&object_to_delete, attestation_key_id); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &object_to_delete); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + /* Delete object to attest */ + status = sss_key_object_get_handle(&object_to_delete, keyid_to_attest); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &object_to_delete); + +exit: + return; +} + +/* doc:start:read-large-binary-obj-w-attestation */ +sss_status_t read_large_object_with_attestation(ex_sss_boot_ctx_t *pCtx, + sss_se05x_key_store_t *keyStore, + sss_se05x_object_t *keyObject, + uint8_t *key, + size_t *keylen, + size_t *pKeyBitLen, + sss_se05x_object_t *keyObject_attst, + sss_algorithm_t algorithm_attst, + uint8_t *random_attst, + size_t randomLen_attst, + sss_se05x_attst_data_t *attst_data) +{ + smStatus_t status = SM_NOT_OK; + sss_status_t sss_status = kStatus_SSS_Fail; + uint16_t rem_data = 0; + uint16_t offset = 0; + uint16_t size = 0; + size_t max_buffer = 0; + size_t signatureLen = 0; + uint32_t attestID; + SE05x_AttestationAlgo_t attestAlgo = kSE05x_AttestationAlgo_EC_SHA_256; + attestID = keyObject_attst->keyId; + /* Variables for verification */ + sss_object_t verification_object = {0}; + uint8_t plainData[2500] = {0}; + size_t plainDataLen = sizeof(plainData); + uint8_t digest[64] = {0}; + size_t digestLen = sizeof(digest); + sss_digest_t digest_ctx; + sss_algorithm_t algorithm = kAlgorithm_SSS_ECDSA_SHA256; + sss_algorithm_t digest_algorithm = kAlgorithm_SSS_SHA256; + sss_asymmetric_t verify_ctx; + + if (kStatus_SSS_Success != create_host_public_key(pCtx, attestID, EC_KEY_BIT_LEN, &verification_object)) { + goto cleanup; + } + + status = Se05x_API_ReadSize(&keyStore->session->s_ctx, keyObject->keyId, &size); + ENSURE_OR_GO_CLEANUP(status == SM_OK); + + if (*keylen < size) { + LOG_E("Insufficient buffer "); + goto cleanup; + } + + rem_data = size; + *keylen = size; + while (rem_data > 0) { + uint16_t chunk = (rem_data > BINARY_WRITE_MAX_LEN) ? BINARY_WRITE_MAX_LEN : rem_data; + rem_data = rem_data - chunk; + max_buffer = chunk; + + signatureLen = attst_data->data[0].signatureLen; + attst_data->data[0].timeStampLen = sizeof(SE05x_TimeStamp_t); + status = Se05x_API_ReadObject_W_Attst(&keyStore->session->s_ctx, + keyObject->keyId, + offset, + chunk, + attestID, + attestAlgo, + random_attst, + randomLen_attst, + (key + offset), + &max_buffer, + attst_data->data[0].attribute, + &(attst_data->data[0].attributeLen), + &(attst_data->data[0].timeStamp), + attst_data->data[0].outrandom, + &(attst_data->data[0].outrandomLen), + attst_data->data[0].chipId, + &(attst_data->data[0].chipIdLen), + attst_data->data[0].signature, + &signatureLen); + + attst_data->data[0].signatureLen -= signatureLen; + attst_data->valid_number = 1; + + ENSURE_OR_GO_CLEANUP(status == SM_OK); + + /* Perform verification operation here on the following data + * (key + offset) + + * attst_data->data[0].attribute + + * attst_data->data[0].timestamp + + * attst_data->data[0].outrandom + + * attst_data->data[0].chipId + * with signature + * attst_data->data[0].signature + * + * We perform signature verification on host. + * First we digest the data then pass it to verify API + */ + + memcpy(plainData, (key + offset), max_buffer); + memcpy(plainData + max_buffer, attst_data->data[0].attribute, attst_data->data[0].attributeLen); + memcpy(plainData + max_buffer + attst_data->data[0].attributeLen, + &(attst_data->data[0].timeStamp), + attst_data->data[0].timeStampLen); + memcpy(plainData + max_buffer + attst_data->data[0].attributeLen + attst_data->data[0].timeStampLen, + attst_data->data[0].outrandom, + attst_data->data[0].outrandomLen); + memcpy(plainData + max_buffer + attst_data->data[0].attributeLen + attst_data->data[0].timeStampLen + + attst_data->data[0].outrandomLen, + attst_data->data[0].chipId, + attst_data->data[0].chipIdLen); + plainDataLen = max_buffer + attst_data->data[0].attributeLen + attst_data->data[0].timeStampLen + + attst_data->data[0].outrandomLen + attst_data->data[0].chipIdLen; + + sss_status = sss_digest_context_init(&digest_ctx, &pCtx->host_session, digest_algorithm, kMode_SSS_Digest); + ENSURE_OR_GO_CLEANUP(sss_status == kStatus_SSS_Success); + + sss_status = sss_digest_one_go(&digest_ctx, plainData, plainDataLen, digest, &digestLen); + ENSURE_OR_GO_CLEANUP(sss_status == kStatus_SSS_Success); + + sss_digest_context_free(&digest_ctx); + + /* Verify signature */ + sss_asymmetric_context_init( + &verify_ctx, &pCtx->host_session, &verification_object, algorithm, kMode_SSS_Verify); + + sss_status = + sss_asymmetric_verify_digest(&verify_ctx, digest, digestLen, attst_data->data[0].signature, signatureLen); + + sss_asymmetric_context_free(&verify_ctx); + + ENSURE_OR_GO_CLEANUP(sss_status == kStatus_SSS_Success); + + offset = offset + chunk; + } + +cleanup: + return sss_status; +} +/* doc:end:read-large-binary-obj-w-attestation */
diff --git a/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.h b/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.h new file mode 100644 index 0000000..ae10279 --- /dev/null +++ b/demos/se05x/se05x_ReadWithAttestation/se05x_ReadWithAttestation.h
@@ -0,0 +1,35 @@ +/* +* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#ifndef __SE05X_READ_W_ATTST_H__ +#define __SE05X_READ_W_ATTST_H__ + +#define ATTESTATION_KEY_ID 0xAFFE5F +#define OBJECT_KEY_ID 0xF5EFFA + +#include <fsl_sss_api.h> +#include <stdint.h> + +#define OBJECT_TO_ATTEST \ + { \ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, \ + 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, \ + 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, \ + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, \ + 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, \ + 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, \ + 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, \ + 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, \ + 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, \ + 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, \ + 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, \ + 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, \ + 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, \ + 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, \ + 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF \ + } + +#endif //__SE05X_READ_W_ATTST_H__ \ No newline at end of file
diff --git a/demos/se05x/se05x_RotatePlatformSCP03Keys/CMakeLists.txt b/demos/se05x/se05x_RotatePlatformSCP03Keys/CMakeLists.txt new file mode 100644 index 0000000..b8e1a72 --- /dev/null +++ b/demos/se05x/se05x_RotatePlatformSCP03Keys/CMakeLists.txt
@@ -0,0 +1,26 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_RotatePlatformSCP03Keys) + +FILE( + GLOB + files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_RotatePlatformSCP03Keys/Readme.rst b/demos/se05x/se05x_RotatePlatformSCP03Keys/Readme.rst new file mode 100644 index 0000000..2c0ea3e --- /dev/null +++ b/demos/se05x/se05x_RotatePlatformSCP03Keys/Readme.rst
@@ -0,0 +1,127 @@ +.. + Copyright 2019 NXP + + + +.. highlight:: bat + +.. _se05x-rotate-keys: + +======================================================================= + SE05X Rotate PlatformSCP Keys Demo +======================================================================= + +This project is to demonstrate rotation of Platform SCP03 keys for IOT SSD. +The Platform SCP03 keys used during inital authentication can be replaced +using this example. In this example, we will rotate existing SCP03 keys to new +keys and then revert back to the old keys. + +Once the key rotation is successful on the IC a file is created +``plain_scp.txt``. This file contains updated key values written to IC. For +the next authentication if the above file is available, the keys are taken +from the file. If the file is not present, the keys which are pre-compiled are +picked up for authentication. + +Following are the file paths for different platforms: + +**For Android** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_scp03_keys.h + :language: c + :start-after: /* doc:start:android-scp03-path */ + :end-before: /* doc:end:android-scp03-path */ + +**For Linux** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_scp03_keys.h + :language: c + :start-after: /* doc:start:linux-scp03-path */ + :end-before: /* doc:end:linux-scp03-path */ + + +**For Windows** + +.. literalinclude:: ../../../sss/ex/inc/ex_sss_scp03_keys.h + :language: c + :start-after: /* doc:start:windows-scp03-path */ + :end-before: /* doc:end:windows-scp03-path */ + + +.. note:: For Android based platforms, it is important that the keymaster service + has access to the PlatfSCP03 keys file while system boot. Be sure to update sepolicy + accordingly. + + +Prerequisites +===================== + +Since this example is portable across various platforms, +the needs are different. + +See Build Plug & Trust middleware stack. (Refer :ref:`building`) + + +Configuring the Demo +======================================================================= + +New Platform SCP03 keys are defined as following. Update your keys here. + +.. literalinclude:: se05x_TP_PlatformSCP03keys.c + :language: c + :start-after: /* doc:start:new-scp03-keys */ + :end-before: /* doc:end:new-scp03-keys */ + +Old Platform SCP03 keys are defined as following. Make sure these match +the ones in SE05X. + +.. literalinclude:: se05x_TP_PlatformSCP03keys.c + :language: c + :start-after: /* doc:start:old-scp03-keys */ + :end-before: /* doc:end:old-scp03-keys */ + +**The following code reverts to old Platform SCP03 keys.** If you +do not wish to revert to old keys and want to use the new keys, +comment out the following line from the example. +For development testing, we rollback to original keys. +It is left to customer to comment out this line. + +.. literalinclude:: se05x_TP_PlatformSCP03keys.c + :language: c + :start-after: /* doc:start:revert-scp03-keys */ + :end-before: /* doc:end:revert-scp03-keys */ + + +Building the Demo +======================================================================= + +Use the following configurations in CMake: + +- ``SE05X_Auth_PlatfSCP03``: ON + +Build project: ``se05x_RotatePlatformSCP03Keys`` + +Running the Example +======================================================================= + +If you have built a binary, flash the ``se05x_RotatePlatformSCP03Keys`` +binary on to the board and reset the board. + +If you have built an *exe* to be run from PC using VCOM, run as:: + + se05x_RotatePlatformSCP03Keys.exe <PORT NAME> + +Where **<PORT NAME>** is the VCOM COM port. + +On Raspberry-Pi or iMX board, run as:: + + ./se05x_RotatePlatformSCP03Keys + + +Console output +======================================================================= + +If everything is setup correctly the output would be as follows :: + + App:INFO :Congratulations !!! Key Rotation Successful!!!! + App:INFO :Congratulations !!! Key Rotation Successful!!!! + App:INFO :ex_sss Finished
diff --git a/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.c b/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.c new file mode 100644 index 0000000..b8058cb --- /dev/null +++ b/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.c
@@ -0,0 +1,318 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "se05x_TP_PlatformSCP03keys.h" + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <ex_sss_scp03_keys.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> + +#if !AX_EMBEDDED +#include <sys/stat.h> +#ifdef _MSC_VER +#include <direct.h> +#endif // _MSC_VER +#endif // !AX_EMBEDDED + +#if defined(_MSC_VER) +#define DO_MKDIR(DIR_NAME) _mkdir((DIR_NAME)); +#else //#if defined(__linux__) || defined(__CYGWIN__) || defined(__clang__) +#define DO_MKDIR(DIR_NAME) \ + mkdir((DIR_NAME), S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP | S_IROTH | S_IXOTH); +#endif + +#include "ex_sss_auth.h" +#include "smCom.h" + +static ex_sss_boot_ctx_t gex_sss_tp_keys_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_tp_keys_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +/* This application wants only ISD selection as the keys are for ISD */ +/* So applet selection has been skipped */ +#define EX_SSS_BOOT_SKIP_SELECT_APPLET 1 + +#include <ex_sss_main_inc.h> + +static sss_status_t tp_PlatformKeys(uint8_t *enc, uint8_t *mac, uint8_t *dek, ex_sss_boot_ctx_t *pCtx); +static sss_status_t createKeyData(uint8_t *key, uint8_t *targetStore, ex_sss_boot_ctx_t *pCtx, uint32_t Id); +static sss_status_t genKCVandEncryptKey( + uint8_t *encryptedkey, uint8_t *keyCheckVal, uint8_t *plainKey, ex_sss_boot_ctx_t *pCtx, uint32_t keyId); + +#ifdef EX_SSS_SCP03_FILE_PATH +static sss_status_t write_keys_toFile(uint8_t *enc, uint8_t *mac, uint8_t *dek); +#endif //!AX_EMBEDDED + +/* doc:start:new-scp03-keys */ +#define EX_SSS_AUTH_NEW_ENC_KEY \ + { \ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F \ + } + +#define EX_SSS_AUTH_NEW_MAC_KEY \ + { \ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F \ + } + +#define EX_SSS_AUTH_NEW_DEK_KEY \ + { \ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F \ + } +/* doc:end:new-scp03-keys */ + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t PROV_KEY_ENC[] = EX_SSS_AUTH_NEW_ENC_KEY; + uint8_t PROV_KEY_MAC[] = EX_SSS_AUTH_NEW_MAC_KEY; + uint8_t PROV_KEY_DEK[] = EX_SSS_AUTH_NEW_DEK_KEY; + + /* doc:start:old-scp03-keys */ + uint8_t OLD_KEY_ENC[] = EX_SSS_AUTH_SE05X_KEY_ENC; + uint8_t OLD_KEY_MAC[] = EX_SSS_AUTH_SE05X_KEY_MAC; + uint8_t OLD_KEY_DEK[] = EX_SSS_AUTH_SE05X_KEY_DEK; + /* doc:end:old-scp03-keys */ + + status = tp_PlatformKeys(PROV_KEY_ENC, PROV_KEY_MAC, PROV_KEY_DEK, pCtx); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* doc:start:revert-scp03-keys */ + status = tp_PlatformKeys(OLD_KEY_ENC, OLD_KEY_MAC, OLD_KEY_DEK, pCtx); + /* doc:end:revert-scp03-keys */ + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_TP_PlatformSCP03keys Example Success !!!..."); + } + else { + LOG_E("se05x_TP_PlatformSCP03keys Example Failed !!!..."); + } + return status; +} + +static sss_status_t tp_PlatformKeys(uint8_t *enc, uint8_t *mac, uint8_t *dek, ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t keyVersion = pCtx->se05x_open_ctx.auth.ctx.scp03.pStatic_ctx->keyVerNo; + tlvHeader_t hdr = {{GP_CLA_BYTE, GP_INS_PUTKEY, keyVersion, GP_P2_MULTIPLEKEYS}}; + smStatus_t st = SM_NOT_OK; + uint8_t response[64]; + size_t responseLen = sizeof(response); + uint8_t cmdBuf[128]; + uint8_t len = 0; + uint8_t keyChkValues[16]; + uint8_t keyChkValLen = 0; + + /* Prepare the packet for SCP03 keys Provision */ + cmdBuf[len] = keyVersion; //keyVersion to replace + len += 1; + keyChkValues[keyChkValLen] = keyVersion; + keyChkValLen += 1; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + + /* Prepare the packet for ENC Key */ + status = createKeyData(enc, &cmdBuf[len], pCtx, MAKE_TEST_ID(__LINE__)); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + memcpy(&keyChkValues[keyChkValLen], &cmdBuf[len + 3 + AES_KEY_LEN_nBYTE + 1], CRYPTO_KEY_CHECK_LEN); + len += (3 + AES_KEY_LEN_nBYTE + 1 + CRYPTO_KEY_CHECK_LEN); + keyChkValLen += CRYPTO_KEY_CHECK_LEN; + + /* Prepare the packet for MAC Key */ + status = createKeyData(mac, &cmdBuf[len], pCtx, MAKE_TEST_ID(__LINE__)); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + memcpy(&keyChkValues[keyChkValLen], &cmdBuf[len + 3 + AES_KEY_LEN_nBYTE + 1], CRYPTO_KEY_CHECK_LEN); + len += (3 + AES_KEY_LEN_nBYTE + 1 + CRYPTO_KEY_CHECK_LEN); + keyChkValLen += CRYPTO_KEY_CHECK_LEN; + + /* Prepare the packet for DEK Key */ + status = createKeyData(dek, &cmdBuf[len], pCtx, MAKE_TEST_ID(__LINE__)); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + memcpy(&keyChkValues[keyChkValLen], &cmdBuf[len + 3 + AES_KEY_LEN_nBYTE + 1], CRYPTO_KEY_CHECK_LEN); + len += (3 + AES_KEY_LEN_nBYTE + 1 + CRYPTO_KEY_CHECK_LEN); + keyChkValLen += CRYPTO_KEY_CHECK_LEN; + + /* Reset status to fail */ + status = kStatus_SSS_Fail; + st = DoAPDUTxRx_s_Case4(&pSession->s_ctx, &hdr, cmdBuf, len, response, &responseLen); + ENSURE_OR_GO_CLEANUP(st == SM_OK); + + // reconstruct Return Value + st = (response[responseLen - 2] << 8) + response[responseLen - 1]; + ENSURE_OR_GO_CLEANUP(st == SM_OK); + if ((memcmp(response, keyChkValues, keyChkValLen) == 0)) { + LOG_I("Congratulations !!! Key Rotation Successful!!!!"); +#ifdef EX_SSS_SCP03_FILE_PATH + status = write_keys_toFile(enc, mac, dek); + if (status == kStatus_SSS_Success) { + LOG_W("Changed keys logged to %s.", EX_SSS_SCP03_FILE_PATH); + } + else { + LOG_W("Changed keys are not logged to any file."); + /* No need to get concerned with status here. + * Because although file writing failed, Key has changed inside the IC. + * This status will be overwirtten below */ + } +#endif //EX_SSS_SCP03_FILE_PATH + } + else { + LOG_E("!!! Key Rotation Failed!!!!"); + goto cleanup; + } + status = kStatus_SSS_Success; + +cleanup: + return status; +} + +#ifdef EX_SSS_SCP03_FILE_PATH +static sss_status_t write_keys_toFile(uint8_t *penc, uint8_t *pmac, uint8_t *pdek) +{ + FILE *fp = NULL; + struct stat info; + int ret = 0; + + const char *file_name = EX_SSS_SCP03_FILE_PATH; + const char *dir_name = EX_SSS_SCP03_FILE_DIR; + + ret = stat(dir_name, &info); + + if (ret != 0) { + LOG_W("Cannot access SCP03 keys directory '%s'", EX_SSS_SCP03_FILE_DIR); + } + if ((ret == 0) && (info.st_mode & S_IFDIR)) { + LOG_I("SCP03 keys directory exists"); + /* Nothing to be done */ + } + else { + LOG_I("Creating directory"); + DO_MKDIR(dir_name); + } + + fp = fopen(file_name, "wb+"); + if (fp == NULL) { + LOG_W("Could not open '%s'", EX_SSS_SCP03_FILE_PATH); + return kStatus_SSS_Fail; + } + + fprintf(fp, "ENC "); + for (int i = 0; i < 16; i++) { + fprintf(fp, "%02x", penc[i]); + } + + fprintf(fp, "\n"); + fprintf(fp, "MAC "); + for (int i = 0; i < 16; i++) { + fprintf(fp, "%02x", pmac[i]); + } + + fprintf(fp, "\n"); + fprintf(fp, "DEK "); + for (int i = 0; i < 16; i++) { + fprintf(fp, "%02x", pdek[i]); + } + fprintf(fp, "\n"); + fclose(fp); + + return kStatus_SSS_Success; +} +#endif // EX_SSS_SCP03_FILE_PATH + +static sss_status_t createKeyData(uint8_t *key, uint8_t *targetStore, ex_sss_boot_ctx_t *pCtx, uint32_t Id) +{ + uint8_t keyCheckValues[AES_KEY_LEN_nBYTE] = {0}; + sss_status_t status = kStatus_SSS_Fail; + + /* For Each Key add Key Type Length of Key data and key length*/ + + targetStore[0] = PUT_KEYS_KEY_TYPE_CODING_AES; //Key Type + targetStore[1] = AES_KEY_LEN_nBYTE + 1; // Length of the 'AES key data' + targetStore[2] = AES_KEY_LEN_nBYTE; // Length of 'AES key' + targetStore[3 + AES_KEY_LEN_nBYTE] = CRYPTO_KEY_CHECK_LEN; //Lenth of KCV + + /* Encrypt Key and generate key check values */ + status = genKCVandEncryptKey(&targetStore[3], keyCheckValues, key, pCtx, Id); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Copy the Key Check values */ + memcpy(&targetStore[3 + AES_KEY_LEN_nBYTE + 1], &keyCheckValues[0], CRYPTO_KEY_CHECK_LEN); + +cleanup: + return status; +} + +static sss_status_t genKCVandEncryptKey( + uint8_t *encryptedkey, uint8_t *keyCheckVal, uint8_t *plainKey, ex_sss_boot_ctx_t *pCtx, uint32_t keyId) +{ + sss_algorithm_t algorithm = kAlgorithm_SSS_AES_ECB; + sss_mode_t mode = kMode_SSS_Encrypt; + sss_status_t status = kStatus_SSS_Fail; + uint8_t keyCheckValLen = 0; + uint8_t encryptedkeyLen = 0; + uint8_t refOneArray[AES_KEY_LEN_nBYTE] = {0}; + sss_symmetric_t symm; + sss_object_t keyObj; + uint8_t DekEnckey[256]; + size_t DekEnckeyLen = sizeof(DekEnckey); + size_t DekEnckeyBitLen = 1024; + + /* Initialize the key Object */ + status = sss_key_object_init(&keyObj, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Allocate the key Object handle */ + status = sss_key_object_allocate_handle( + &keyObj, keyId, kSSS_KeyPart_Default, kSSS_CipherType_AES, 16, kKeyObject_Mode_Transient); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Set the key */ + status = + sss_key_store_set_key(&pCtx->host_ks, &keyObj, plainKey, AES_KEY_LEN_nBYTE, (AES_KEY_LEN_nBYTE)*8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Init EBC Encrypt Symmetric Algorithm */ + status = sss_symmetric_context_init(&symm, &pCtx->host_session, &keyObj, algorithm, mode); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + memset(refOneArray, 1, sizeof(refOneArray)); + + /* Generate key check values*/ + status = sss_cipher_one_go(&symm, NULL, 0, refOneArray, keyCheckVal, keyCheckValLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Encyrpt the sensitive data */ + status = sss_key_store_get_key(&pCtx->host_ks, + &pCtx->se05x_open_ctx.auth.ctx.scp03.pStatic_ctx->Dek, + DekEnckey, + &DekEnckeyLen, + &DekEnckeyBitLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Set the key */ + status = + sss_key_store_set_key(&pCtx->host_ks, &keyObj, DekEnckey, AES_KEY_LEN_nBYTE, (AES_KEY_LEN_nBYTE)*8, NULL, 0); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Encrypt the key */ + status = sss_cipher_one_go(&symm, NULL, 0, plainKey, encryptedkey, encryptedkeyLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Free Symmetric Object */ + if (symm.keyObject) { + sss_symmetric_context_free(&symm); + } + sss_key_object_free(&keyObj); +cleanup: + return status; +}
diff --git a/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.h b/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.h new file mode 100644 index 0000000..62c8575 --- /dev/null +++ b/demos/se05x/se05x_RotatePlatformSCP03Keys/se05x_TP_PlatformSCP03keys.h
@@ -0,0 +1,21 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ +#include <nxEnsure.h> +#include <string.h> + +#include "ex_sss_boot.h" +#include "se05x_APDU.h" +/* ************************************************************************** */ +/* Defines */ +/* ************************************************************************** */ +#define AES_KEY_LEN_nBYTE 0x10 +#define PUT_KEYS_KEY_TYPE_CODING_AES 0x88 +#define CRYPTO_KEY_CHECK_LEN 0x03 +#define GP_CLA_BYTE 0x80 +#define GP_INS_PUTKEY 0xD8 +#define GP_P2_MULTIPLEKEYS 0x81
diff --git a/demos/se05x/se05x_SetAppletFeatures/CMakeLists.txt b/demos/se05x/se05x_SetAppletFeatures/CMakeLists.txt new file mode 100644 index 0000000..3516f32 --- /dev/null +++ b/demos/se05x/se05x_SetAppletFeatures/CMakeLists.txt
@@ -0,0 +1,22 @@ +PROJECT(se05x_SetAppletFeatures) + +FILE( + GLOB + files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +EXPOSE_SE05X_AUTH_STRATEGY()
diff --git a/demos/se05x/se05x_SetAppletFeatures/Readme.rst b/demos/se05x/se05x_SetAppletFeatures/Readme.rst new file mode 100644 index 0000000..1eff4a5 --- /dev/null +++ b/demos/se05x/se05x_SetAppletFeatures/Readme.rst
@@ -0,0 +1,78 @@ +.. + Copyright 2020 NXP + + + +.. highlight::shell + +.. _set-applet-features: + +========================================================== + Configuring Applet Features +========================================================== + +This tool is used to configure the applet for different variants, i.e. Variant A, Variant B and Variant C. +Note that this tool only enables or disables the features according to the configured variant, it **does not +alter the variant itself**. +The tool should be compiled with ECKey encryption, and optionally PlatfSCP03 encryption also. +You would need to provide a command line parameter for ECKey key to be used, and an environment variable for your +own Platform SCP03 keys, if required. + + +.. _configure-eckey-file: + +Configuring ECKey key for command line +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example takes as a command-line input, the filename in which ECDSA key is stored. +The key should be stored in *.der* (binary) format only. If the available key is in *.pem* format, +it can be converted into binary format using OpenSSL command-line utility. Refer to `OpenSSL Commands +<https://wiki.openssl.org/index.php/Command_Line_Elliptic_Curve_Operations#EC_Private_Key_File_Formats/>`_ +for more information on how to convert *.pem* formatted file to *.der* formatted file. + + +.. _configure-env-for-platfscp: + +Configuring Environment for PlatfSCP03 Keys +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**If you do not wish to use Platform SCP03 encryption, skip to the next step**. + +To use your own platform SCP03 keys, refer to :numref:`platfscp-file` :ref:`platfscp-file` +on details on setting up your environment. + + +Using with PC as host +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1) Flash the VCOM binary present in :file:`binaries` directory on to the target board. +#) Note the VCOM *COMPORT* from device manager. +#) Build the project ``se05x_setAppletFearures``. Configure the tool with ``SE050_A``, ``SE050_B`` or ``SE050_C``, + to enable the applet specific features. +#) Run the executable for desired variant as:: + + cd tools + set EX_SSS_BOOT_SCP03_PATH_ENV=\path\to\platfscp03\keys + se05x_setAppletFearures.exe -file <filename> <COMPORT> + + Where ``EX_SSS_BOOT_SCP03_PATH_ENV`` is set to the path of file containing Platform SCP03 keys as described in :ref:`configure-env-for-platfscp`. + + *COMPORT* is the port obtained from step 2. + + *filename* is the path to file containing ECDSA keypair provisioned at **RESERVED_ID_FEATURE** in binary format as described in :ref:`configure-eckey-file` + + +Using with iMX-6 as host +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +1) Build the project ``se05x_setAppletFearures``. Configure the tool with ``SE050_A``, ``SE050_B`` or ``SE050_C``, + to enable the applet specific features. +#) Run the executable for desired variant as:: + + cd tools + export EX_SSS_BOOT_SCP03_PATH_ENV=\path\to\platfscp03\keys + ./se05x_setAppletFearures -file <filename> + + Where ``EX_SSS_BOOT_SCP03_PATH_ENV`` is set to the path of file containing Platform SCP03 keys as described in :ref:`configure-env-for-platfscp`. + + *filename* is the path to file containing ECDSA keypair provisioned at **RESERVED_ID_FEATURE** in binary format as described in :ref:`configure-eckey-file`
diff --git a/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.c b/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.c new file mode 100644 index 0000000..378ca14 --- /dev/null +++ b/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.c
@@ -0,0 +1,311 @@ +/* +* +* Copyright 2019,2020 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include "se05x_SetAppletFeatures.h" + +#include <ex_sss_boot.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "smCom.h" + +static ex_sss_boot_ctx_t gex_sss_features_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_features_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + smStatus_t sw_status; + Se05xSession_t *pSe05xSession; + + uint8_t appletVersion[7] = {0}; + size_t appletVersionLen = sizeof(appletVersion); + Se05x_AppletFeatures_t appletFeatures = {0}; + +#if SSS_HAVE_APPLET_SE05X_C + LOG_W("Compiled for Applet C"); + appletFeatures.variant = C_FEATURES; +#elif SSS_HAVE_APPLET_SE05X_A + LOG_W("Compiled for Applet A"); + appletFeatures.variant = A_FEATURES; +#elif SSS_HAVE_APPLET_SE05X_B + LOG_W("Compiled for Applet B"); + appletFeatures.variant = B_FEATURES; +#else +#error "No applet selected" +#endif + +#if SSS_HAVE_SE05X_VER_GTE_06_00 + SE05x_ExtendedFeatures_t extended = {0}; + extended.features[7] |= 0x80; + appletFeatures.extended_features = &extended; +#else + appletFeatures.extended_features = NULL; +#endif + + sss_session_close(&pCtx->session); + status = session_open_with_feature_id(pCtx); + if (status != kStatus_SSS_Success) { + goto cleanup; + } + + pSe05xSession = &pSession->s_ctx; + + sw_status = Se05x_API_GetVersion(pSe05xSession, appletVersion, &appletVersionLen); + if (SM_OK == sw_status) { + LOG_AU8_I(appletVersion, sizeof(appletVersion)); + SE05x_Variant_t features = (appletVersion[3] << 8) | appletVersion[4]; + if (features == appletFeatures.variant) { + LOG_W("Trying to set existing features"); + } + } + else { + LOG_E("Se05x_API_GetVersion failed"); + goto cleanup; + } + + sw_status = Se05x_API_SetAppletFeatures(pSe05xSession, &appletFeatures); + if (SM_OK != sw_status) { + LOG_E("Se05x_API_SetAppletFeatures failed"); + goto cleanup; + } + + sw_status = Se05x_API_GetVersion(pSe05xSession, appletVersion, &appletVersionLen); + if (SM_OK == sw_status) { + LOG_AU8_I(appletVersion, sizeof(appletVersion)); + SE05x_Variant_t features = (appletVersion[3] << 8) | appletVersion[4]; + if (features != appletFeatures.variant) { + LOG_E("Mismatch setting features"); + } + else { + LOG_I("Features set successsfully"); + } + } + else { + LOG_E("Se05x_API_GetVersion failed"); + } + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_SetAppletFeatures Example Success !!!..."); + } + else { + LOG_E("se05x_SetAppletFeatures Example Failed !!!..."); + } + return status; +} + +sss_status_t session_open_with_feature_id(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; +#if (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) + SE05x_Connect_Ctx_t *pchannlCtxt = &pCtx->se05x_open_ctx; + pchannlCtxt->auth.authType = kSSS_AuthType_ECKey; + ex_SE05x_authCtx_t ex_se05x_auth; + + status = ex_sss_se05x_prepare_host_EX( + &pCtx->host_session, &pCtx->host_ks, pchannlCtxt, &ex_se05x_auth, kSSS_AuthType_ECKey); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_se05x_prepare_host_EX failed"); + goto cleanup; + } + + pchannlCtxt->connType = kType_SE_Conn_Type_Channel; + pchannlCtxt->tunnelCtx = pCtx->pTunnel_ctx; + + status = sss_session_open( + &pCtx->session, kType_SSS_SE_SE05x, kSE05x_AppletResID_FEATURE, kSSS_ConnectionType_Encrypted, pchannlCtxt); + if (kStatus_SSS_Success != status) { + LOG_E("sss_session_open failed"); + } +#else + sss_session_t *pSession = NULL; + SE05x_Connect_Ctx_t *pConnectCtx = NULL; + pConnectCtx = &pCtx->se05x_open_ctx; + pSession = &pCtx->session; + status = ex_sss_se05x_prepare_host_EX( + &pCtx->host_session, &pCtx->host_ks, pConnectCtx, &pCtx->ex_se05x_auth, kSSS_AuthType_ECKey); + if (kStatus_SSS_Success != status) { + LOG_E("ex_sss_se05x_prepare_host_EX failed"); + goto cleanup; + } + + status = sss_session_open( + pSession, kType_SSS_SE_SE05x, kSE05x_AppletResID_FEATURE, kSSS_ConnectionType_Encrypted, pConnectCtx); + if (kStatus_SSS_Success != status) { + LOG_E("sss_session_open failed"); + } +#endif + +cleanup: + return status; +} + +sss_status_t ex_sss_se05x_prepare_host_EX(sss_session_t *host_session, + sss_key_store_t *host_ks, + SE05x_Connect_Ctx_t *se05x_open_ctx, + ex_SE05x_authCtx_t *se05x_auth_ctx, + SE_AuthType_t auth_type) +{ + sss_status_t status = kStatus_SSS_Fail; + + if (host_session->subsystem == kType_SSS_SubSystem_NONE) { + sss_type_t hostsubsystem = kType_SSS_SubSystem_NONE; + +#if SSS_HAVE_MBEDTLS + hostsubsystem = kType_SSS_mbedTLS; +#endif + +#if SSS_HAVE_OPENSSL + hostsubsystem = kType_SSS_OpenSSL; +#endif + status = sss_session_open(host_session, hostsubsystem, 0, kSSS_ConnectionType_Plain, NULL); + if (kStatus_SSS_Success != status) { + LOG_E("Failed to open Host Session"); + goto cleanup; + } + status = sss_key_store_context_init(host_ks, host_session); + if (kStatus_SSS_Success != status) { + LOG_E("Host: sss_key_store_context_init failed"); + goto cleanup; + } + status = sss_key_store_allocate(host_ks, __LINE__); + if (kStatus_SSS_Success != status) { + LOG_E("Host: sss_key_store_allocate failed"); + goto cleanup; + } + } + switch (auth_type) { +#if SSS_HAVE_SCP_SCP03_SSS + case kSSS_AuthType_ECKey: + status = ex_sss_se05x_prepare_host_eckey_EX(&se05x_open_ctx->auth.ctx.eckey, se05x_auth_ctx, host_ks); + break; +#endif + default: + status = kStatus_SSS_Fail; + LOG_E("Not handled"); + } + + if (kStatus_SSS_Success != status) { + LOG_E( + "Host: ex_sss_se05x_prepare_host_<type=(SE_AuthType_t)%d> " + "failed", + auth_type); + goto cleanup; + } + se05x_open_ctx->auth.authType = auth_type; + +cleanup: + return status; +} + +sss_status_t ex_sss_se05x_prepare_host_eckey_EX( + SE05x_AuthCtx_ECKey_t *pAuthCtx, ex_SE05x_authCtx_t *pEx_auth, sss_key_store_t *pKs) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t hostEcdsakey[1024] = {0}; + + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + + for (int j = 1; j < argc; j++) { + if (strcmp(argv[j], "-file") == 0) { + j++; + const char *filename = argv[j]; + FILE *fp = fopen(filename, "rb"); + if (fp == NULL) { + LOG_E("Cannot open file"); + return kStatus_SSS_Fail; + } + fread(hostEcdsakey, sizeof(hostEcdsakey), 1, fp); + } + } + + NXECKey03_StaticCtx_t *pStatic_ctx = pAuthCtx->pStatic_ctx; + NXSCP03_DynCtx_t *pDyn_ctx = pAuthCtx->pDyn_ctx; + + /* Init allocate Host ECDSA Key pair */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->HostEcdsaObj, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Pair); + /* Set Host ECDSA Key pair */ + status = sss_key_store_set_key(pKs, &pStatic_ctx->HostEcdsaObj, hostEcdsakey, sizeof(hostEcdsakey), 256, NULL, 0); + if (status == kStatus_SSS_Fail) { + return status; + } + + /* Init allocate Host ECKA Key pair */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->HostEcKeypair, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Pair); + /* Generate Host EC Key pair */ + status = sss_key_store_generate_key(pKs, &pStatic_ctx->HostEcKeypair, 256, NULL); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init allocate SE ECKA Public Key */ + status = + Alloc_ECKeykey_toSE05xAuthctx_EX(&pStatic_ctx->SeEcPubKey, pKs, MAKE_TEST_ID(__LINE__), kSSS_KeyPart_Public); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init Allocate Master Secret */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pStatic_ctx->masterSec, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + + /* Init Allocate ENC Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Enc, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + /* Init Allocate MAC Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Mac, pKs, MAKE_TEST_ID(__LINE__)); + if (status != kStatus_SSS_Success) { + return status; + } + /* Init Allocate DEK Session Key */ + status = Alloc_Scp03key_toSE05xAuthctx_EX(&pDyn_ctx->Rmac, pKs, MAKE_TEST_ID(__LINE__)); + + return status; +} + +sss_status_t Alloc_ECKeykey_toSE05xAuthctx_EX( + sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId, sss_key_part_t keypart) +{ + sss_status_t status = kStatus_SSS_Fail; + status = sss_key_object_init(keyObject, pKs); + if (status != kStatus_SSS_Success) { + return status; + } + status = sss_key_object_allocate_handle( + keyObject, keyId, keypart, kSSS_CipherType_EC_NIST_P, 256, kKeyObject_Mode_Persistent); + return status; +} + +sss_status_t Alloc_Scp03key_toSE05xAuthctx_EX(sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId) +{ + sss_status_t status = kStatus_SSS_Fail; + status = sss_key_object_init(keyObject, pKs); + if (status != kStatus_SSS_Success) { + return status; + } + + status = sss_key_object_allocate_handle( + keyObject, keyId, kSSS_KeyPart_Default, kSSS_CipherType_AES, 16, kKeyObject_Mode_Transient); + return status; +}
diff --git a/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.h b/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.h new file mode 100644 index 0000000..1e281b7 --- /dev/null +++ b/demos/se05x/se05x_SetAppletFeatures/se05x_SetAppletFeatures.h
@@ -0,0 +1,55 @@ +/* +* +* Copyright 2019,2020 NXP +* SPDX-License-Identifier: Apache-2.0 +*/ + +/* clang-format off */ + +#include "ex_sss_boot.h" +#include "fsl_sss_api.h" +#include "fsl_sss_ftr.h" + +#if SSS_HAVE_ECC && SSS_HAVE_RSA +#define C_FEATURES kSE05x_AppletConfig_ECDAA | \ + kSE05x_AppletConfig_ECDSA_ECDH_ECDHE | \ + kSE05x_AppletConfig_EDDSA | \ + kSE05x_AppletConfig_DH_MONT | \ + kSE05x_AppletConfig_HMAC | \ + kSE05x_AppletConfig_RSA_PLAIN | \ + kSE05x_AppletConfig_RSA_CRT | \ + kSE05x_AppletConfig_AES | \ + kSE05x_AppletConfig_DES | \ + kSE05x_AppletConfig_PBKDF | \ + kSE05x_AppletConfig_TLS | \ + kSE05x_AppletConfig_MIFARE | \ + kSE05x_AppletConfig_I2CM + +#elif SSS_HAVE_ECC +#define A_FEATURES kSE05x_AppletConfig_DES | \ + kSE05x_AppletConfig_PBKDF | \ + kSE05x_AppletConfig_TLS | \ + kSE05x_AppletConfig_AES | \ + kSE05x_AppletConfig_HMAC | \ + kSE05x_AppletConfig_DH_MONT | \ + kSE05x_AppletConfig_ECDSA_ECDH_ECDHE + +#elif SSS_HAVE_RSA +#define B_FEATURES kSE05x_AppletConfig_DES | \ + kSE05x_AppletConfig_PBKDF | \ + kSE05x_AppletConfig_TLS | \ + kSE05x_AppletConfig_HMAC | \ + kSE05x_AppletConfig_RSA_PLAIN | \ + kSE05x_AppletConfig_RSA_CRT | \ + kSE05x_AppletConfig_AES | \ + kSE05x_AppletConfig_DH_MONT +#endif + +/* clang-format ON */ + + +sss_status_t session_open_with_feature_id(ex_sss_boot_ctx_t *pCtx); +sss_status_t ex_sss_se05x_prepare_host_EX(sss_session_t *host_session, sss_key_store_t *host_ks, SE_Connect_Ctx_t *se05x_open_ctx, ex_SE05x_authCtx_t *se05x_auth_ctx, SE_AuthType_t auth_type); +sss_status_t ex_sss_se05x_prepare_host_eckey_EX(SE05x_AuthCtx_ECKey_t *pAuthCtx, ex_SE05x_authCtx_t *pEx_auth, sss_key_store_t *pKs); +sss_status_t Alloc_ECKeykey_toSE05xAuthctx_EX(sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId, sss_key_part_t keypart); +sss_status_t Alloc_Scp03key_toSE05xAuthctx_EX(sss_object_t *keyObject, sss_key_store_t *pKs, uint32_t keyId);
diff --git a/demos/se05x/se05x_TimeStamp/CMakeLists.txt b/demos/se05x/se05x_TimeStamp/CMakeLists.txt new file mode 100644 index 0000000..eb25937 --- /dev/null +++ b/demos/se05x/se05x_TimeStamp/CMakeLists.txt
@@ -0,0 +1,26 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_TimeStamp) + +FILE( + GLOB + files + *.c +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/sss/ex/inc) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +EXPOSE_SE05X_AUTH_STRATEGY() +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_TimeStamp/Readme.rst b/demos/se05x/se05x_TimeStamp/Readme.rst new file mode 100644 index 0000000..90443c5 --- /dev/null +++ b/demos/se05x/se05x_TimeStamp/Readme.rst
@@ -0,0 +1,54 @@ +.. + Copyright 2020 NXP + + +.. highlight::shell + +.. _se05x-time-stamp: + +================================================= + SE05X Timestamp +================================================= + +The timestamp is a 12-byte value. The most significant +4 bytes are persistent and the least significant 8 +bytes are transient. The persistent value is +incremented at every session open and the transient +8 bytes are incremented every 100ms and reset at +every session open. + +So every time the timestamp is read, the newer value +will always be greater than the previous value. + +This example demonstrates that the timestamp value +is incremented internally. Timestamp is used by the +applet during attestation. We initially read the +timestamp value and then perform attestation +operation. We compare the initial timestamp with +the timestamp received during attestation. The newer +value must be greater than the older value. + + +Building +================================================= + +Build the project with the following configuration. + +- ``Applet=SE05X_C`` +- ``Project = se05x_TimeStamp`` + +Running +================================================= + +On successful execution, you would be able to see +the timestamp printed out:: + + App :INFO :timestamp.ts (Len=12) + 00 00 00 08 00 00 00 00 00 1F BD 00 + App :INFO :new_timestamp.ts (Len=12) + 00 00 00 08 00 00 00 00 00 20 B7 00 + App :INFO :ex_sss Finished + +As you can see in the above logs, the timestamp value +received during attestation operation is larger than +the previous value.
diff --git a/demos/se05x/se05x_TimeStamp/se05x_TimeStamp.c b/demos/se05x/se05x_TimeStamp/se05x_TimeStamp.c new file mode 100644 index 0000000..a0f47aa --- /dev/null +++ b/demos/se05x/se05x_TimeStamp/se05x_TimeStamp.c
@@ -0,0 +1,417 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_auth.h> +#include <ex_sss_boot.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_APDU_apis.h> +#include <se05x_tlv.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +#define EC_KEY_BIT_LEN 256 +#define ATTESTATION_KEY_ID 0xAFFE5F +#define OBJECT_TO_ATTEST 0xF5EFFA + +#if (SSS_HAVE_SE05X_AUTH_USERID) || (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) //UserID Session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_UserID_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_PLATFSCP03) //No auth +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_NONE_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) //AESKey +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) //ECKey session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID +#endif +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_get_timestamp_boot_ctx; +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_get_timestamp_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +static sss_status_t create_attestation_key(ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen); +static sss_status_t create_host_public_key( + ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen, sss_object_t *verification_object); +static sss_status_t create_binary_object_to_attest(ex_sss_boot_ctx_t *pCtx, uint32_t keyId); +static sss_status_t attest_binary_object(ex_sss_boot_ctx_t *pCtx, + uint32_t attestation_key_id, + uint32_t object_key_id, + sss_object_t *verification_object, + SE05x_TimeStamp_t *timestamp); +static int compare_array(uint8_t *array1, uint8_t *array2, size_t bytes_to_compare); +static void clean_attestation_objects(ex_sss_boot_ctx_t *pCtx, uint32_t attestation_key_id, uint32_t keyid_to_attest); + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sm_status = SM_NOT_OK; + uint32_t attestation_key_id = ATTESTATION_KEY_ID; + uint32_t keyid_to_attest = OBJECT_TO_ATTEST; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + pSe05xSession_t s_ctx = &pSession->s_ctx; + SE05x_TimeStamp_t timestamp = {0}, new_timestamp = {0}; + int result = -1; + /* verification context */ + sss_object_t verification_object; + + sm_status = Se05x_API_GetTimestamp(s_ctx, ×tamp); + ENSURE_OR_GO_CLEANUP(sm_status == SM_OK); + status = kStatus_SSS_Success; + LOG_AU8_I(timestamp.ts, sizeof(timestamp.ts)); + + /* Generate Random Attestation key + * We use NIST-P 256 in this example + */ + status = create_attestation_key(pCtx, attestation_key_id, EC_KEY_BIT_LEN); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = create_host_public_key(pCtx, attestation_key_id, EC_KEY_BIT_LEN, &verification_object); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Import any object into the SE which will be + * read with attestation. In this example, we are + * importing a binary objecct + */ + status = create_binary_object_to_attest(pCtx, keyid_to_attest); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = attest_binary_object(pCtx, attestation_key_id, keyid_to_attest, &verification_object, &new_timestamp); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_AU8_I(new_timestamp.ts, sizeof(new_timestamp.ts)); + + result = compare_array(timestamp.ts, new_timestamp.ts, sizeof(timestamp.ts)); + status = ((result == 1) || (result == -1)) ? kStatus_SSS_Fail : kStatus_SSS_Success; + +cleanup: + clean_attestation_objects(pCtx, attestation_key_id, keyid_to_attest); + sss_key_object_free(&verification_object); + if (kStatus_SSS_Success == status) { + LOG_I("se05x_TimeStamp Example Success !!!..."); + } + else { + LOG_E("se05x_TimeStamp Example Failed !!!..."); + } + return status; +} + +static sss_status_t create_attestation_key(ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen) +{ + sss_status_t status = kStatus_SSS_Fail; + size_t keylen = keyBitLen / 8; + sss_object_t key_attst = {0}; + sss_cipher_type_t cipherType = kSSS_CipherType_EC_NIST_P; + sss_policy_u key_pol; + sss_policy_u common; + sss_policy_t policy_for_ec_key; + + status = sss_key_object_init(&key_attst, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Generate asymmetric key */ + status = sss_key_object_allocate_handle( + &key_attst, keyId, kSSS_KeyPart_Pair, cipherType, keylen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + key_pol = (sss_policy_u){.type = KPolicy_Asym_Key, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.asymmkey = { + .can_Sign = 1, + .can_Verify = 1, + .can_Encrypt = 1, + .can_Decrypt = 1, + .can_KD = 1, + .can_Wrap = 1, + .can_Write = 1, + .can_Gen = 1, + .can_Import_Export = 1, + .can_KA = 1, + .can_Read = 1, + .can_Attest = 1, + }}}; + + common = (sss_policy_u){.type = KPolicy_Common, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.common = { + .can_Delete = 1, + }}}; + policy_for_ec_key = (sss_policy_t){.nPolicies = 2, .policies = {&key_pol, &common}}; + + status = sss_key_store_generate_key(&pCtx->ks, &key_attst, keyBitLen, &policy_for_ec_key); + +cleanup: + return status; +} + +static sss_status_t create_host_public_key( + ex_sss_boot_ctx_t *pCtx, uint32_t keyId, size_t keyBitLen, sss_object_t *verification_object) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t attestation_key = {0}; + uint8_t public_key[100] = {0}; + size_t public_key_len = sizeof(public_key); + + status = sss_key_object_init(&attestation_key, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&attestation_key, keyId); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->ks, &attestation_key, public_key, &public_key_len, &keyBitLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_init(verification_object, &pCtx->host_ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_allocate_handle(verification_object, + __LINE__, + kSSS_KeyPart_Public, + attestation_key.cipherType, + public_key_len, + kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->host_ks, verification_object, public_key, public_key_len, keyBitLen, NULL, 0); + +cleanup: + return status; +} + +static sss_status_t create_binary_object_to_attest(ex_sss_boot_ctx_t *pCtx, uint32_t keyId) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t object_to_attest = {0}; + sss_key_part_t key_part = kSSS_KeyPart_Default; + sss_cipher_type_t cipherType = kSSS_CipherType_Binary; + uint8_t data[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}; + size_t dataLen = sizeof(data); + sss_policy_u obj_pol; + sss_policy_u common; + sss_policy_t policy_for_bin_obj; + + status = sss_key_object_init(&object_to_attest, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Generate asymmetric key */ + status = sss_key_object_allocate_handle( + &object_to_attest, keyId, key_part, cipherType, dataLen, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + obj_pol = (sss_policy_u){.type = KPolicy_File, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.file = { + .can_Write = 1, + .can_Read = 1, + }}}; + common = (sss_policy_u){.type = KPolicy_Common, + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = {.common = { + .can_Delete = 1, + }}}; + policy_for_bin_obj = (sss_policy_t){.nPolicies = 2, .policies = {&obj_pol, &common}}; + + status = sss_key_store_set_key( + &pCtx->ks, &object_to_attest, data, dataLen, dataLen, &policy_for_bin_obj, sizeof(policy_for_bin_obj)); + +cleanup: + return status; +} + +static sss_status_t attest_binary_object(ex_sss_boot_ctx_t *pCtx, + uint32_t attestation_key_id, + uint32_t object_key_id, + sss_object_t *verification_object, + SE05x_TimeStamp_t *timestamp) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t attested_object_data[2500] = {0}; + size_t attestedObjByteLen = sizeof(attested_object_data); + size_t objBitLen = attestedObjByteLen * 8; + sss_algorithm_t algorithm = kAlgorithm_SSS_ECDSA_SHA256; + sss_object_t sss_attestation_object = {0}; + sss_object_t sss_object_to_attest = {0}; + sss_se05x_attst_comp_data_t comp_data[2] = {0}; + sss_se05x_attst_data_t att_data = {.valid_number = 2}; + /* Random data from the host to check if SE + * answers to current attestation request and + * not an older response is used */ + + /* clang-format off */ + uint8_t freshness[16] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; + /* clang-format on */ + + /* Variables for verification */ + uint8_t plainData[2600] = {0}; + size_t plainDataLen = sizeof(plainData); + uint8_t digest[64] = {0}; + size_t digestLen = sizeof(digest); + sss_digest_t digest_ctx; + sss_algorithm_t digest_algorithm = kAlgorithm_SSS_SHA256; + sss_asymmetric_t verify_ctx; + + /* Initialize Attesttation Object */ + status = sss_key_object_init(&sss_attestation_object, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&sss_attestation_object, attestation_key_id); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Initialize object to attest */ + status = sss_key_object_init(&sss_object_to_attest, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&sss_object_to_attest, object_key_id); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* Prepare/init attestation data structure */ + + memcpy(&att_data.data, &comp_data[0], sizeof(comp_data)); + att_data.data[0].attributeLen = sizeof(att_data.data[0].attribute); + att_data.data[0].outrandomLen = sizeof(att_data.data[0].outrandom); + att_data.data[0].chipIdLen = sizeof(att_data.data[0].attribute); + att_data.data[0].signatureLen = sizeof(att_data.data[0].signature); + att_data.data[1].attributeLen = sizeof(att_data.data[1].attribute); + att_data.data[1].outrandomLen = sizeof(att_data.data[1].outrandom); + att_data.data[1].chipIdLen = sizeof(att_data.data[1].attribute); + att_data.data[1].signatureLen = sizeof(att_data.data[1].signature); + + /* Execute attested read + * We use attestation object to attest (sign) all read data + object attributes + * Returns object attributes and signature in att_data + */ + + status = sss_se05x_key_store_get_key_attst((sss_se05x_key_store_t *)&pCtx->ks, + (sss_se05x_object_t *)&sss_object_to_attest, + attested_object_data, + &attestedObjByteLen, + &objBitLen, + (sss_se05x_object_t *)&sss_attestation_object, + algorithm, + freshness, + sizeof(freshness), + &att_data); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Perform verification operation here on the following data + * (key + offset) + + * att_data->data[0].attribute + + * att_data->data[0].timestamp + + * att_data->data[0].outrandom + + * att_data->data[0].chipId + * with signature + * att_data->data[0].signature + * + * We perform signature verification on host. + * First we digest the data then pass it to verify API + */ + + plainDataLen = attestedObjByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen + + att_data.data[0].outrandomLen + att_data.data[0].chipIdLen; + if (plainDataLen > sizeof(plainData)) { + LOG_E("Insufficient Buffer"); + status = kStatus_SSS_Fail; + goto cleanup; + } + memcpy(plainData, attested_object_data, attestedObjByteLen); + memcpy(plainData + attestedObjByteLen, att_data.data[0].attribute, att_data.data[0].attributeLen); + memcpy(plainData + attestedObjByteLen + att_data.data[0].attributeLen, + &(att_data.data[0].timeStamp), + att_data.data[0].timeStampLen); + memcpy(plainData + attestedObjByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen, + att_data.data[0].outrandom, + att_data.data[0].outrandomLen); + memcpy(plainData + attestedObjByteLen + att_data.data[0].attributeLen + att_data.data[0].timeStampLen + + att_data.data[0].outrandomLen, + att_data.data[0].chipId, + att_data.data[0].chipIdLen); + + status = sss_digest_context_init(&digest_ctx, &pCtx->host_session, digest_algorithm, kMode_SSS_Digest); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_digest_one_go(&digest_ctx, plainData, plainDataLen, digest, &digestLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + sss_digest_context_free(&digest_ctx); + + /* Verify signature */ + sss_asymmetric_context_init(&verify_ctx, &pCtx->host_session, verification_object, algorithm, kMode_SSS_Verify); + + status = sss_asymmetric_verify_digest( + &verify_ctx, digest, digestLen, att_data.data[0].signature, att_data.data[0].signatureLen); + + sss_asymmetric_context_free(&verify_ctx); + + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + memcpy(timestamp, &(att_data.data[0].timeStamp), att_data.data[0].timeStampLen); + +cleanup: + return status; +} + +static void clean_attestation_objects(ex_sss_boot_ctx_t *pCtx, uint32_t attestation_key_id, uint32_t keyid_to_attest) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t object_to_delete = {0}; + status = sss_key_object_init(&object_to_delete, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + /* Delete attestation object */ + status = sss_key_object_get_handle(&object_to_delete, attestation_key_id); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &object_to_delete); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + /* Delete object to attest */ + status = sss_key_object_get_handle(&object_to_delete, keyid_to_attest); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + status = sss_key_store_erase_key(&pCtx->ks, &object_to_delete); + +exit: + return; +} + +static int compare_array(uint8_t *array1, uint8_t *array2, size_t bytes_to_compare) +{ + size_t i = 0; + int compareValue = 0; + for (i = 0; i < bytes_to_compare; i++) { + if (array1[i] > array2[i]) { + compareValue = 1; + break; + } + else if (array1[i] < array2[i]) { + compareValue = 2; + break; + } + } + return compareValue; +}
diff --git a/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.c b/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.c new file mode 100644 index 0000000..dbc3a72 --- /dev/null +++ b/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.c
@@ -0,0 +1,126 @@ +/* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include "se05x_TransportAuth.h" + +#include <nxLog_App.h> +#include <se05x_APDU.h> + +/* clang-format off */ +#define TRANSPORT_AES_VALUE \ + { \ + 'L','O','C','K','C','O','M','M','U','N','T','X','T','O','S','E', \ + } +/* clang-format ON */ + + +const uint8_t Transport_AES_value[16] = TRANSPORT_AES_VALUE; +size_t Transport_AES_valueLen = sizeof(Transport_AES_value); +//sss_object_t TransportObject = { 0 }; +NXSCP03_StaticCtx_t staticCtx = { 0 }; +NXSCP03_DynCtx_t dynamicCtx = { 0 }; +SE_Connect_Ctx_t authTransportCtx = { 0 }; + +sss_status_t se05x_TA_OpenAuthSession(ex_sss_boot_ctx_t *pCtx, + sss_session_t *pTxSession, + sss_tunnel_t *ptxTunnel) +{ + sss_status_t status = kStatus_SSS_Fail; + authTransportCtx.auth.ctx.scp03.pStatic_ctx = &staticCtx; + authTransportCtx.auth.ctx.scp03.pDyn_ctx = &dynamicCtx; + + authTransportCtx.tunnelCtx = ptxTunnel; + ptxTunnel->session = &pCtx->session; + authTransportCtx.connType = kType_SE_Conn_Type_Channel; + authTransportCtx.portName = NULL; + authTransportCtx.auth.authType = kSSS_AuthType_AESKey; + authTransportCtx.skip_select_applet = 1; + + status = sss_session_open(pTxSession, kType_SSS_SE_SE05x, + kSE05x_AppletResID_TRANSPORT, + kSSS_ConnectionType_Encrypted, &authTransportCtx); + + return status; +} + + + sss_status_t se05x_TA_CreateHostKey(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + int i; + sss_object_t * pObjects[6]; + pObjects[0] = &staticCtx.Dek; + pObjects[1] = &staticCtx.Enc; + pObjects[2] = &staticCtx.Mac; + pObjects[3] = &dynamicCtx.Enc; + pObjects[4] = &dynamicCtx.Mac; + pObjects[5] = &dynamicCtx.Rmac; + + for (i = 0; i < 6; i++) { + status = sss_host_key_object_init(pObjects[i], &pCtx->host_ks); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_object_init "); + goto cleanup; + } + status = sss_host_key_object_allocate_handle(pObjects[i], + MAKE_TEST_ID(__LINE__), + kSSS_KeyPart_Default, + kSSS_CipherType_AES, + Transport_AES_valueLen, + kKeyObject_Mode_Transient); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_object_allocate_handle"); + goto cleanup; + } + } + for (i = 0; i < 3; i++) { + status = sss_host_key_store_set_key(&pCtx->host_ks, + pObjects[i], + Transport_AES_value, + Transport_AES_valueLen, + Transport_AES_valueLen * 8, + NULL, + 0); + if (kStatus_SSS_Success != status) { + LOG_E("Failed sss_key_store_set_key"); + goto cleanup; + } + } + + status = kStatus_SSS_Success; + cleanup: + return status; +} + +smStatus_t se05x_TA_CreateSETransportLockKey(Se05xSession_t *pSe05xSession) +{ + smStatus_t sw_status = SM_NOT_OK; + SE05x_Result_t exists = kSE05x_Result_FAILURE; + + sw_status = Se05x_API_CheckObjectExists(pSe05xSession, kSE05x_AppletResID_TRANSPORT, &exists); + if (sw_status == SM_OK && exists == kSE05x_Result_SUCCESS) { + LOG_W("kSE05x_AppletResID_TRANSPORT Object already exists"); + } + + if (sw_status == SM_OK && exists == kSE05x_Result_FAILURE) { + + sw_status = Se05x_API_WriteSymmKey(pSe05xSession, + NULL, + SE05x_MaxAttemps_UNLIMITED, + kSE05x_AppletResID_TRANSPORT, + SE05x_KeyID_KEK_NONE, + Transport_AES_value, + Transport_AES_valueLen, + kSE05x_AttestationType_AUTH | kSE05x_TransientType_Persistent, + kSE05x_SymmKeyType_AES); + + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_WriteSymmKey"); + goto cleanup; + } + } +cleanup: + return sw_status; +}
diff --git a/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.h b/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.h new file mode 100644 index 0000000..958b371 --- /dev/null +++ b/demos/se05x/se05x_TransportAuth/se05x_TransportAuth.h
@@ -0,0 +1,24 @@ +/* + * + * Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef DEMOS_SE05X_TLA_H_ +#define DEMOS_SE05X_TLA_H_ + +#include <ex_sss_boot.h> + +/** Open an Authenticated session to SE050 using + * the reserved key Transport Lock. */ +sss_status_t se05x_TA_OpenAuthSession(ex_sss_boot_ctx_t *pCtx, sss_session_t *pTxSession, sss_tunnel_t *ptxTunnel); + +/** Create Key on the Host so that host crypto can use it + * during authenticaiton */ +sss_status_t se05x_TA_CreateHostKey(ex_sss_boot_ctx_t *pCtx); + +/** Transport Auth session is authenticated using transport Obj + */ +smStatus_t se05x_TA_CreateSETransportLockKey(Se05xSession_t *pSe05xSession); + +#endif //DEMOS_SE05X_TLA_H_
diff --git a/demos/se05x/se05x_TransportLock/CMakeLists.txt b/demos/se05x/se05x_TransportLock/CMakeLists.txt new file mode 100644 index 0000000..36477fe --- /dev/null +++ b/demos/se05x/se05x_TransportLock/CMakeLists.txt
@@ -0,0 +1,38 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# +PROJECT(se05x_TransportLock) + +FILE( + GLOB + files + *.c + ../se05x_TransportAuth/*.c + ../se05x_TransportAuth/*.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ../se05x_TransportAuth) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/tst + ${SMCOM}-${SE05X_Auth} + ) +ENDIF()
diff --git a/demos/se05x/se05x_TransportLock/readme.rst b/demos/se05x/se05x_TransportLock/readme.rst new file mode 100644 index 0000000..4afd0cf --- /dev/null +++ b/demos/se05x/se05x_TransportLock/readme.rst
@@ -0,0 +1,26 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _transport-lock: + +======================================================================= + SE05X Transport Lock example +======================================================================= + +This demo Locks SE05x applet. + +During transportation of the secure element, this lock can +be enforced to avoid malicious access to the SE during transport. + +.. warning:: This demo is just for reference for the usage of APIs, + it should not be used for production. + + +See the corresponding demo :numref:`transport-unlock` :ref:`transport-unlock` + +Both the lock and unlock demo use same key and common logic +from ``se05x_TransportAuth.c``
diff --git a/demos/se05x/se05x_TransportLock/se05x_TransportLock.c b/demos/se05x/se05x_TransportLock/se05x_TransportLock.c new file mode 100644 index 0000000..e72ca9d --- /dev/null +++ b/demos/se05x/se05x_TransportLock/se05x_TransportLock.c
@@ -0,0 +1,82 @@ +/* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include <nxLog_App.h> +#include <se05x_APDU.h> + +#include "se05x_TransportAuth.h" + +static ex_sss_boot_ctx_t gex_sss_transport_lock_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_transport_lock_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +static sss_status_t se05x_TransportLock(Se05xSession_t *pSe05xSession); + +#include <ex_sss_main_inc.h> +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + smStatus_t sw_status; + Se05xSession_t *pSe05xSession; + sss_session_t txSession = {0}; + sss_tunnel_t txTunnel = {0}; + + /*Create transport object in host*/ + status = se05x_TA_CreateHostKey(pCtx); + if (kStatus_SSS_Success != status) { + LOG_E("Failed to set transport object in host!!!"); + goto cleanup; + } + pSe05xSession = &pSession->s_ctx; + /*Create transport object in SE*/ + sw_status = se05x_TA_CreateSETransportLockKey(pSe05xSession); + if (sw_status == SM_ERR_CONDITIONS_OF_USE_NOT_SATISFIED) { + LOG_W("Transport to se05x applet is Locked!!!"); + } + + status = se05x_TA_OpenAuthSession(pCtx, &txSession, &txTunnel); + + if (kStatus_SSS_Success == status) { + pSe05xSession = &((sss_se05x_session_t *)&txSession)->s_ctx; + status = se05x_TransportLock(pSe05xSession); + } + + sss_session_close(&txSession); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_TransportLock Example Success !!!..."); + } + else { + LOG_E("se05x_TransportLock Example Failed !!!..."); + } + return status; +} + +static sss_status_t se05x_TransportLock(Se05xSession_t *pSe05xSession) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sw_status; + /* Persistent Lock */ + SE05x_LockIndicator_t lockIndicator = kSE05x_LockIndicator_PERSISTENT_LOCK; + /* Lock during Transport */ + SE05x_LockState_t lockState = kSE05x_LockState_LOCKED; + + sw_status = Se05x_API_SetLockState(pSe05xSession, lockIndicator, lockState); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_SetLockState"); + goto cleanup; + } + else { + LOG_W("Se05x_API_SetLockState Transport Lock feature is success"); + status = kStatus_SSS_Success; + } + +cleanup: + return status; +}
diff --git a/demos/se05x/se05x_TransportUnLock/CMakeLists.txt b/demos/se05x/se05x_TransportUnLock/CMakeLists.txt new file mode 100644 index 0000000..d25f522 --- /dev/null +++ b/demos/se05x/se05x_TransportUnLock/CMakeLists.txt
@@ -0,0 +1,38 @@ +# Copyright 2020 NXP +# +# SPDX-License-Identifier: Apache-2.0 +# +# +PROJECT(se05x_TransportUnLock) + +FILE( + GLOB + files + *.c + ../se05x_TransportAuth/*.c + ../se05x_TransportAuth/*.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${files}) + +TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PRIVATE ../se05x_TransportAuth) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/tst + ${SMCOM}-${SE05X_Auth} + ) +ENDIF()
diff --git a/demos/se05x/se05x_TransportUnLock/readme.rst b/demos/se05x/se05x_TransportUnLock/readme.rst new file mode 100644 index 0000000..793b702 --- /dev/null +++ b/demos/se05x/se05x_TransportUnLock/readme.rst
@@ -0,0 +1,24 @@ +.. + Copyright 2019,2020 NXP + + + +.. highlight:: bat + +.. _transport-unlock: + +======================================================================= + SE05X Transport UnLock example +======================================================================= + +This demo UnLocks SE05x applet, after it is locked by :numref:`transport-lock` :ref:`transport-lock` + + +.. warning:: This demo is just for reference for the usage of APIs, + it should not be used for production. + + +See the corresponding demo :numref:`transport-lock` :ref:`transport-lock` + +Both the lock and unlock demo use same key and common logic +from ``se05x_TransportAuth.c``
diff --git a/demos/se05x/se05x_TransportUnLock/se05x_TransportUnLock.c b/demos/se05x/se05x_TransportUnLock/se05x_TransportUnLock.c new file mode 100644 index 0000000..c67ee48 --- /dev/null +++ b/demos/se05x/se05x_TransportUnLock/se05x_TransportUnLock.c
@@ -0,0 +1,76 @@ +/* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +#include <nxLog_App.h> +#include <se05x_APDU.h> + +#include "se05x_TransportAuth.h" + +static ex_sss_boot_ctx_t gex_sss_transport_unlock_boot_ctx; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_transport_unlock_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +static sss_status_t se05x_TransportUnLock(Se05xSession_t *pSe05xSession); + +#include <ex_sss_main_inc.h> +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + Se05xSession_t *pSe05xSession; + sss_session_t txSession = {0}; + sss_tunnel_t txTunnel = {0}; + + /* Create transport object in host */ + status = se05x_TA_CreateHostKey(pCtx); + if (kStatus_SSS_Success != status) { + LOG_E("Failed to set transport object in host!!!"); + goto cleanup; + } + pSe05xSession = &pSession->s_ctx; + + status = se05x_TA_OpenAuthSession(pCtx, &txSession, &txTunnel); + + if (kStatus_SSS_Success == status) { + pSe05xSession = &((sss_se05x_session_t *)&txSession)->s_ctx; + status = se05x_TransportUnLock(pSe05xSession); + } + + sss_session_close(&txSession); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("se05x_TransportUnLock Example Success !!!..."); + } + else { + LOG_E("se05x_TransportUnLock Example Failed !!!..."); + } + return status; +} + +static sss_status_t se05x_TransportUnLock(Se05xSession_t *pSe05xSession) +{ + sss_status_t status = kStatus_SSS_Fail; + smStatus_t sw_status; + /* Persistent Lock */ + SE05x_LockIndicator_t lockIndicator = kSE05x_LockIndicator_PERSISTENT_LOCK; + /* Unlock during Transport */ + SE05x_LockState_t lockState = kSE05x_LockState_NA; + + sw_status = Se05x_API_SetLockState(pSe05xSession, lockIndicator, lockState); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_SetLockState"); + goto cleanup; + } + else { + LOG_W("Se05x_API_SetLockState UnLock Transport feature is success!!!"); + status = kStatus_SSS_Success; + } + +cleanup: + return status; +}
diff --git a/demos/se05x/se05x_export/CMakeLists.txt b/demos/se05x/se05x_export/CMakeLists.txt new file mode 100644 index 0000000..bc3667d --- /dev/null +++ b/demos/se05x/se05x_export/CMakeLists.txt
@@ -0,0 +1,21 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ex_export_se_to_host) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h + *.rst +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_export/ex_sss_export.c b/demos/se05x/se05x_export/ex_sss_export.c new file mode 100644 index 0000000..1f42c74 --- /dev/null +++ b/demos/se05x/se05x_export/ex_sss_export.c
@@ -0,0 +1,135 @@ +/* Copyright 2020 NXP +* +* SPDX-License-Identifier: Apache-2.0 +*/ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <stdio.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +#define EC_KEY_BIT_LEN 256 + +#define EXAMPLE_TRANSIENT_EXPORT_IMPORT_KEY_ID (0xEF00004F) + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_export_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +static const char *FileKeyExportdata = "export_serializedECKey.bin"; +static const char *FileSignExportdata = "export_serializedSingedData.bin"; + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_export_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_object_t keyPair; + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + smStatus_t sw_status; + sss_asymmetric_t ctx_asymm = {0}; + + FILE *fpEcc = NULL; + uint8_t dataBlob[1024] = {0}; + size_t dataBlobLen = sizeof(dataBlob); + const uint8_t dataToSign[EC_KEY_BIT_LEN / 8] = "RANDOM DATA"; + size_t dataToSignLen = sizeof(dataToSign); + + LOG_I("Running Example ex_sss_export.c"); + + status = sss_key_object_init(&keyPair, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + /* Create EC object */ + status = sss_key_object_allocate_handle(&keyPair, + EXAMPLE_TRANSIENT_EXPORT_IMPORT_KEY_ID, + kSSS_KeyPart_Pair, + kSSS_CipherType_EC_NIST_P, + EC_KEY_BIT_LEN / 8, + kKeyObject_Mode_Transient); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_store_generate_key(&pCtx->ks, &keyPair, EC_KEY_BIT_LEN, NULL); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + /* Export Object to Host */ + sw_status = + Se05x_API_ExportObject(&pSession->s_ctx, keyPair.keyId, kSE05x_RSAKeyComponent_NA, dataBlob, &dataBlobLen); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_ExportObject!!!"); + goto cleanup; + } + status = kStatus_SSS_Success; + LOG_AU8_D(dataBlob, dataBlobLen); + /* Create a file and store Serialized data in file */ + LOG_I("Export ec key to '%s'!!!", FileKeyExportdata); + fpEcc = fopen(FileKeyExportdata, "wb+"); + if (fpEcc == NULL) { + LOG_E("File open failed!!!"); + return kStatus_SSS_Fail; + } + fwrite(dataBlob, 1, dataBlobLen, fpEcc); + fclose(fpEcc); + + status = sss_asymmetric_context_init(&ctx_asymm, &pCtx->session, &keyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Sign); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + dataBlobLen = sizeof(dataBlob); + /* Do Signing */ + LOG_MAU8_D("Signing digest", dataToSign, dataToSignLen); + status = sss_asymmetric_sign_digest(&ctx_asymm, (uint8_t *)dataToSign, dataToSignLen, dataBlob, &dataBlobLen); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + LOG_MAU8_D("signature", dataBlob, dataBlobLen); + LOG_I("Signing Successful !!!"); + sss_asymmetric_context_free(&ctx_asymm); + + LOG_I("Export signature key to '%s'.", FileSignExportdata); + fpEcc = fopen(FileSignExportdata, "wb+"); + if (fpEcc == NULL) { + LOG_E("File open failed!!!"); + return kStatus_SSS_Fail; + } + fwrite(dataBlob, 1, dataBlobLen, fpEcc); + fclose(fpEcc); + +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("ex_sss_export Example Success !!!..."); + } + else { + LOG_E("ex_sss_export Example Failed !!!..."); + } + return status; +}
diff --git a/demos/se05x/se05x_export/out_se05x_ex_export_se_to_host.rst.txt b/demos/se05x/se05x_export/out_se05x_ex_export_se_to_host.rst.txt new file mode 100644 index 0000000..b0371d9 --- /dev/null +++ b/demos/se05x/se05x_export/out_se05x_ex_export_se_to_host.rst.txt
@@ -0,0 +1,14 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\se05x_ex_export_se_to_host.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :Running Example ex_sss_export.c +App :INFO :Export ec key to 'export_serializedECKey.bin'!!! +App :INFO :Signing Successful !!! +App :INFO :Export signature key to 'export_serializedSingedData.bin'. +App :INFO :ex_sss_export Example Success !!!... +App :INFO :ex_sss Finished
diff --git a/demos/se05x/se05x_export/readme.rst b/demos/se05x/se05x_export/readme.rst new file mode 100644 index 0000000..8b65641 --- /dev/null +++ b/demos/se05x/se05x_export/readme.rst
@@ -0,0 +1,47 @@ +.. + Copyright 2020 NXP + + + + +.. _se05x-export-transient-objects: + +======================================================================= + SE05X Export Transient objects +======================================================================= + +This example does following steps: + +- Generate a Transient ECC Key + +- Export that to a blob + +- Sign some dummy data with that key + +- Store the signature in local file for future use. + +After running this example, you can run :numref:`se05x-import-transient-objects` :ref:`se05x-import-transient-objects` + + +.. note:: + + This example needs File system access and hence it is not applicable for + embedded platforms. + + The exported files are current working directory. + + +Visual Studio - Debug settings +======================================================================= + +Kindly set debug ``Working Directory`` to ``$(TargetDir)`` in project's debug stettings. +This ensures that the examples :ref:`se05x-export-transient-objects` and +:ref:`se05x-import-transient-objects` work seamlessly. + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_ex_export_se_to_host.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_import/CMakeLists.txt b/demos/se05x/se05x_import/CMakeLists.txt new file mode 100644 index 0000000..c3097c3 --- /dev/null +++ b/demos/se05x/se05x_import/CMakeLists.txt
@@ -0,0 +1,21 @@ +# +# Copyright 2019,2020 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(se05x_ex_import_host_to_se) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h + *.rst +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ex_common) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_import/ex_sss_import.c b/demos/se05x/se05x_import/ex_sss_import.c new file mode 100644 index 0000000..6e33d60 --- /dev/null +++ b/demos/se05x/se05x_import/ex_sss_import.c
@@ -0,0 +1,185 @@ +/* Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* ************************************************************************** */ +/* Includes */ +/* ************************************************************************** */ + +#include <ex_sss.h> +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <stdio.h> + +/* ************************************************************************** */ +/* Local Defines */ +/* ************************************************************************** */ + +#define EC_KEY_BIT_LEN 256 +#define EXAMPLE_TRANSIENT_EXPORT_IMPORT_KEY_ID (0xEF00004F) + +/* ************************************************************************** */ +/* Structures and Typedefs */ +/* ************************************************************************** */ + +/* ************************************************************************** */ +/* Global Variables */ +/* ************************************************************************** */ + +static ex_sss_boot_ctx_t gex_sss_import_boot_ctx; + +/* ************************************************************************** */ +/* Static function declarations */ +/* ************************************************************************** */ + +static const char *FileKeyExportdata = "export_serializedECKey.bin"; +static const char *FileSignExportdata = "export_serializedSingedData.bin"; + +/* ************************************************************************** */ +/* Private Functions */ +/* ************************************************************************** */ + +static sss_status_t ExampleDoVerify(ex_sss_boot_ctx_t *pCtx, sss_object_t *pKeyPair); + +/* ************************************************************************** */ +/* Public Functions */ +/* ************************************************************************** */ + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_import_boot_ctx) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t serializedObject[512] = {0x00}; + size_t serializedObjectLen = sizeof(serializedObject); + sss_se05x_session_t *pSession = (sss_se05x_session_t *)&pCtx->session; + smStatus_t sw_status; + SE05x_Result_t pExists = kSE05x_Result_NA; + sss_object_t keyPair; + FILE *fp = NULL; + + LOG_I("Running Example ex_sss_import.c"); + + /* Check object exists before importing to Host */ + sw_status = Se05x_API_CheckObjectExists(&pSession->s_ctx, EXAMPLE_TRANSIENT_EXPORT_IMPORT_KEY_ID, &pExists); + if (SM_OK == sw_status && pExists == kSE05x_Result_SUCCESS) { + LOG_I("Object exists!!!"); + } + else { + LOG_E("NO ECC Object exists!!!"); + goto cleanup; + } + + status = sss_key_object_init(&keyPair, &pCtx->ks); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&keyPair, EXAMPLE_TRANSIENT_EXPORT_IMPORT_KEY_ID); + + status = sss_key_store_generate_key(&pCtx->ks, &keyPair, EC_KEY_BIT_LEN, NULL); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_I("This verify must fail, because keys are different"); + ExampleDoVerify(pCtx, &keyPair); + + LOG_I("Reading contents form '%s'", FileKeyExportdata); + fp = fopen(FileKeyExportdata, "rb"); + if (fp == NULL) { + LOG_E("Could not open '%s'", FileKeyExportdata); + goto cleanup; + } + fseek(fp, 0L, SEEK_END); + serializedObjectLen = ftell(fp); + if (serializedObjectLen <= 0) { + LOG_E("'%s' is empty", FileKeyExportdata); + fclose(fp); + goto cleanup; + } + fseek(fp, 0L, SEEK_SET); + fread(serializedObject, serializedObjectLen, 1, fp); + fclose(fp); + + LOG_MAU8_D("Serailized Contents", serializedObject, serializedObjectLen); + + /* Import Object to Host */ + sw_status = Se05x_API_ImportObject(&pSession->s_ctx, + keyPair.keyId, + kSE05x_RSAKeyComponent_NA, /* Since this is EC Key, */ + serializedObject, + serializedObjectLen); + if (SM_OK != sw_status) { + LOG_E("Failed Se05x_API_ImportObject"); + goto cleanup; + } + + LOG_I("This verify must pass, because keys are same"); + status = ExampleDoVerify(pCtx, &keyPair); + + status = kStatus_SSS_Success; +cleanup: + if (kStatus_SSS_Success == status) { + LOG_I("ex_sss_import Example Success !!!..."); + } + else { + LOG_E("ex_sss_import Example Failed !!!..."); + } + return status; +} + +static sss_status_t ExampleDoVerify(ex_sss_boot_ctx_t *pCtx, sss_object_t *pKeyPair) +{ + FILE *fp; + uint8_t serializedObject[1024] = {0x00}; + size_t serializedObjectLen = sizeof(serializedObject); + sss_status_t status = kStatus_SSS_Fail; + sss_asymmetric_t ctx_verify = {0}; + const uint8_t dataToVerify[EC_KEY_BIT_LEN / 8] = "RANDOM DATA"; + size_t dataToVerifyLen = sizeof(dataToVerify); + + LOG_I("Reading contents form '%s'", FileSignExportdata); + fp = fopen(FileSignExportdata, "rb"); + if (fp == NULL) { + LOG_E("Could not open '%s'", FileSignExportdata); + goto cleanup; + } + fseek(fp, 0L, SEEK_END); + serializedObjectLen = ftell(fp); + if (serializedObjectLen <= 0) { + LOG_E("'%s' is empty", FileSignExportdata); + fclose(fp); + goto cleanup; + } + fseek(fp, 0L, SEEK_SET); + fread(serializedObject, serializedObjectLen, 1, fp); + fclose(fp); + + LOG_MAU8_D("Serailized Contents", serializedObject, serializedObjectLen); + + status = + sss_asymmetric_context_init(&ctx_verify, &pCtx->session, pKeyPair, kAlgorithm_SSS_SHA256, kMode_SSS_Verify); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + LOG_MAU8_D("Do Verify", dataToVerify, dataToVerifyLen); + LOG_MAU8_D("signature", serializedObject, serializedObjectLen); + status = sss_asymmetric_verify_digest( + &ctx_verify, (uint8_t *)dataToVerify, dataToVerifyLen, serializedObject, serializedObjectLen); + if (status == kStatus_SSS_Success) { + LOG_I("Verification Successful."); + } + else { + LOG_W("Verification Failed!"); + } + sss_asymmetric_context_free(&ctx_verify); + ENSURE_OR_GO_CLEANUP(status == kStatus_SSS_Success); + + status = kStatus_SSS_Success; +cleanup: + return status; +}
diff --git a/demos/se05x/se05x_import/out_se05x_ex_import_host_to_se.rst.txt b/demos/se05x/se05x_import/out_se05x_ex_import_host_to_se.rst.txt new file mode 100644 index 0000000..ad00a3e --- /dev/null +++ b/demos/se05x/se05x_import/out_se05x_ex_import_host_to_se.rst.txt
@@ -0,0 +1,20 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\se05x_ex_import_host_to_se.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :Running Example ex_sss_import.c +App :INFO :Object exists!!! +App :INFO :This verify must fail, because keys are different +App :INFO :Reading contents form 'export_serializedSingedData.bin' +App :WARN :Verification Failed! +App :WARN :nxEnsure:'status == kStatus_SSS_Success' failed. At Line:196 Function:ExampleDoVerify +App :INFO :Reading contents form 'export_serializedECKey.bin' +App :INFO :This verify must pass, because keys are same +App :INFO :Reading contents form 'export_serializedSingedData.bin' +App :INFO :Verification Successful. +App :INFO :ex_sss_import Example Success !!!... +App :INFO :ex_sss Finished
diff --git a/demos/se05x/se05x_import/readme.rst b/demos/se05x/se05x_import/readme.rst new file mode 100644 index 0000000..cb46f0c --- /dev/null +++ b/demos/se05x/se05x_import/readme.rst
@@ -0,0 +1,46 @@ +.. + Copyright 2020 NXP + + + + +.. _se05x-import-transient-objects: + +======================================================================= + SE05X Import Transient objects +======================================================================= + +Before running this example, please run :numref:`se05x-export-transient-objects` :ref:`se05x-export-transient-objects` + +This example does following steps: + +- Re-Generates a Transient ECC Key at the same location as created by :ref:`se05x-export-transient-objects` + +- Tries to verify previously signed data. (This must fail, because key is over-written) + +- Imports previously exported key inside the SE. + +- Tries to verify previously signed data. (This must be seccessful, because it is the same key) + +.. note:: + + This example needs File system access and hence it is not applicable for + embedded platforms. + + The exported files are current working directory. + +Visual Studio - Debug settings +======================================================================= + +Kindly set debug ``Working Directory`` to ``$(TargetDir)`` in project's debug stettings. +This ensures that the examples :ref:`se05x-export-transient-objects` and +:ref:`se05x-import-transient-objects` work seamlessly. + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_se05x_ex_import_host_to_se.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_policy/CMakeLists.txt b/demos/se05x/se05x_policy/CMakeLists.txt new file mode 100644 index 0000000..14970a0 --- /dev/null +++ b/demos/se05x/se05x_policy/CMakeLists.txt
@@ -0,0 +1,38 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(ex_policy) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) +EXPOSE_SE05X_AUTH_STRATEGY() +CREATE_BINARY(${PROJECT_NAME}) + +IF( + CMAKE_BUILD_TYPE + STREQUAL + "Release" +) + COPY_TO_SOURCEDIR( + ${PROJECT_NAME} + binaries/ex + ${SMCOM}-${SE05X_Auth} + ) +ENDIF() + +#PROJECT(generate_certificate_key) +#ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) +#TARGET_LINK_LIBRARIES( +# ${PROJECT_NAME} +# ex_common +# SSS_APIs +#) +#CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/se05x_policy/Readme.rst b/demos/se05x/se05x_policy/Readme.rst new file mode 100644 index 0000000..7f593e2 --- /dev/null +++ b/demos/se05x/se05x_policy/Readme.rst
@@ -0,0 +1,60 @@ +.. + Copyright 2019,2020 NXP + + +.. highlight:: shell + +.. _se05x-policy-demo: + +========================================================== + Using policies for secure objects +========================================================== + +This demo is to demonstrate the use of policies for secure objects. Object policies such as ``can_Sign`` or ``can_Encrypt`` can be used to restrict operations other than the given policies. Objects inside the secure element are linked to a particular authentication object, based on communication authentication type selected. Objects inside the secure element linked with one authentication object cannot be used when session is open with another authentication type. + +Authentication Object ID to be linked with secure object can be selected as + +.. literalinclude:: ex_policy.c + :language: c + :start-after: /* doc:start:auth-obj */ + :end-before: /* doc:end:auth-obj */ + +.. note :: + Ensure that the authentication object ID in policy set matches the authentication type. + +Sign Policy +======================================================================= + +Create a policy set using the authentication object ID + +.. literalinclude:: ex_policy.c + :language: c + :dedent: 4 + :start-after: /* doc:start:allow-policy-sign */ + :end-before: /* doc:end:allow-policy-sign */ + +Using PCR Object +======================================================================= + +PCR is a special secure object which stores 32-byte data. A PCR object can be used to ensure that secure objects inside the SE cannot be used if the PCR object value is altered. + +We can assign a PCR policy to a secure object as given in the following sample code + +.. literalinclude:: ../../../sss/tst/policyobject/test_policyobject.c + :language: c + :dedent: 4 + :start-after: /* doc:start:pcr-policy */ + :end-before: /* doc:end:pcr-policy */ + +.. note :: + Ensure that the ``pcrObjID`` in PCR policy is the same object ID at which the PCR is stored. + + + +Console output +======================================================================= + +If everything is successful, the output will be similar to: + +.. literalinclude:: out_ex_policy.rst.txt + :start-after: sss :WARN :!!!Not recommended for production use.!!!
diff --git a/demos/se05x/se05x_policy/ex_policy.c b/demos/se05x/se05x_policy/ex_policy.c new file mode 100644 index 0000000..8718db6 --- /dev/null +++ b/demos/se05x/se05x_policy/ex_policy.c
@@ -0,0 +1,217 @@ +/* Copyright 2019,2020 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxLog_App.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> + +#include "ex_sss_auth.h" + +//#include "certificate.h" + +static ex_sss_boot_ctx_t gex_sss_gen_cert; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_gen_cert) +#define EX_SSS_BOOT_DO_ERASE 1 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 0 + +#include <ex_sss_main_inc.h> + +#define ECC_KEY_BIT_LEN 256 + +/* doc:start:auth-obj */ +#if (SSS_HAVE_SE05X_AUTH_USERID) || (SSS_HAVE_SE05X_AUTH_USERID_PLATFSCP03) //UserID Session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_UserID_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_NONE) || (SSS_HAVE_SE05X_AUTH_PLATFSCP03) //No auth +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_NONE_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_AESKEY) || (SSS_HAVE_SE05X_AUTH_AESKEY_PLATFSCP03) //AESKey +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_APPLETSCP_AUTH_ID +#elif (SSS_HAVE_SE05X_AUTH_ECKEY) || (SSS_HAVE_SE05X_AUTH_ECKEY_PLATFSCP03) //ECKey session +#define EX_LOCAL_OBJ_AUTH_ID EX_SSS_AUTH_SE05X_ECKEY_ECDSA_AUTH_ID +#endif +/* doc:end:auth-obj */ + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + LOG_I( + "This example is to demonstrate the use of policies for secure " + "objects"); + sss_status_t status = kStatus_SSS_Fail; + uint8_t digest[32] = "Hello World"; + size_t digestLen = sizeof(digest); + uint8_t signature[ECC_KEY_BIT_LEN] = {0}; + size_t signatureLen = sizeof(signature); + sss_asymmetric_t asymm; + sss_object_t object; + + sss_algorithm_t algorithm; + sss_mode_t mode; + uint32_t keyId = MAKE_TEST_ID(__LINE__); + size_t keylen = ECC_KEY_BIT_LEN / 8; + + algorithm = kAlgorithm_SSS_SHA256; + mode = kMode_SSS_Sign; + + /* clang-format off */ + /* doc:start:allow-policy-sign */ + + /*Logic to pass sign & verifypolicy*/ + const int allow_sign = 1; + const int allow_verify = 0; + + /* doc:start:allow-policy-sign-part1 */ + /* Policies for key */ + const sss_policy_u key_withPol = { + .type = KPolicy_Asym_Key, + /*Authentication object based on SE05X_AUTH*/ + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = { + /*Asymmetric key policy*/ + .asymmkey = { + /*Policy for sign*/ + .can_Sign = allow_sign, + /*Policy for verify*/ + .can_Verify = allow_verify, + /*Policy for encrypt*/ + .can_Encrypt = 1, + /*Policy for decrypt*/ + .can_Decrypt = 1, + /*Policy for Key Derivation*/ + .can_KD = 1, + /*Policy for wrapped object*/ + .can_Wrap = 1, + /*Policy to re-write object*/ + .can_Write = 1, + /*Policy for reading object*/ + .can_Read = 1, + /*Policy to use object for attestation*/ + .can_Attest = 1, + } + } + }; + + /* Common rules */ + const sss_policy_u common = { + .type = KPolicy_Common, + /*Authentication object based on SE05X_AUTH*/ + .auth_obj_id = EX_LOCAL_OBJ_AUTH_ID, + .policy = { + .common = { + /*Secure Messaging*/ + .req_Sm = 0, + /*Policy to Delete object*/ + .can_Delete = 1, + /*Forbid all operations on object*/ + .forbid_All = 0, + } + } + }; + + /* create policy set */ + sss_policy_t policy_for_ec_key = { + .nPolicies = 2, + .policies = { &key_withPol, &common } + }; + /* doc:end:allow-policy-sign-part1 */ + + status = sss_key_object_init(&object, &pCtx->ks); + if (status != kStatus_SSS_Success) { + LOG_E("sss_key_object_init Failed!!!"); + goto exit; + } + + status = sss_key_object_allocate_handle( + &object, keyId, kSSS_KeyPart_Pair, kSSS_CipherType_EC_NIST_P, keylen, kKeyObject_Mode_Persistent); + if (status != kStatus_SSS_Success) { + LOG_E("key_object_allocate_handle Failed!!!"); + goto exit; + } + + /* doc:start:allow-policy-sign-part2 */ + status = sss_key_store_generate_key( + &pCtx->ks, + &object, + ECC_KEY_BIT_LEN, + &policy_for_ec_key); + /* doc:end:allow-policy-sign-part2 */ + + /* doc:end:allow-policy-sign */ + + /* clang-format on */ + + if (status != kStatus_SSS_Success) { + LOG_E("Key Store Generate Key Failed!!!"); + goto exit; + } + + /* asymmetric Sign */ + status = sss_asymmetric_context_init(&asymm, &pCtx->session, &object, algorithm, mode); + if (status != kStatus_SSS_Success) { + LOG_E("Asymmetric Init Context Failed!!!"); + goto exit; + } + + status = sss_asymmetric_sign_digest(&asymm, digest, digestLen, signature, &signatureLen); + + if (allow_sign) { + if (status != kStatus_SSS_Success) { + LOG_E("Signing Failed, Must have passed!!!"); + goto exit; + } + LOG_I("Signing was succesful"); + } + else { + if (status == kStatus_SSS_Success) { + LOG_E( + "Signing policy not respected. Test with Sign Disabled Policy " + "Failed!!!"); + status = kStatus_SSS_Fail; + goto exit; + } + LOG_I("Signing was not allowed due to policy."); + } + + /* asymmetric verify */ + status = sss_asymmetric_context_init(&asymm, &pCtx->session, &object, algorithm, kMode_SSS_Verify); + if (status != kStatus_SSS_Success) { + LOG_E("Asymmetric Init Context Failed!!!"); + goto exit; + } + + status = sss_asymmetric_verify_digest(&asymm, digest, digestLen, signature, signatureLen); + + if (allow_verify) { + if (status != kStatus_SSS_Success) { + LOG_E("Verify Failed, Must have passed!!!"); + goto exit; + } + LOG_I("Verify was succesful"); + LOG_I("Example Success"); + goto exit; + } + else { + if (status == kStatus_SSS_Success) { + LOG_E( + "Verify policy not respected. Test with verify Disabled Policy " + "Failed!!!"); + status = kStatus_SSS_Fail; + goto exit; + } + LOG_I("Verify was not allowed due to policy."); + LOG_I("Example Success"); + status = kStatus_SSS_Success; + goto exit; + } + +exit: + sss_key_store_erase_key(&pCtx->ks, &object); + return status; +}
diff --git a/demos/se05x/se05x_policy/out_ex_policy.rst.txt b/demos/se05x/se05x_policy/out_ex_policy.rst.txt new file mode 100644 index 0000000..210061f --- /dev/null +++ b/demos/se05x/se05x_policy/out_ex_policy.rst.txt
@@ -0,0 +1,12 @@ +App :INFO :PlugAndTrust_v02.13.00_20200208 +App :INFO :Running ..\..\..\simw-top_build\se_x86\bin\Debug\ex_policy.exe +App :INFO :Using PortName='127.0.0.1:8050' (gszSocketPortDefault) +App :INFO :If you want to over-ride the selection, use ENV=EX_SSS_BOOT_SSS_PORT or pass in command line arguments. +smCom :INFO :Opening connection to JRCP server on 127.0.0.1:8050 +sss :INFO :atr (Len=0) +sss :WARN :Communication channel is Plain. +sss :WARN :!!!Not recommended for production use.!!! +App :INFO :This example is to demonstrate the use of policies for secure objects +App :INFO :Signing was succesful +App :INFO :Example Success +App :INFO :ex_sss Finished
diff --git a/demos/se05x/seTool/CMakeLists.txt b/demos/se05x/seTool/CMakeLists.txt new file mode 100644 index 0000000..df5aa28 --- /dev/null +++ b/demos/se05x/seTool/CMakeLists.txt
@@ -0,0 +1,17 @@ +# +# Copyright 2019 NXP +# SPDX-License-Identifier: Apache-2.0 +# +# + +PROJECT(seTool) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${PROJECT_NAME}.c) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/se05x/seTool/Readme.rst b/demos/se05x/seTool/Readme.rst new file mode 100644 index 0000000..b2b641c --- /dev/null +++ b/demos/se05x/seTool/Readme.rst
@@ -0,0 +1,82 @@ +.. + Copyright 2019 NXP + + +.. highlight:: shell + +.. _se-tool: + +========================================================== + Tool to create Reference key file +========================================================== + +This tool is to demonstrate how to implement a command-line utility for native +systems. This utiltity can be used to generate/inject keypair and create +reference key files. + +This is beneficial for environments which do not have python installed. + +.. note:: This example is implemented only for NIST-P256 curve. + It can only be compiled when Host Crypto is OpenSSL. + +Building the example +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Use the following CMake configurations to compile the example + +- CMake configurations: ``WithHostCrypto_OPENSSL``: ON + +- Project: ``seTool`` + +How to use +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This example provides four command-line parameters to select the +operation to perform. + +1) To **generate** a keypair, run the tool as:: + + seTool genECC <keyId> + + Where: + + - *keyId* is the keypair index at which we want to generate the keypair. + + +#) To **inject** a keypair, run the tool as:: + + seTool setECC <keyId> <filename> + + Where: + + - *keyId* is the keypair index at which we want to inject the keypair + + - *filename* is the path of the file in which keypair is stored in PEM + format. + + +#) To **retrieve the public key**, run the tool as:: + + seTool getPublic <keyId> <filename> + + Where: + + - *keyId* is the keypair index from which we want to retrieve the public + key + + - *filename* is the path of the file in which we want to store the key in + PEM format. + + +#) To **create a reference key** for an injected keypair, run the tool as:: + + seTool getRef <keyId> <filename> + + Where: + + - *keyId* is the keypair index at which we keypair is stored and + + - *filename* is the path of the file in which we want to store the + reference key in PEM format. + +The generated reference key can be used by OpenSSL Engine.
diff --git a/demos/se05x/seTool/seTool.c b/demos/se05x/seTool/seTool.c new file mode 100644 index 0000000..d1eb14d --- /dev/null +++ b/demos/se05x/seTool/seTool.c
@@ -0,0 +1,297 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "seTool.h" + +#include <ex_sss_boot.h> +#include <fsl_sss_se05x_apis.h> +#include <nxEnsure.h> +#include <nxLog_App.h> +#include <openssl/bio.h> +#include <openssl/evp.h> +#include <openssl/pem.h> +#include <se05x_APDU.h> +#include <se05x_const.h> +#include <se05x_ecc_curves.h> +#include <se05x_ecc_curves_values.h> +#include <se05x_tlv.h> +#include <stdio.h> +#include <string.h> + +static ex_sss_boot_ctx_t gex_sss_se_tool; + +#define EX_SSS_BOOT_PCONTEXT (&gex_sss_se_tool) +#define EX_SSS_BOOT_DO_ERASE 0 +#define EX_SSS_BOOT_EXPOSE_ARGC_ARGV 1 + +#include <ex_sss_main_inc.h> + +void usage() +{ + LOG_W("Usage:"); + LOG_W("\tseTool genECC <keyId>"); + LOG_W("\tseTool setECC <keyId> <filename>"); + LOG_W("\tseTool getPublic <keyId> <filename>"); + LOG_W("\tseTool getRef <keyId> <filename>"); +} + +sss_status_t ex_sss_entry(ex_sss_boot_ctx_t *pCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + int argc = gex_sss_argc; + const char **argv = gex_sss_argv; + int genECC = 0; + int getPublic = 0; + int getRef = 0; + int setECC = 0; + + if (argc < 2) { + usage(); + goto exit; + } + + if (strncmp(argv[1], "genECC", sizeof("genECC")) == 0) { + genECC = 1; + } + else if (strncmp(argv[1], "getPublic", sizeof("getPublic")) == 0) { + getPublic = 1; + } + else if (strncmp(argv[1], "getRef", sizeof("getRef")) == 0) { + getRef = 1; + } + else if (strncmp(argv[1], "setECC", sizeof("setECC")) == 0) { + setECC = 1; + } + else { + LOG_E("Invalid command line parameter"); + usage(); + goto exit; + } + + if (genECC) { + if (argc < 3) { + usage(); + goto exit; + } + + long int id = strtoul(argv[2], NULL, 0); + uint32_t keyId = (uint32_t)(id); + /*We demonstrate for cipher type and key size corresponding to NISTP-256 keypair only*/ + sss_object_t obj; + sss_key_part_t keyPart = kSSS_KeyPart_Pair; + sss_cipher_type_t cipherType = kSSS_CipherType_EC_NIST_P; + size_t keyBitLen = 256; + + status = sss_key_object_init(&obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = + sss_key_object_allocate_handle(&obj, keyId, keyPart, cipherType, keyBitLen * 8, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_generate_key(&pCtx->ks, &obj, keyBitLen, NULL); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + } + + else if (getPublic) { + if (argc < 4) { + usage(); + goto exit; + } + + long int id = strtoul(argv[2], NULL, 0); + uint32_t keyId = (uint32_t)(id); + /*We demonstrate for cipher type and key size corresponding to NISTP-256 keypair only*/ + sss_object_t obj; + size_t keyBitLen = 256; + uint8_t key[256] = {0}; + size_t keyByteLen = sizeof(key); + + status = sss_key_object_init(&obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&obj, keyId); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->ks, &obj, key, &keyByteLen, &keyBitLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + BIO *bio = BIO_new_mem_buf(key, (int)sizeof(key)); + if (bio == NULL) { + LOG_E("Unable to initialize BIO"); + status = kStatus_SSS_Fail; + goto exit; + } + + EVP_PKEY *pKey = d2i_PUBKEY_bio(bio, NULL); + if (!pKey) { + LOG_E("Failed to load public key"); + status = kStatus_SSS_Fail; + goto exit; + } + + char file_name[MAX_FILE_NAME_SIZE] = {0}; + FILE *fp = NULL; + strncpy(file_name, argv[3], sizeof(file_name) - 1); + fp = fopen(file_name, "wb+"); + if (fp == NULL) { + LOG_E("Can not open the file"); + status = kStatus_SSS_Fail; + goto exit; + } + + else { + PEM_write_PUBKEY(fp, pKey); + fclose(fp); + } + } + + else if (getRef) { + if (argc < 4) { + usage(); + goto exit; + } + + long int id = strtoul(argv[2], NULL, 0); + uint32_t keyId = (uint32_t)(id); + /*We demonstrate for cipher type and key size corresponding to NISTP-256 keypair only*/ + sss_object_t obj; + size_t keyBitLen = 256; + uint8_t key[256] = {0}; + size_t keyByteLen = sizeof(key); + uint8_t priv_header[] = PRIV_PREFIX_NIST_P_256; + uint8_t pub_header[] = PUBLIC_PREFIX_NIST_P_256; + uint8_t magic[] = MAGIC_BYTES_SE05X_OPENSSL_ENGINE; + uint8_t ref[256] = {0}; + size_t ref_len = 0; + uint8_t id_array[4] = {0}; + + status = sss_key_object_init(&obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_object_get_handle(&obj, keyId); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_get_key(&pCtx->ks, &obj, key, &keyByteLen, &keyBitLen); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + memcpy(&ref[ref_len], priv_header, sizeof(priv_header)); + ref_len += sizeof(priv_header); + + id_array[0] = (keyId & 0xFF000000) >> (8 * 3); + id_array[1] = (keyId & 0x00FF0000) >> (8 * 2); + id_array[2] = (keyId & 0x0000FF00) >> (8 * 1); + id_array[3] = (keyId & 0x000000FF) >> (8 * 0); + + memcpy(&ref[ref_len], id_array, sizeof(id_array)); + ref_len += sizeof(id_array); + + memcpy(&ref[ref_len], magic, sizeof(magic)); + ref_len += sizeof(magic); + + ref[ref_len++] = 0x10; // Hardcoded for Keypair + ref[ref_len++] = 0x00; // Hardcoded as 0x00 + + memcpy(&ref[ref_len], pub_header, sizeof(pub_header)); + ref_len += sizeof(pub_header); + + if ((ref_len + (keyByteLen - 22)) > sizeof(ref)) { + status = kStatus_SSS_Fail; + goto exit; + } + + if ((23 + (keyByteLen - 22)) > sizeof(key)) { + status = kStatus_SSS_Fail; + goto exit; + } + + /* Copy only public key part */ + memcpy(&ref[ref_len], &key[23], keyByteLen - 22); + ref_len += (keyByteLen - 22); + + BIO *bio = BIO_new_mem_buf(ref, (int)(ref_len)); + if (bio == NULL) { + LOG_E("Unable to initialize BIO"); + status = kStatus_SSS_Fail; + goto exit; + } + + EVP_PKEY *pKey = d2i_PrivateKey_bio(bio, NULL); + if (!pKey) { + LOG_E("Failed to load public key"); + status = kStatus_SSS_Fail; + goto exit; + } + + char file_name[MAX_FILE_NAME_SIZE] = {0}; + FILE *fp = NULL; + strncpy(file_name, argv[3], sizeof(file_name) - 1); + fp = fopen(file_name, "wb+"); + if (fp == NULL) { + LOG_E("Can not open the file"); + status = kStatus_SSS_Fail; + goto exit; + } + + else { + PEM_write_PrivateKey(fp, pKey, NULL, NULL, 0, NULL, NULL); + fclose(fp); + } + } + + else if (setECC) { + if (argc < 4) { + usage(); + goto exit; + } + + long int id = strtoul(argv[2], NULL, 0); + uint32_t keyId = (uint32_t)(id); + /*We demonstrate for cipher type and key size corresponding to NISTP-256 keypair only*/ + sss_object_t obj; + sss_key_part_t keyPart = kSSS_KeyPart_Pair; + sss_cipher_type_t cipherType = kSSS_CipherType_EC_NIST_P; + size_t keyBitLen = 256; + uint8_t key[256] = {0}; + size_t keyByteLen = sizeof(key); + unsigned char *data = &key[0]; + + EVP_PKEY *pKey = NULL; + + char file_name[MAX_FILE_NAME_SIZE] = {0}; + FILE *fp = NULL; + strncpy(file_name, argv[3], sizeof(file_name) - 1); + fp = fopen(file_name, "rb"); + if (fp == NULL) { + LOG_E("Can not open the file"); + status = kStatus_SSS_Fail; + goto exit; + } + + else { + PEM_read_PrivateKey(fp, &pKey, NULL, NULL); + fclose(fp); + if (pKey == NULL) { + LOG_E("Failed to read Keypair"); + status = kStatus_SSS_Fail; + goto exit; + } + } + + keyByteLen = i2d_PrivateKey(pKey, &data); + + status = sss_key_object_init(&obj, &pCtx->ks); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = + sss_key_object_allocate_handle(&obj, keyId, keyPart, cipherType, keyBitLen * 8, kKeyObject_Mode_Persistent); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + + status = sss_key_store_set_key(&pCtx->ks, &obj, key, keyByteLen, keyBitLen, NULL, 0); + ENSURE_OR_GO_EXIT(status == kStatus_SSS_Success); + } + +exit: + return status; +}
diff --git a/demos/se05x/seTool/seTool.h b/demos/se05x/seTool/seTool.h new file mode 100644 index 0000000..ab0bf4a --- /dev/null +++ b/demos/se05x/seTool/seTool.h
@@ -0,0 +1,26 @@ +/* Copyright 2019 NXP + * SPDX-License-Identifier: Apache-2.0 + */ + +#include <ex_sss_objid.h> + +#define MAX_FILE_NAME_SIZE 255 + +/* Private part prefix specific for 256-bit NIST-p curve */ +#define PRIV_PREFIX_NIST_P_256 \ + { \ + 0x30, 0x77, 0x02, 0x01, 0x01, 0x04, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 \ + } + +/* Magic bytes for OpenSSL engine */ +#define MAGIC_BYTES_SE05X_OPENSSL_ENGINE \ + { \ + 0xA5, 0xA6, 0xB5, 0xB6, 0xA5, 0xA6, 0xB5, 0xB6 \ + } + +/* Public part prefix specific for 256-bit NIST-p curve */ +#define PUBLIC_PREFIX_NIST_P_256 \ + { \ + 0xA0, 0x0A, 0x06, 0x08, 0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07, 0xA1, 0x44 \ + }
diff --git a/demos/test_Crypto/CMakeLists.txt b/demos/test_Crypto/CMakeLists.txt new file mode 100644 index 0000000..95e776e --- /dev/null +++ b/demos/test_Crypto/CMakeLists.txt
@@ -0,0 +1,18 @@ +PROJECT(test_Crypto) + +FILE( + GLOB + ${PROJECT_NAME}_files + *.c + *.h +) + +ADD_EXECUTABLE(${PROJECT_NAME} ${KSDK_STARTUP_FILE} ${${PROJECT_NAME}_files}) + +TARGET_LINK_LIBRARIES( + ${PROJECT_NAME} + ex_common + SSS_APIs +) + +CREATE_BINARY(${PROJECT_NAME})
diff --git a/demos/test_Crypto/readme.rst b/demos/test_Crypto/readme.rst new file mode 100644 index 0000000..b6a3f25 --- /dev/null +++ b/demos/test_Crypto/readme.rst
@@ -0,0 +1,38 @@ +.. + Copyright 2020 NXP + + +.. highlight:: bat + +.. _test_Crypto: + +======================================================================= + Tests for User Crypto +======================================================================= + +- Tests are implementated based on pre-computed data. + +- Validates cryptographic results against test vectors. + +- The User Crypto can be validate with this test suite. + +- The tests to be used during User Crypto development. + + +List of Crypto Algorithms +======================================================================= + +Following Crypto Algorithms for which tests are available + +- Get Random Number +- AES_CBC_Encrypt +- AES_CBC_Decrypt +- MAC_One_Go +- MAC_Multistep + + +Building the Demo +======================================================================= + +- Build Plug & Trust middleware stack. (Refer :ref:`building`) +- Project: ``test_Crypto``
diff --git a/demos/test_Crypto/test_Crypto.c b/demos/test_Crypto/test_Crypto.c new file mode 100644 index 0000000..fc1eae2 --- /dev/null +++ b/demos/test_Crypto/test_Crypto.c
@@ -0,0 +1,582 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/** @file + * + * test_Crypto.c: *The purpose and scope of this file* + * + * Project: SecureIoTMW-Debug@simw-top-eclipse_x86 + * + * $Date: March 03, 2020 $ + * $Author: ing05193 $ + * $Revision$ + */ + +/* ***************************************************************************************************************** + * Includes + * ***************************************************************************************************************** */ + +#include "test_Crypto.h" + + +/* ***************************************************************************************************************** + * Internal Definitions + * ***************************************************************************************************************** */ + +/* ***************************************************************************************************************** + * Type Definitions + * ***************************************************************************************************************** */ +#define AES_BLOCK_SIZE 16 + +/* ***************************************************************************************************************** + * Global and Static Variables + * ***************************************************************************************************************** */ +uint8_t AES_key[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ + +#define TEST_ROOT_FOLDER "." + + +/* Test Function */ + +typedef struct TestFunction +{ + const char *name; + sss_status_t (*fpTestFunction)(struct userCtx *pUserCtx); +} TestFunction_t; + +/* ***************************************************************************************************************** + * Private Functions Prototypes + * ***************************************************************************************************************** */ +static sss_status_t test_session_open_host(userCtx_t *pUserCtx); +static sss_status_t test_Init_keyStore_keyObject(userCtx_t *pUserCtx); +static sss_status_t test_get_random_number(userCtx_t *pUserCtx); +static sss_status_t test_aes_cbc_encrypt_algo_TC1(userCtx_t *pUserCtx); +static sss_status_t test_aes_cbc_encrypt_algo_TC2(userCtx_t *pUserCtx); +static sss_status_t test_aes_cbc_decrypt_algo_TC1(userCtx_t *pUserCtx); +static sss_status_t test_aes_cbc_decrypt_algo_TC2(userCtx_t *pUserCtx); +static sss_status_t test_mac_one_go_algo(userCtx_t *pUserCtx); + +static sss_status_t test_cbc_encdec_algo(userCtx_t *pUserCtx, + const uint8_t* expectedData, + sss_mode_t mode, + const uint8_t* srcData, + size_t srcDataLen, + uint8_t* destData, + size_t destDataLen + ); + +extern sss_status_t test_mac_multiStep_algo_mmm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mmz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mmp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mmq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mzm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mzz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mzp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mzq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mpm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mpz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mpp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mpq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mqm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mqz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mqp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_mqq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zmm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zmz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zmp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zmq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zzm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zzz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zzp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zzq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zpm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zpz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zpp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zpq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zqm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zqz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zqp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_zqq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pmm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pmz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pmp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pmq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pzm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pzz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pzp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pzq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_ppm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_ppz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_ppp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_ppq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pqm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pqz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pqp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_pqq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qmm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qmz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qmp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qmq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qzm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qzz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qzp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qzq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qpm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qpz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qpp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qpq(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qqm(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qqz(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qqp(userCtx_t *pUserCtx); +extern sss_status_t test_mac_multiStep_algo_qqq(userCtx_t *pUserCtx); + +static sss_status_t test_session_close_host(userCtx_t *pUserCtx); + +const TestFunction_t test_functions[] = { + {"Open Host Session", &test_session_open_host}, + {"Init Key Store and Object", &test_Init_keyStore_keyObject}, + {"Get Random Number", &test_get_random_number}, + { "AES CBC Encrypt TC1", &test_aes_cbc_encrypt_algo_TC1 }, + {"AES CBC Encrypt TC2", &test_aes_cbc_encrypt_algo_TC2}, + {"AES CBC Decrypt TC1", &test_aes_cbc_decrypt_algo_TC1 }, + {"AES CBC Decrypt TC2", &test_aes_cbc_decrypt_algo_TC2}, + {"MAC One Go", &test_mac_one_go_algo}, + {"MAC Multi Step 1[mmm]", &test_mac_multiStep_algo_mmm}, + {"MAC Multi Step 2[mmz]", &test_mac_multiStep_algo_mmz}, + {"MAC Multi Step 3[mmp]", &test_mac_multiStep_algo_mmp}, + {"MAC Multi Step 4[mmq]", &test_mac_multiStep_algo_mmq}, + {"MAC Multi Step 5[mzm]", &test_mac_multiStep_algo_mzm}, + {"MAC Multi Step 6[mzz]", &test_mac_multiStep_algo_mzz}, + {"MAC Multi Step 7[mzp]", &test_mac_multiStep_algo_mzp}, + {"MAC Multi Step 8[mzq]", &test_mac_multiStep_algo_mzq}, + {"MAC Multi Step 9[mpm]", &test_mac_multiStep_algo_mpm}, + {"MAC Multi Step 10[mpz]", &test_mac_multiStep_algo_mpz}, + {"MAC Multi Step 11[mpp]", &test_mac_multiStep_algo_mpp}, + {"MAC Multi Step 12[mpq]", &test_mac_multiStep_algo_mpq}, + {"MAC Multi Step 13[mqm]", &test_mac_multiStep_algo_mqm}, + {"MAC Multi Step 14[mqz]", &test_mac_multiStep_algo_mqz}, + {"MAC Multi Step 15[mqp]", &test_mac_multiStep_algo_mqp}, + {"MAC Multi Step 16[mqq]", &test_mac_multiStep_algo_mqq}, + {"MAC Multi Step 17[zmm]", &test_mac_multiStep_algo_zmm}, + {"MAC Multi Step 18[zmz]", &test_mac_multiStep_algo_zmz}, + {"MAC Multi Step 19[zmp]", &test_mac_multiStep_algo_zmp}, + {"MAC Multi Step 20[zmq]", &test_mac_multiStep_algo_zmq}, + {"MAC Multi Step 21[zzm]", &test_mac_multiStep_algo_zzm}, + {"MAC Multi Step 22[zzz]", &test_mac_multiStep_algo_zzz}, + {"MAC Multi Step 23[zzp]", &test_mac_multiStep_algo_zzp}, + {"MAC Multi Step 24[zzq]", &test_mac_multiStep_algo_zzq}, + {"MAC Multi Step 25[zpm]", &test_mac_multiStep_algo_zpm}, + {"MAC Multi Step 26[zpz]", &test_mac_multiStep_algo_zpz}, + {"MAC Multi Step 27[zpp]", &test_mac_multiStep_algo_zpp}, + {"MAC Multi Step 28[zpq]", &test_mac_multiStep_algo_zpq}, + {"MAC Multi Step 29[zqm]", &test_mac_multiStep_algo_zqm}, + {"MAC Multi Step 30[zqz]", &test_mac_multiStep_algo_zqz}, + {"MAC Multi Step 31[zqp]", &test_mac_multiStep_algo_zqp}, + {"MAC Multi Step 32[zqq]", &test_mac_multiStep_algo_zqq}, + {"MAC Multi Step 33[pmm]", &test_mac_multiStep_algo_pmm}, + {"MAC Multi Step 34[pmz]", &test_mac_multiStep_algo_pmz}, + {"MAC Multi Step 35[pmp]", &test_mac_multiStep_algo_pmp}, + {"MAC Multi Step 36[pmq]", &test_mac_multiStep_algo_pmq}, + {"MAC Multi Step 37[pzm]", &test_mac_multiStep_algo_pzm}, + {"MAC Multi Step 38[pzz]", &test_mac_multiStep_algo_pzz}, + {"MAC Multi Step 39[pzp]", &test_mac_multiStep_algo_pzp}, + {"MAC Multi Step 40[pzq]", &test_mac_multiStep_algo_pzq}, + {"MAC Multi Step 41[ppm]", &test_mac_multiStep_algo_ppm}, + {"MAC Multi Step 42[ppz]", &test_mac_multiStep_algo_ppz}, + {"MAC Multi Step 43[ppp]", &test_mac_multiStep_algo_ppp}, + {"MAC Multi Step 44[ppq]", &test_mac_multiStep_algo_ppq}, + {"MAC Multi Step 45[pqm]", &test_mac_multiStep_algo_pqm}, + {"MAC Multi Step 46[pqz]", &test_mac_multiStep_algo_pqz}, + {"MAC Multi Step 47[pqp]", &test_mac_multiStep_algo_pqp}, + {"MAC Multi Step 48[pqq]", &test_mac_multiStep_algo_pqq}, + {"MAC Multi Step 49[qmm]", &test_mac_multiStep_algo_qmm}, + {"MAC Multi Step 50[qmz]", &test_mac_multiStep_algo_qmz}, + {"MAC Multi Step 51[qmp]", &test_mac_multiStep_algo_qmp}, + {"MAC Multi Step 52[qmq]", &test_mac_multiStep_algo_qmq}, + {"MAC Multi Step 53[qzm]", &test_mac_multiStep_algo_qzm}, + {"MAC Multi Step 54[qzz]", &test_mac_multiStep_algo_qzz}, + {"MAC Multi Step 55[qzp]", &test_mac_multiStep_algo_qzp}, + {"MAC Multi Step 56[qzq]", &test_mac_multiStep_algo_qzq}, + {"MAC Multi Step 57[qpm]", &test_mac_multiStep_algo_qpm}, + {"MAC Multi Step 58[qpz]", &test_mac_multiStep_algo_qpz}, + {"MAC Multi Step 59[qpp]", &test_mac_multiStep_algo_qpp}, + {"MAC Multi Step 60[qpq]", &test_mac_multiStep_algo_qpq}, + {"MAC Multi Step 61[qqm]", &test_mac_multiStep_algo_qqm}, + {"MAC Multi Step 62[qqz]", &test_mac_multiStep_algo_qqz}, + {"MAC Multi Step 63[qqp]", &test_mac_multiStep_algo_qqp}, + {"MAC Multi Step 64[qqq]", &test_mac_multiStep_algo_qqq}, + {"Close Host Session", &test_session_close_host}, + + {NULL, NULL}, +}; + +/* ***************************************************************************************************************** + * Public Functions + * ***************************************************************************************************************** */ + +int main(int argc, const char *argv[]) +{ + int ret = 0; + sss_status_t status = kStatus_SSS_Fail; + const TestFunction_t *pTF = NULL; + userCtx_t userCtx; + userCtx_t *pUserCtx = &userCtx; + for (pTF = &test_functions[0]; pTF->name != NULL; pTF++) { + printf("\n"); + LOG_W("########################################################"); + LOG_W("# Running: %-43s #", pTF->name); + status = pTF->fpTestFunction(pUserCtx); + if (status != kStatus_SSS_Success) { + LOG_E("Failed."); + break; + } + else { + LOG_I("Success!"); + } + } + + return ret; +} + + + +/* ***************************************************************************************************************** + * Private Functions + * ***************************************************************************************************************** */ +static sss_status_t test_session_open_host(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_type_t subsystem; + + // Must be software only. + subsystem = kType_SSS_Software; + + status = sss_host_session_open(&pUserCtx->session, + subsystem, + 0, + kSSS_ConnectionType_Plain, + TEST_ROOT_FOLDER); + if (status != kStatus_SSS_Success) + { + LOG_E("User Session Open Failed!!!"); + } + + + return status; +} + +static sss_status_t test_session_close_host(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Success; + sss_host_session_close(&pUserCtx->session); + return status; +} + +static sss_status_t test_Init_keyStore_keyObject(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + + status = sss_host_key_store_context_init(&pUserCtx->ks, &pUserCtx->session); + if (status != kStatus_SSS_Success) + { + LOG_E("User key_store_context_init Failed!!!"); + goto exit; + } + status = sss_host_key_store_allocate(&pUserCtx->ks, __LINE__); + if (status != kStatus_SSS_Success) + { + LOG_E("User key_store_allocate Failed!!!"); + goto exit; + } + status = sss_host_key_object_init(&pUserCtx->key, &pUserCtx->ks); + if (status != kStatus_SSS_Success) + { + LOG_E("User key_object Failed!!!"); + goto exit; + } +exit: + sss_host_key_object_free(&pUserCtx->key); + sss_host_key_store_context_free(&pUserCtx->ks); + return status; +} + +static sss_status_t test_get_random_number(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + uint8_t rndData[32] = { 0 }; + size_t rndDataLen = sizeof(rndData); + + status = sss_host_rng_context_init(&pUserCtx->rng, &pUserCtx->session); + if (status != kStatus_SSS_Success) + { + LOG_E("User rng_context_init Failed!!!"); + goto exit; + } + + status = sss_host_rng_get_random(&pUserCtx->rng, rndData, rndDataLen); + if (status != kStatus_SSS_Success) + { + LOG_E("User rng_get_random Failed!!!"); + goto exit; + } + LOG_AU8_I(rndData, rndDataLen); + sss_host_rng_context_free(&pUserCtx->rng); + +exit: + return status; +} + +static sss_status_t test_aes_cbc_encrypt_algo_TC1(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_mode_t mode = kMode_SSS_Encrypt; + /* clang-format off */ + const uint8_t srcData[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ + uint8_t expectedData[16] = { 0x32, 0xA6, 0x04, 0x88, 0xC5, 0xB3, 0xFF, 0x40, 0x50, 0xAF, 0x56, 0xA5, 0x68, 0xAE, 0xD1, 0x05 }; + /* clang-format on */ + uint8_t destData[16] = { 0, }; + size_t destDataLen = sizeof(destData); + size_t srcDataLen = sizeof(srcData); + status = test_cbc_encdec_algo(pUserCtx, + expectedData, + mode, + srcData, + srcDataLen, + destData, + destDataLen + ); + return status; +} + +static sss_status_t test_aes_cbc_encrypt_algo_TC2(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_mode_t mode = kMode_SSS_Encrypt; + /* clang-format off */ + const uint8_t srcData[] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31, + 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; + uint8_t expectedData[32] = { 0x32,0xA6,0x04,0x88,0xC5,0xB3,0xFF,0x40,0x50,0xAF,0x56,0xA5,0x68,0xAE,0xD1,0x05,0x90, + 0xCF,0x97,0xC3,0xCD,0x9E,0xC0,0x70,0x02,0xAD,0x9C,0x04,0x1B,0x90,0x3A,0x64 }; + /* clang-format on */ + size_t srcDataLen = sizeof(srcData); + uint8_t destData[32] = { 0, }; + size_t destDataLen = sizeof(destData); + status = test_cbc_encdec_algo(pUserCtx, + expectedData, + mode, + srcData, + srcDataLen, + destData, + destDataLen + ); + return status; +} + +static sss_status_t test_aes_cbc_decrypt_algo_TC1(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_mode_t mode = kMode_SSS_Decrypt; + /* clang-format off */ + const uint8_t srcData[16] = { 0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; /*HELLOHELLOHELLO1*/ + uint8_t expectedData[16] = { 0x33, 0x34, 0x9A, 0x07, 0xEA, 0x1C, 0xF6, 0xAC, 0x7F, 0x35, 0x00, 0x9A, 0x22, 0xBC, 0x8A, 0x16 }; + /* clang-format on */ + size_t srcDataLen = sizeof(srcData); + + uint8_t destData[16] = { 0, }; + size_t destDataLen = sizeof(destData); + + status = test_cbc_encdec_algo(pUserCtx, + expectedData, + mode, + srcData, + srcDataLen, + destData, + destDataLen + ); + return status; + +} +static sss_status_t test_aes_cbc_decrypt_algo_TC2(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_mode_t mode = kMode_SSS_Decrypt; + /* clang-format off */ + const uint8_t srcData[32] = { 0x48,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31, + 0x48,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x48 ,0x45 ,0x4c ,0x4c ,0x4f ,0x31 }; + uint8_t expectedData[32] = { 0x33,0x34,0x9A,0x07,0xEA,0x1C,0xF6,0xAC,0x7F,0x35,0x00,0x9A,0x22,0xBC,0x8A, + 0x16,0x7B,0x71,0xD6,0x4B,0xA5,0x54,0xB3,0xE0,0x33,0x7A,0x48,0xDF,0x6E,0xF0,0xC5,0x27 }; + /* clang-format on */ + size_t srcDataLen = sizeof(srcData); + + uint8_t destData[32] = { 0, }; + size_t destDataLen = sizeof(destData); + + status = test_cbc_encdec_algo(pUserCtx, + expectedData, + mode, + srcData, + srcDataLen, + destData, + destDataLen + ); + return status; + +} + +static sss_status_t test_cbc_encdec_algo(userCtx_t *pUserCtx, + const uint8_t* expectedData, + sss_mode_t mode, + const uint8_t* srcData, + size_t srcDataLen, + uint8_t* destData, + size_t destDataLen + ) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_algorithm_t algorithm = kAlgorithm_SSS_AES_CBC; + sss_key_part_t keyPart = kSSS_KeyPart_Default; + sss_cipher_type_t cipherType = kSSS_CipherType_AES; + + uint8_t iv[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + size_t ivlen = sizeof(iv); + uint8_t count = 0; + + status = sss_host_key_object_allocate_handle(&pUserCtx->key, + __LINE__, + keyPart, + cipherType, + 16, + kKeyObject_Mode_Transient); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_object_allocate_handle Failed!!!"); + goto exit; + } + + status = sss_host_key_store_set_key(&pUserCtx->ks, + &pUserCtx->key, + AES_key, + sizeof(AES_key), + sizeof(AES_key) * 8, + NULL, + 0); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_set_key Failed!!!"); + goto exit; + } + + status = sss_host_symmetric_context_init( + &pUserCtx->symm, &pUserCtx->session, &pUserCtx->key, algorithm, mode); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_symmetric_context_init Failed!!!"); + goto exit; + } + + status = sss_host_cipher_one_go( + &pUserCtx->symm, iv, ivlen, srcData, destData, destDataLen); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_cipher_one_go Failed!!!"); + goto exit; + } + LOG_AU8_I(destData, destDataLen); + for (count = 0;count < destDataLen;count++) + { + if (destData[count] != expectedData[count]) + { + LOG_E("Crypto results are wrong cipher_one_go !!!"); + status = kStatus_SSS_Fail; + break; + } + } + +exit: + sss_host_key_object_free(&pUserCtx->key); + sss_host_symmetric_context_free(&pUserCtx->symm); + sss_host_key_store_context_free(&pUserCtx->ks); + return status; + +} + + + +sss_status_t test_mac_one_go_algo(userCtx_t *pUserCtx) +{ + sss_status_t status = kStatus_SSS_Fail; + sss_key_part_t keyPart = kSSS_KeyPart_Default; + sss_cipher_type_t cipherType = kSSS_CipherType_AES; + sss_algorithm_t algorithm = kAlgorithm_SSS_CMAC_AES; + sss_mode_t mode = kMode_SSS_Mac; + /* clang-format off */ + const uint8_t srcData[] = { 0x6b,0xc1,0xbe,0xe2,0x2e,0x40,0x9f,0x96,0xe9,0x3d,0x7e,0x11,0x73,0x93,0x17,0x2a }; + const uint8_t keystring[] = { 0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c }; + const uint8_t expectedData[] = { 0x07,0x0a,0x16,0xb4,0x6b,0x4d,0x41,0x44,0xf7,0x9b,0xdd,0x9d,0xd0,0x4a,0x28,0x7c }; + uint8_t outdata[256]; + size_t outdatLen = sizeof(outdata); + uint8_t count = 0; + /* clang-format on */ + + status = sss_host_key_object_allocate_handle(&pUserCtx->key, + __LINE__, + keyPart, + cipherType, + 16, + kKeyObject_Mode_Transient); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_key_object_alloc_mac_one_go Failed!!!"); + goto exit; + } + + status = sss_host_key_store_set_key(&pUserCtx->ks, + &pUserCtx->key, + keystring, + sizeof(keystring), + sizeof(keystring) * 8, + NULL, + 0); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_set_key_mac_one_go Failed!!!"); + goto exit; + } + + status = sss_host_mac_context_init( + &pUserCtx->mac, &pUserCtx->session, &pUserCtx->key, algorithm, mode); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_init Failed !!!"); + goto exit; + } + + status = sss_host_mac_one_go( + &pUserCtx->mac, srcData, sizeof(srcData), outdata, &outdatLen); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_one_go Failed!!!"); + goto exit; + } + + LOG_AU8_I(outdata, outdatLen); + for (count = 0;count < outdatLen;count++) + { + if (outdata[count] != expectedData[count]) + { + LOG_E("Crypto results are wrong mac_one_go !!!"); + status = kStatus_SSS_Fail; + break; + } + } + +exit: + sss_host_key_object_free(&pUserCtx->key); + sss_host_mac_context_free(&pUserCtx->mac); + sss_host_key_store_context_free(&pUserCtx->ks); + return status; + +}
diff --git a/demos/test_Crypto/test_Crypto.h b/demos/test_Crypto/test_Crypto.h new file mode 100644 index 0000000..6675304 --- /dev/null +++ b/demos/test_Crypto/test_Crypto.h
@@ -0,0 +1,28 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef TST_CRYPTO_H_INC +#define TST_CRYPTO_H_INC +#include <stdio.h> +#include <string.h> + +#include "fsl_sss_api.h" +#include "fsl_sss_user_apis.h" +#include "fsl_sss_mbedtls_apis.h" +#include "fsl_sss_openssl_apis.h" +#include "nxLog_App.h" + +typedef struct userCtx +{ + sss_session_t session; + sss_key_store_t ks; + sss_object_t key; + sss_rng_context_t rng; + sss_symmetric_t symm; + sss_mac_t mac; +} userCtx_t; + +#endif
diff --git a/demos/test_Crypto/test_mac_multiStep.c b/demos/test_Crypto/test_mac_multiStep.c new file mode 100644 index 0000000..34465c8 --- /dev/null +++ b/demos/test_Crypto/test_mac_multiStep.c
@@ -0,0 +1,1053 @@ +/* + * Copyright 2020 NXP + * + * SPDX-License-Identifier: Apache-2.0 + */ + + +#include "test_Crypto.h" + +#define MAC_BLOCK_SIZE 16 + +/* clang-format off */ +const uint8_t gSRCData1[MAC_BLOCK_SIZE] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; +const uint8_t gSRCData2[] = { + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1,0x49, + 0x84,0x82,0x33,0x00,0x10,0xB3,0x60,0x8B,0x7A,0x4C,0xC3,0xA1, +}; +const uint8_t srcData3[] = { + 0x84, 0x01, 0x03, 0x00, 0x28, 0x82, 0x7B, 0x9B, 0xBD, 0x3F, 0xDC, 0x41, 0x8C, 0x46, 0xBB, 0x42, 0xD4, 0x9A, 0x32, 0xC7, 0x0C, 0x0F, + 0x52, 0xB8, 0x6B, 0x24, 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0x52, 0xB8, 0x6B, 0x24, 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0x52, 0xB8, 0x6B, 0x24, 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, 11, 1,2,3,4,5, + 0x52, 0xB8, 0x6B, 0x24, 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0x03, 0x61, 0x5E, 0x97, 0xA6, 0xDD, 0x8C, 0x18 }; +const uint8_t srcData4[] = { + 0x28, 0x82, 0x7B, 0x9B, 0xBD, 0x3F, 0xDC, 0x41, 0x8C, 0x46, 0xBB, 0x42, 0xD4, 0x9A, 0x32, 0xC7, 0x0C, 0x0F, + 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, 11, 1,2,3,4,5, + 0x13, 0x73, 0xFF, 1,2,3,4,5,6,6,7,8,9,0,1,2,3,4,5,6,7,9, 10, + 0xA6, 0xDD, 0x8C, 0x18 }; + +const uint8_t keystring[MAC_BLOCK_SIZE] = { 0xB3,0x35,0xFB,0xB5,0x14,0x00,0xB8,0x0B,0xB3,0x9B,0xE1,0xBF,0xD9,0x32,0x78,0x8C }; +/* clang-format on */ + +static sss_status_t test_mac_multiStep_algo(userCtx_t *pUserCtx, + const uint8_t expectedData[MAC_BLOCK_SIZE], + const uint16_t srcData1Len, + const uint16_t srcData2Len, + const uint16_t srcData3Len, + const uint16_t srcData4Len +); + + + + + +sss_status_t test_mac_multiStep_algo_mmm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x90,0xFA,0x63,0x22,0x11,0x9D,0x60,0xDB,0x82,0x9D,0xC7,0xCF,0xC3,0x98,0x35,0x6C,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mmz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xF5,0x89,0x46,0x96,0x10,0x1B,0x57,0x37,0xD1,0xC5,0x62,0x16,0x9D,0xFF,0x88,0x03,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mmp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xD1,0x05,0x5E,0xF8,0x98,0xFF,0x74,0xF0,0xFC,0x44,0x79,0xE5,0xD9,0x52,0x34,0xEE,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mmq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x6C,0xEB,0x44,0x3F,0xAF,0x8D,0x21,0x78,0x08,0xD0,0x7B,0xC8,0xF0,0x16,0x03,0x4B,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mzm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xC0,0x80,0xB8,0x40,0x88,0xC4,0x0E,0x98,0x24,0xA8,0x93,0xD0,0xA1,0xC9,0xD1,0x29,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mzz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x10,0xEF,0xEE,0x75,0xFD,0xE7,0xDF,0xD9,0x45,0xE5,0x98,0xE3,0x31,0x34,0xF8,0x6A,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mzp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0xD4,0xB0,0xD8,0x39,0x31,0x07,0x78,0xD2,0x9D,0x51,0x2D,0x97,0x6B,0x05,0x07,0xC2,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mzq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x06,0xD2,0xB2,0x05,0x6F,0x6C,0x6C,0x44,0xF6,0xDD,0x51,0x9A,0x0D,0x7B,0x33,0x47,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mpm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0xB6,0xE3,0x43,0x83,0xC1,0x33,0x4B,0x07,0xD8,0x3C,0xB4,0xDA,0xC2,0x7F,0xB1,0x56,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mpz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + { 0x2C,0x86,0x75,0x84,0xD7,0x25,0x75,0x56,0x5A,0xE3,0xDA,0x8A,0x76,0xD5,0x20,0x78, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mpp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x29,0x34,0xF6,0xE5,0xC5,0x1D,0x99,0xC6,0xB7,0x39,0x71,0xC9,0xAC,0x06,0xD1,0x35, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mpq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x71,0x12,0x09,0x62,0x81,0x25,0x54,0xF4,0x7B,0x09,0x1F,0xB9,0xE6,0x23,0x7E,0x3D,}; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mqm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x8D,0xF2,0x84,0xE5,0x30,0xA0,0x1A,0x01,0xDF,0x84,0x6E,0x88,0xB1,0x6C,0xC2,0x50,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mqz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + { 0x80,0x5C,0xD9,0xBB,0x9E,0x6F,0xBB,0x98,0x1C,0xF1,0x7C,0x89,0x6B,0x05,0x86,0x73, }; + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mqp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x6E,0xCC,0x06,0xED,0xC9,0x55,0xED,0xC6,0xA1,0x41,0x0A,0xE2,0xB7,0xF5,0x9E,0x82,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_mqq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x5E,0xDC,0x15,0x66,0xE0,0x67,0x89,0xF8,0x2C,0x2A,0xC3,0xC4,0x53,0xC1,0x1C,0x01,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zmm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xD7,0xE2,0x26,0x83,0xC6,0xC5,0x35,0xD0,0xEE,0x7D,0xB0,0x12,0x49,0xF0,0x54,0x10,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zmz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + { 0xC8,0xDC,0xC5,0xBC,0x31,0x3D,0x7F,0x8F,0xA1,0x76,0x47,0xF1,0xBD,0xED,0xFF,0xCE, }; + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zmp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xCA,0x15,0xFF,0x1B,0xE1,0x2A,0xAC,0x2C,0xF5,0x8E,0x57,0x3B,0x7B,0x18,0x27,0x63, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zmq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x51,0x71,0x68,0xAE,0x0D,0x71,0x00,0x38,0x25,0x90,0xD4,0x20,0x6C,0xDA,0x4C,0xBE, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zzm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x15,0x5D,0xF8,0x66,0x68,0xD8,0x48,0xB9,0x6C,0x32,0x41,0x34,0x1B,0x59,0x2A,0x62, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zzz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x59,0x3D,0x3F,0x51,0x75,0xED,0x59,0x17,0xF4,0x2D,0x1F,0xEF,0x9F,0x52,0xBF,0x53, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zzp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x9A,0xB9,0xCB,0xE5,0x79,0x50,0xF3,0x78,0x66,0xCF,0x6E,0x4A,0xA5,0x77,0x50,0x1F, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zzq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xAB,0xA8,0x71,0x31,0xAC,0x2A,0x1A,0x1A,0xA6,0x5A,0x32,0xEB,0x51,0x64,0x1F,0x29, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zpm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x72,0xCF,0xEB,0xC5,0x5E,0xA0,0xD9,0x36,0x53,0xB6,0x8F,0xF7,0x7E,0xD8,0x75,0xE0, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zpz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xB0,0x50,0x69,0x02,0x73,0x9D,0x0A,0x73,0x46,0x15,0xC7,0x76,0xC7,0x25,0x25,0xEF, }; + + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zpp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xF0,0x26,0xF3,0xEF,0xAE,0x80,0x65,0xE5,0x45,0x23,0xF0,0xF6,0xBC,0xD0,0x7D,0x54, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zpq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x78,0x31,0x80,0x6A,0xEE,0xC4,0xE5,0x22,0x08,0x03,0xE6,0x1C,0x80,0x96,0xBB,0x8F, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zqm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x52,0xD2,0x2B,0x58,0xC9,0x90,0xDA,0xA0,0x85,0x9B,0x98,0xE2,0x23,0xB8,0xF6,0x0B, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zqz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xC5,0x75,0xC5,0x03,0x9F,0x31,0xDF,0x67,0xCF,0x05,0xCB,0xE3,0xD4,0x9D,0x5E,0x08, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zqp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x33,0x94,0xBA,0x46,0xFF,0x8E,0x5E,0x82,0xB2,0xFF,0x7A,0xCB,0xBA,0x27,0x85,0x57, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_zqq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x3A,0x98,0x00,0xFF,0x90,0x63,0x90,0x16,0x41,0xB8,0xFF,0x2B,0xF9,0x30,0xB5,0xE1, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pmm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x42,0xF5,0x9A,0x2B,0x3A,0xC6,0x85,0x87,0x8F,0xE4,0x46,0x03,0x94,0x3D,0x5D,0xF7, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pmz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x2F,0xB3,0x72,0xAE,0x9E,0xC3,0x41,0xE9,0x6F,0x35,0x67,0xB8,0xB3,0x0A,0x4C,0x4B, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pmp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xDE,0x6B,0x4C,0xC8,0x39,0xDB,0xDB,0xE4,0x65,0x9B,0x5A,0x2A,0x9F,0x7D,0xA5,0xA2, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pmq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xE6,0x0B,0x48,0x5A,0x7E,0xB6,0xC0,0x48,0xA9,0xA6,0xCE,0xE5,0x1D,0x16,0x8B,0xD3, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pzm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xBB,0xA4,0x76,0x83,0x2B,0xEA,0xEA,0x7D,0x4D,0x77,0x0D,0x07,0x19,0xC5,0x87,0x3D, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pzz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0x38,0x11,0x1B,0xD9,0xF1,0x4D,0x07,0x33,0x28,0xCB,0xB3,0x93,0x95,0xBC,0x69,0x98, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pzp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xD7,0xE0,0x43,0x16,0x1E,0x42,0x6B,0x81,0x97,0x4E,0xFC,0x0E,0x39,0xD5,0xAC,0xB8, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pzq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xE5,0xC8,0xF3,0x69,0xBB,0x35,0x95,0xE1,0x8B,0xCD,0x8F,0x93,0x26,0xD2,0x27,0x10, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_ppm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xE9,0xCC,0x28,0x02,0x30,0x54,0xA0,0x0C,0x08,0x21,0x2E,0xB7,0x9F,0x71,0x94,0xEF, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_ppz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xD0,0x8C,0x24,0x0E,0x7F,0x70,0x34,0x77,0x63,0xE7,0x76,0xF8,0xB2,0xAD,0xF4,0x87, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_ppp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0xE4,0xDF,0x2B,0x4B,0xB7,0x24,0xA5,0x7D,0xA5,0x31,0xB2,0x2D,0x82,0x71,0x66,0xFE,}; +; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_ppq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = {0x17,0xC6,0x24,0xD0,0x4C,0x3C,0x08,0x1C,0x26,0xEB,0x18,0x79,0xFC,0x8E,0x17,0x53,}; +; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pqm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + { 0x9E,0xC2,0x0A,0xE5,0x5C,0xC1,0x90,0xA2,0xE6,0x23,0xD4,0x1E,0xFB,0x5D,0x98,0x32, }; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pqz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = { 0xE7,0x6A,0xA2,0xC1,0xDE,0x97,0xDE,0x0F,0x09,0x61,0xD0,0xA2,0x40,0xBC,0x8E,0x6D, };; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pqp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x0F,0x45,0x6C,0x7F,0x52,0xFE,0xDB,0xF7,0xE8,0x45,0x0C,0x9D,0xA7,0x35,0x24,0x7A,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_pqq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x7F,0x49,0xE2,0x54,0xE5,0xA1,0x82,0xDD,0x5E,0xC3,0xC1,0x1B,0x48,0xD3,0x16,0x27,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qmm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x5D,0x5C,0x78,0x11,0x8F,0x14,0x65,0xC3,0xC7,0x61,0xE7,0x3B,0x84,0xF6,0xCE,0xCE,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qmz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x4A,0x71,0xA4,0xE5,0x8D,0xD0,0xA0,0x66,0xDE,0x31,0xB2,0xE7,0xAD,0xB8,0xD9,0xF6,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qmp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x51,0x6A,0xBE,0xEB,0x00,0x86,0xDE,0xB6,0xAC,0x89,0x9A,0x9F,0x87,0xE9,0x62,0x86,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qmq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x78,0x14,0x6B,0xA9,0x06,0xFC,0x66,0x36,0xDC,0x43,0xD0,0x97,0x2B,0xDF,0x1D,0xEF,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qzm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x37,0xCA,0xAD,0xE1,0xE4,0x2A,0x93,0xC6,0xB6,0x84,0xE6,0xA4,0xF3,0x4D,0x56,0x9D,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qzz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xB6,0x4F,0x1A,0x86,0xF8,0xFA,0x78,0x19,0xE0,0x7B,0xB3,0x22,0x27,0x9F,0xF5,0xED,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qzp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xC0,0x33,0xDA,0xA7,0x1B,0xD6,0xA1,0x9B,0x2F,0x9E,0x42,0x2C,0x55,0x45,0xE3,0xE4,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qzq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x33,0x18,0xE9,0x1D,0xDD,0x67,0xDF,0x78,0xAB,0xB2,0xE0,0x81,0xA0,0xAF,0xC2,0x78,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4), + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qpm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x20,0x2C,0x59,0x8B,0x5F,0xFD,0xBB,0x3D,0x8B,0xC7,0x21,0x2F,0x2A,0x74,0xF3,0xC2,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qpz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x84,0x2C,0xBC,0xD2,0x1A,0xEB,0xD3,0xF4,0xA6,0xCF,0x3D,0xD7,0xAF,0xDF,0xF7,0xB9,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qpp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x1B,0x08,0xEE,0x62,0x89,0xDA,0x5E,0x57,0x87,0x20,0xE2,0x5D,0x85,0x8C,0x7E,0xB4,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qpq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xCB,0xE6,0xF2,0x93,0x55,0x14,0xFA,0x5C,0x44,0x49,0xDB,0x55,0x82,0x43,0xFE,0x7E,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qqm(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x6E,0xD0,0x7C,0x27,0x21,0x48,0x25,0x41,0xC4,0xCD,0xEE,0x53,0x9B,0x3F,0xC9,0x95,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) - 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qqz(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x4D,0x4C,0x25,0x1E,0x6D,0x0D,0xC3,0x81,0x98,0x5B,0xEC,0xC7,0x10,0x5F,0xE7,0xD4,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4)); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qqp(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0x6D,0x5D,0xF5,0x9F,0x0B,0xC1,0x67,0xBC,0xF3,0x70,0x95,0x9B,0x91,0x08,0x2B,0x64,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) + 1); + return status; +} + + +sss_status_t test_mac_multiStep_algo_qqq(userCtx_t *pUserCtx) { + sss_status_t status; + const uint8_t expectedData[MAC_BLOCK_SIZE] = + {0xB8,0xE0,0x0B,0x59,0xAC,0x33,0xAE,0x74,0xAF,0x09,0x30,0xC0,0x2A,0xFC,0xF3,0x11,}; + + status = test_mac_multiStep_algo(pUserCtx, expectedData, + MAC_BLOCK_SIZE, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0, + (MAC_BLOCK_SIZE * 4) * 0); + return status; +} + + + +static sss_status_t test_mac_multiStep_algo(userCtx_t *pUserCtx, + const uint8_t expectedData[MAC_BLOCK_SIZE], + const uint16_t srcData1Len, + const uint16_t srcData2Len, + const uint16_t srcData3Len, + const uint16_t srcData4Len + ) +{ + sss_status_t status; + uint8_t outdata[256] = { 0 }; + size_t outdatLen = sizeof(outdata); + uint8_t count = 0; + + sss_algorithm_t algorithm = kAlgorithm_SSS_CMAC_AES; + sss_mode_t mode = kMode_SSS_Mac; + + status = sss_host_key_object_allocate_handle(&pUserCtx->key, + __LINE__, + kSSS_KeyPart_Default, + kSSS_CipherType_CMAC, + 16, + kKeyObject_Mode_Transient); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_key_object_alloc_mac_multiStep Failed!!!"); + goto exit; + } + + status = sss_host_key_store_set_key(&pUserCtx->ks, + &pUserCtx->key, + keystring, + sizeof(keystring), + sizeof(keystring) * 8, + NULL, + 0); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_set_key_mac_multiStep Failed!!!"); + goto exit; + } + + status = sss_host_mac_context_init( + &pUserCtx->mac, &pUserCtx->session, &pUserCtx->key, algorithm, mode); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_context_init_multiStep Failed!!!"); + goto exit; + } + + status = sss_host_mac_init(&pUserCtx->mac); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_init_multiStep Failed!!!"); + goto exit; + } + + if (srcData1Len > 0) { + status = sss_host_mac_update(&pUserCtx->mac, gSRCData1, srcData1Len); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_update_multiStep step1 Failed!!!"); + goto exit; + } + } + + + if (srcData2Len > 0) { + status = sss_host_mac_update(&pUserCtx->mac, gSRCData2, srcData2Len); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_update_multiStep step2 Failed!!!"); + goto exit; + } + } + + if (srcData3Len > 0) { + status = sss_host_mac_update(&pUserCtx->mac, srcData3, srcData3Len); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_update_multiStep step2 Failed!!!"); + goto exit; + } + } + if (srcData4Len > 0) { + status = sss_host_mac_update(&pUserCtx->mac, srcData4, srcData4Len); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_update_multiStep step2 Failed!!!"); + goto exit; + } + } + status = sss_host_mac_finish(&pUserCtx->mac, outdata, &outdatLen); + if (status != kStatus_SSS_Success) + { + LOG_E("Userkey_mac_finish_multiStep Failed!!!"); + goto exit; + } + LOG_AU8_I(outdata, outdatLen); + for (count = 0;count < outdatLen;count++) + { + if (outdata[count] != expectedData[count]) + { + LOG_E("Crypto results are wrong mac_multiStep !!!"); + LOG_MAU8_E("Expected", expectedData, MAC_BLOCK_SIZE); + printf("\n {"); + for (size_t i = 0; i < outdatLen; i++) { + printf("0x%02X,", outdata[i]); + } + printf("};\n\n"); + //LOG_MAU8_E("Got", outdata, outdatLen); + status = kStatus_SSS_Fail; + break; + } + } + +#if 0 + // sss_host_key_object_free(&pUserCtx->key); + sss_host_mac_context_free(&pUserCtx->mac); + status = sss_host_mac_context_init( + &pUserCtx->mac, &pUserCtx->session, &pUserCtx->key, algorithm, mode); + status = sss_host_mac_init(&pUserCtx->mac); + status = sss_host_mac_update(&pUserCtx->mac, expectedData, 16); + status = sss_host_mac_update(&pUserCtx->mac, srcData3, srcData3Len); + sss_host_mac_finish(&pUserCtx->mac, outdata, &outdatLen); +#endif + +exit: + sss_host_key_object_free(&pUserCtx->key); + sss_host_mac_context_free(&pUserCtx->mac); + sss_host_key_store_context_free(&pUserCtx->ks); + return status; +}
diff --git a/demos/version_info.txt b/demos/version_info.txt new file mode 100644 index 0000000..c3c2a37 --- /dev/null +++ b/demos/version_info.txt
@@ -0,0 +1,20 @@ + + +prod_name = "PlugAndTrust_DEMO" + +prod_desc = "Plug And Trust Demos" + +lang_c_prefix = prod_name.upper() + +lang_namespace = "" + +v_major = "02" + +v_minor = "17" + +v_dev = "00" + +v_meta = "" + +maturity = "B" +
diff --git a/doc/_images/0010_2clients_none.png b/doc/_images/0010_2clients_none.png new file mode 100644 index 0000000..57794f0 --- /dev/null +++ b/doc/_images/0010_2clients_none.png Binary files differ
diff --git a/doc/_images/0020_flow_with_signature.png b/doc/_images/0020_flow_with_signature.png new file mode 100644 index 0000000..cd461fa --- /dev/null +++ b/doc/_images/0020_flow_with_signature.png Binary files differ
diff --git a/doc/_images/0022_flow_api_success.png b/doc/_images/0022_flow_api_success.png new file mode 100644 index 0000000..19eacaf --- /dev/null +++ b/doc/_images/0022_flow_api_success.png Binary files differ
diff --git a/doc/_images/0025_flow_api_recovery.png b/doc/_images/0025_flow_api_recovery.png new file mode 100644 index 0000000..26644ac --- /dev/null +++ b/doc/_images/0025_flow_api_recovery.png Binary files differ
diff --git a/doc/_images/0030_flow_apis_recovery_detection_scenario1.png b/doc/_images/0030_flow_apis_recovery_detection_scenario1.png new file mode 100644 index 0000000..63f5e37 --- /dev/null +++ b/doc/_images/0030_flow_apis_recovery_detection_scenario1.png Binary files differ
diff --git a/doc/_images/0030_flow_apis_recovery_detection_scenario2.png b/doc/_images/0030_flow_apis_recovery_detection_scenario2.png new file mode 100644 index 0000000..b11c51d --- /dev/null +++ b/doc/_images/0030_flow_apis_recovery_detection_scenario2.png Binary files differ
diff --git a/doc/_images/0041_flow_recovery_tear.png b/doc/_images/0041_flow_recovery_tear.png new file mode 100644 index 0000000..dac700a --- /dev/null +++ b/doc/_images/0041_flow_recovery_tear.png Binary files differ
diff --git a/doc/_images/0050_flow_unexpected_power_off.png b/doc/_images/0050_flow_unexpected_power_off.png new file mode 100644 index 0000000..ec0e0d0 --- /dev/null +++ b/doc/_images/0050_flow_unexpected_power_off.png Binary files differ
diff --git a/doc/_images/55sRC663.jpg b/doc/_images/55sRC663.jpg new file mode 100644 index 0000000..0db8a85 --- /dev/null +++ b/doc/_images/55sRC663.jpg Binary files differ
diff --git a/doc/_images/55sSe050.jpg b/doc/_images/55sSe050.jpg new file mode 100644 index 0000000..ae50f61 --- /dev/null +++ b/doc/_images/55sSe050.jpg Binary files differ
diff --git a/doc/_images/A71CH_HostLib_SW_Layers_OpenSSL.svg b/doc/_images/A71CH_HostLib_SW_Layers_OpenSSL.svg new file mode 100644 index 0000000..65cf3b3 --- /dev/null +++ b/doc/_images/A71CH_HostLib_SW_Layers_OpenSSL.svg
@@ -0,0 +1,222 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export A71CH_HostLib_SW_Layers_OpenSSL.svg HLSE --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="5.41672in" height="3.74016in" + viewBox="0 0 390.004 269.291" xml:space="preserve" color-interpolation-filters="sRGB" class="st15"> + <v:documentProperties v:langID="1033" v:viewMarkup="false"> + <v:userDefs> + <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/> + <v:ud v:nameU="msvConvertTheme"/> + </v:userDefs> + </v:documentProperties> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#d1ebf1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {marker-end:url(#mrkr13-12);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976} + .st4 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.086948582161584} + .st5 {fill:#99ff66;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st6 {marker-end:url(#mrkr13-12);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st7 {font-size:1em} + .st8 {fill:#f59d56;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st9 {fill:none;stroke:#000000;stroke-dasharray:2.16,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st10 {fill:#000000;font-family:Arial;font-size:0.499992em} + .st11 {fill:#000000;font-family:Arial;font-size:0.666664em;font-style:italic} + .st12 {marker-end:url(#mrkr13-12);marker-start:url(#mrkr13-60);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976} + .st13 {fill:url(#grad0-75);stroke:#000000;stroke-dasharray:0,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st14 {fill:#8db1e2;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st15 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Patterns_And_Gradients"> + <linearGradient id="grad0-75" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)"> + <stop offset="0" stop-color="#f9fbfc" stop-opacity="1"/> + <stop offset="0.74" stop-color="#cfdbe9" stop-opacity="1"/> + <stop offset="0.83" stop-color="#cfdbe9" stop-opacity="1"/> + <stop offset="1" stop-color="#dfe7f0" stop-opacity="1"/> + </linearGradient> + </defs> + <defs id="Markers"> + <g id="lend13"> + <path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/> + </g> + <marker id="mrkr13-12" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="34.5032" refX="-34.503150315032" + orient="auto" markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend13" transform="scale(-11.501050105011,-11.501050105011) "/> + </marker> + <marker id="mrkr13-60" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="33.003" refX="33.00300030003" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend13" transform="scale(11.501050105011) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>OpenSSL</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Connector" v:index="0"/> + <g id="shape3-1" v:mID="3" v:groupContext="shape" transform="translate(127.559,-127.559)"> + <title>Sheet.3</title> + <desc>AX_API / A71CH_API</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="60.2362" cy="258.661" width="120.48" height="21.2598"/> + <rect x="0" y="248.031" width="120.472" height="21.2598" class="st1"/> + <text x="21.33" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>AX_API / A71CH_API</text> </g> + <g id="shape7-4" v:mID="7" v:groupContext="shape" transform="translate(127.559,-92.126)"> + <title>Sheet.7</title> + <desc>APDU</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="74.4094" cy="255.118" width="148.82" height="28.3465"/> + <rect x="0" y="240.945" width="148.819" height="28.3465" class="st1"/> + <text x="63.3" y="252.14" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>APDU</text> </g> + <g id="shape8-7" v:mID="8" v:groupContext="shape" v:layerMember="0" transform="translate(81.4961,-148.819)"> + <title>Dynamic connector</title> + <path d="M0 269.29 L0 204.57 L37.9 204.57" class="st3"/> + </g> + <g id="shape10-13" v:mID="10" v:groupContext="shape" transform="translate(127.679,-191.339)"> + <title>Sheet.10</title> + <desc>OpenSSL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="46.063" cy="255.118" width="92.13" height="28.3465"/> + <rect x="0" y="240.945" width="92.126" height="28.3465" class="st5"/> + <text x="28.72" y="252.14" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenSSL</text> </g> + <g id="shape15-16" v:mID="15" v:groupContext="shape" transform="translate(127.559,400.394) rotate(180)"> + <title>Sheet.15</title> + <path d="M0 269.29 L12.98 269.29" class="st6"/> + </g> + <g id="shape21-21" v:mID="21" v:groupContext="shape" transform="translate(318.898,-182.835)"> + <title>Sheet.21</title> + <desc>Host Library Modules</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.721" width="70.87" height="21.1398"/> + <rect x="0" y="248.151" width="70.8661" height="21.1398" class="st1"/> + <text x="13.87" y="256.32" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Host Library <tspan + x="20.31" dy="1.2em" class="st7">Modules</tspan></text> </g> + <g id="shape44-25" v:mID="44" v:groupContext="shape" transform="translate(319.018,-233.798)"> + <title>Sheet.44</title> + <desc>Applications</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="262.145" width="70.87" height="14.2932"/> + <rect x="0" y="254.998" width="70.8661" height="14.2932" class="st8"/> + <text x="13.87" y="264.54" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Applications</text> </g> + <g id="shape46-28" v:mID="46" v:groupContext="shape" transform="translate(503.27,28.3465) rotate(90)"> + <title>Sheet.46</title> + <path d="M0 269.29 L83.85 269.29" class="st6"/> + </g> + <g id="shape50-33" v:mID="50" v:groupContext="shape" transform="translate(127.559,-56.6929)"> + <title>Sheet.50</title> + <desc>SCI2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.3731" cy="258.661" width="70.75" height="21.2598"/> + <rect x="0" y="248.031" width="70.7461" height="21.2598" class="st1"/> + <text x="23.59" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SCI2C</text> </g> + <g id="shape57-36" v:mID="57" v:groupContext="shape" transform="translate(170.079,-92.126)"> + <title>Sheet.57</title> + <desc>SmCom Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="262.205" width="63.78" height="14.1732"/> + <path d="M0 269.29 L63.78 269.29 L63.78 255.12 L0 255.12 L0 269.29 Z" class="st9"/> + <text x="8.55" y="264" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SmCom Interface</text> </g> + <g id="shape61-39" v:mID="61" v:groupContext="shape" v:layerMember="0" transform="translate(193.294,-92.126)"> + <title>Dynamic connector.61</title> + <path d="M0 269.29 L-10.94 278.23" class="st3"/> + </g> + <g id="shape63-44" v:mID="63" v:groupContext="shape" transform="translate(127.559,-28.3465)"> + <title>Sheet.63</title> + <desc>I2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.3731" cy="258.661" width="70.75" height="21.2598"/> + <rect x="0" y="248.031" width="70.7461" height="21.2598" class="st5"/> + <text x="29.15" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>I2C</text> </g> + <g id="shape67-47" v:mID="67" v:groupContext="shape" transform="translate(56.6929,-127.559)"> + <title>Sheet.67</title> + <desc>HostCrypto</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="24.8031" cy="258.661" width="49.61" height="21.2598"/> + <rect x="0" y="248.031" width="49.6063" height="21.2598" class="st5"/> + <text x="4.8" y="261.06" class="st11" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HostCrypto</text> </g> + <g id="shape69-50" v:mID="69" v:groupContext="shape" transform="translate(191.459,-240.945)"> + <title>Sheet.69</title> + <desc>App_Class_2 (e.g. a71ch_Main)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="42.5197" cy="255.118" width="85.04" height="28.3465"/> + <rect x="0" y="240.945" width="85.0394" height="28.3465" class="st8"/> + <text x="9.61" y="252.72" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>App_Class_2 (e.g. <tspan + x="13.17" dy="1.2em" class="st7">a71ch_Main)</tspan></text> </g> + <g id="shape71-54" v:mID="71" v:groupContext="shape" v:layerMember="0" transform="translate(198.545,-240.945)"> + <title>Dynamic connector.71</title> + <path d="M7.09 277.21 L7.09 277.57 L7.09 282.27" class="st12"/> + </g> + <g id="shape72-62" v:mID="72" v:groupContext="shape" transform="translate(531.496,28.3465) rotate(90)"> + <title>Sheet.72</title> + <path d="M0 269.29 L112.19 269.29" class="st6"/> + </g> + <g id="shape73-67" v:mID="73" v:groupContext="shape" transform="translate(318.898,-140.315)"> + <title>Sheet.73</title> + <desc>Provided by OS or Platform Infrastructure</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="251.575" width="70.87" height="35.4331"/> + <rect x="0" y="233.858" width="70.8661" height="35.4331" class="st5"/> + <text x="7.42" y="244.37" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Provided by OS <tspan + x="15.87" dy="1.2em" class="st7">or Platform </tspan><tspan x="11.87" dy="1.2em" class="st7">Infrastructure</tspan></text> </g> + <g id="shape74-72" v:mID="74" v:groupContext="shape" transform="translate(205.512,-56.6929)"> + <title>Sheet.74</title> + <desc>smComSocket</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.661" width="70.87" height="21.2598"/> + <path d="M0 269.29 L70.87 269.29 L70.87 248.03 L0 248.03 L0 269.29 Z" class="st13"/> + <text x="4" y="261.06" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>smComSocket</text> </g> + <g id="shape75-77" v:mID="75" v:groupContext="shape" transform="translate(205.512,-28.3465)"> + <title>Sheet.75</title> + <desc>TCP/IP</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.661" width="70.87" height="21.2598"/> + <rect x="0" y="248.031" width="70.8661" height="21.2598" class="st5"/> + <text x="22.54" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP</text> </g> + <g id="shape76-80" v:mID="76" v:groupContext="shape" v:layerMember="0" transform="translate(210.63,-92.126)"> + <title>Dynamic connector.76</title> + <path d="M0 269.29 L10.91 278.22" class="st3"/> + </g> + <g id="shape77-85" v:mID="77" v:groupContext="shape" transform="translate(134.646,-191.339)"> + <title>Sheet.77</title> + <desc>Engine Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="262.205" width="42.52" height="14.1732"/> + <path d="M0 269.29 L42.52 269.29 L42.52 255.12 L0 255.12 L0 269.29 Z" class="st9"/> + <text x="11.92" y="260.41" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Engine <tspan + x="9.59" dy="1.2em" class="st7">Interface</tspan></text> </g> + <g id="shape78-89" v:mID="78" v:groupContext="shape" transform="translate(127.559,-155.906)"> + <title>Sheet.78</title> + <desc>OpenSSL Engine</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="258.661" width="56.7" height="21.2598"/> + <rect x="0" y="248.031" width="56.6929" height="21.2598" class="st14"/> + <text x="11" y="256.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenSSL <tspan x="15.89" + dy="1.2em" class="st7">Engine</tspan></text> </g> + <g id="shape79-93" v:mID="79" v:groupContext="shape" v:layerMember="0" transform="translate(148.819,-191.339)"> + <title>Dynamic connector.79</title> + <path d="M7.09 269.29 L7.09 275.18" class="st3"/> + </g> + <g id="shape80-98" v:mID="80" v:groupContext="shape" transform="translate(109.417,-240.945)"> + <title>Sheet.80</title> + <desc>App_Class_1 (e.g. s_client)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="37.4173" cy="255.118" width="74.84" height="28.3465"/> + <rect x="0" y="240.945" width="74.8346" height="28.3465" class="st8"/> + <text x="4.51" y="252.72" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>App_Class_1 (e.g. <tspan + x="22.52" dy="1.2em" class="st7">s_client)</tspan></text> </g> + <g id="shape81-102" v:mID="81" v:groupContext="shape" v:layerMember="0" transform="translate(163.052,-240.945)"> + <title>Dynamic connector.81</title> + <path d="M-7.09 277.21 L-7.09 277.57 L-7.09 282.27" class="st12"/> + </g> + <g id="shape82-109" v:mID="82" v:groupContext="shape" transform="translate(318.898,-212.478)"> + <title>Sheet.82</title> + <desc>OpenSSL Engine</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="262.145" width="70.87" height="14.2932"/> + <rect x="0" y="254.998" width="70.8661" height="14.2932" class="st14"/> + <text x="4.52" y="264.54" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenSSL Engine</text> </g> + </g> +</svg>
diff --git a/doc/_images/A71CH_HostLib_SW_Layers_mbedTLS.svg b/doc/_images/A71CH_HostLib_SW_Layers_mbedTLS.svg new file mode 100644 index 0000000..d145e62 --- /dev/null +++ b/doc/_images/A71CH_HostLib_SW_Layers_mbedTLS.svg
@@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export A71CH_HostLib_SW_Layers_mbedTLS.svg MbedTLS --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="5.41672in" height="3.74016in" + viewBox="0 0 390.004 269.291" xml:space="preserve" color-interpolation-filters="sRGB" class="st16"> + <v:documentProperties v:langID="1033" v:viewMarkup="false"> + <v:userDefs> + <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/> + <v:ud v:nameU="msvConvertTheme"/> + </v:userDefs> + </v:documentProperties> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#d1ebf1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {marker-end:url(#mrkr13-12);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976} + .st4 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.086948582161584} + .st5 {fill:#99ff66;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st6 {marker-end:url(#mrkr13-12);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st7 {font-size:1em} + .st8 {fill:#f59d56;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st9 {fill:none;stroke:#000000;stroke-dasharray:2.16,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st10 {fill:#000000;font-family:Arial;font-size:0.499992em} + .st11 {fill:#000000;font-family:Arial;font-size:0.666664em;font-style:italic} + .st12 {marker-end:url(#mrkr13-12);marker-start:url(#mrkr13-60);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976} + .st13 {fill:url(#grad0-75);stroke:#000000;stroke-dasharray:0,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st14 {fill:#8db1e2;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st15 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st16 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Patterns_And_Gradients"> + <linearGradient id="grad0-75" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)"> + <stop offset="0" stop-color="#f9fbfc" stop-opacity="1"/> + <stop offset="0.74" stop-color="#cfdbe9" stop-opacity="1"/> + <stop offset="0.83" stop-color="#cfdbe9" stop-opacity="1"/> + <stop offset="1" stop-color="#dfe7f0" stop-opacity="1"/> + </linearGradient> + </defs> + <defs id="Markers"> + <g id="lend13"> + <path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/> + </g> + <marker id="mrkr13-12" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="34.5032" refX="-34.503150315032" + orient="auto" markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend13" transform="scale(-11.501050105011,-11.501050105011) "/> + </marker> + <marker id="mrkr13-60" class="st4" v:arrowType="13" v:arrowSize="2" v:setback="33.003" refX="33.00300030003" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend13" transform="scale(11.501050105011) "/> + </marker> + </defs> + <g v:mID="4" v:index="1" v:groupContext="foregroundPage"> + <title>MbedTLS</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Connector" v:index="0"/> + <g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(127.559,-99.2126)"> + <title>Sheet.1</title> + <desc>AX_API / A71CH_API</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="60.2362" cy="258.661" width="120.48" height="21.2598"/> + <rect x="0" y="248.031" width="120.472" height="21.2598" class="st1"/> + <text x="21.33" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>AX_API / A71CH_API</text> </g> + <g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(127.559,-63.7795)"> + <title>Sheet.2</title> + <desc>APDU</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="74.4094" cy="255.118" width="148.82" height="28.3465"/> + <rect x="0" y="240.945" width="148.819" height="28.3465" class="st1"/> + <text x="63.3" y="252.14" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>APDU</text> </g> + <g id="shape3-7" v:mID="3" v:groupContext="shape" v:layerMember="0" transform="translate(24.8031,-120.472)"> + <title>Dynamic connector</title> + <path d="M0 269.29 L0 182.98 L94.6 182.98" class="st3"/> + </g> + <g id="shape4-13" v:mID="4" v:groupContext="shape" transform="translate(127.679,-160.157)"> + <title>Sheet.4</title> + <desc>mbed TLS</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="46.063" cy="239.528" width="92.13" height="59.5276"/> + <rect x="0" y="209.764" width="92.126" height="59.5276" class="st5"/> + <text x="27.61" y="220.96" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>mbed TLS</text> </g> + <g id="shape5-16" v:mID="5" v:groupContext="shape" transform="translate(70.8661,428.74) rotate(180)"> + <title>Sheet.5</title> + <path d="M0 269.29 L12.98 269.29" class="st6"/> + </g> + <g id="shape6-21" v:mID="6" v:groupContext="shape" transform="translate(318.898,-162.992)"> + <title>Sheet.6</title> + <desc>Host Library Modules</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.721" width="70.87" height="21.1398"/> + <rect x="0" y="248.151" width="70.8661" height="21.1398" class="st1"/> + <text x="13.87" y="256.32" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Host Library <tspan + x="20.31" dy="1.2em" class="st7">Modules</tspan></text> </g> + <g id="shape7-25" v:mID="7" v:groupContext="shape" transform="translate(319.018,-233.798)"> + <title>Sheet.7</title> + <desc>Applications</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="262.145" width="70.87" height="14.2932"/> + <rect x="0" y="254.998" width="70.8661" height="14.2932" class="st8"/> + <text x="13.87" y="264.54" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Applications</text> </g> + <g id="shape8-28" v:mID="8" v:groupContext="shape" transform="translate(503.27,28.3465) rotate(90)"> + <title>Sheet.8</title> + <path d="M0 269.29 L83.85 269.29" class="st6"/> + </g> + <g id="shape9-33" v:mID="9" v:groupContext="shape" transform="translate(127.559,-28.3465)"> + <title>Sheet.9</title> + <desc>SCI2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.3731" cy="258.661" width="70.75" height="21.2598"/> + <rect x="0" y="248.031" width="70.7461" height="21.2598" class="st1"/> + <text x="23.59" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SCI2C</text> </g> + <g id="shape10-36" v:mID="10" v:groupContext="shape" transform="translate(170.079,-63.7795)"> + <title>Sheet.10</title> + <desc>SmCom Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="262.205" width="63.78" height="14.1732"/> + <path d="M0 269.29 L63.78 269.29 L63.78 255.12 L0 255.12 L0 269.29 Z" class="st9"/> + <text x="8.55" y="264" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SmCom Interface</text> </g> + <g id="shape11-39" v:mID="11" v:groupContext="shape" v:layerMember="0" transform="translate(193.294,-63.7795)"> + <title>Dynamic connector.61</title> + <path d="M0 269.29 L-10.94 278.23" class="st3"/> + </g> + <g id="shape12-44" v:mID="12" v:groupContext="shape" transform="translate(127.559,0)"> + <title>Sheet.12</title> + <desc>I2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.3731" cy="258.661" width="70.75" height="21.2598"/> + <rect x="0" y="248.031" width="70.7461" height="21.2598" class="st5"/> + <text x="29.15" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>I2C</text> </g> + <g id="shape13-47" v:mID="13" v:groupContext="shape" transform="translate(0,-99.2126)"> + <title>Sheet.13</title> + <desc>HostCrypto</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="24.8031" cy="258.661" width="49.61" height="21.2598"/> + <rect x="0" y="248.031" width="49.6063" height="21.2598" class="st5"/> + <text x="4.8" y="261.06" class="st11" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HostCrypto</text> </g> + <g id="shape14-50" v:mID="14" v:groupContext="shape" transform="translate(191.459,-240.945)"> + <title>Sheet.14</title> + <desc>App_Class_2 (e.g. ex_A71CHHLSEMain)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="44.5857" cy="255.118" width="89.18" height="28.3465"/> + <rect x="0" y="240.945" width="89.1713" height="28.3465" class="st8"/> + <text x="11.68" y="252.72" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>App_Class_2 (e.g. <tspan + x="4.79" dy="1.2em" class="st7">ex_A71CHHLSEMain)</tspan></text> </g> + <g id="shape15-54" v:mID="15" v:groupContext="shape" v:layerMember="0" transform="translate(212.718,-240.945)"> + <title>Dynamic connector.71</title> + <path d="M-7.09 277.21 L-7.09 277.57 L-7.09 282.27" class="st12"/> + </g> + <g id="shape16-62" v:mID="16" v:groupContext="shape" transform="translate(531.496,28.3465) rotate(90)"> + <title>Sheet.16</title> + <path d="M0 269.29 L140.54 269.29" class="st6"/> + </g> + <g id="shape17-67" v:mID="17" v:groupContext="shape" transform="translate(318.898,-120.472)"> + <title>Sheet.17</title> + <desc>Provided by OS or Platform Infrastructure</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="251.575" width="70.87" height="35.4331"/> + <rect x="0" y="233.858" width="70.8661" height="35.4331" class="st5"/> + <text x="7.42" y="244.37" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Provided by OS <tspan + x="15.87" dy="1.2em" class="st7">or Platform </tspan><tspan x="11.87" dy="1.2em" class="st7">Infrastructure</tspan></text> </g> + <g id="shape18-72" v:mID="18" v:groupContext="shape" transform="translate(205.512,-28.3465)"> + <title>Sheet.18</title> + <desc>smComSerial</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.661" width="70.87" height="21.2598"/> + <path d="M0 269.29 L70.87 269.29 L70.87 248.03 L0 248.03 L0 269.29 Z" class="st13"/> + <text x="4" y="261.06" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>smComSerial</text> </g> + <g id="shape19-77" v:mID="19" v:groupContext="shape" transform="translate(205.512,-5.68434E-14)"> + <title>Sheet.19</title> + <desc>VCOM</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="258.661" width="70.87" height="21.2598"/> + <rect x="0" y="248.031" width="70.8661" height="21.2598" class="st5"/> + <text x="23.43" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>VCOM</text> </g> + <g id="shape20-80" v:mID="20" v:groupContext="shape" v:layerMember="0" transform="translate(210.63,-63.7795)"> + <title>Dynamic connector.76</title> + <path d="M0 269.29 L10.91 278.22" class="st3"/> + </g> + <g id="shape21-85" v:mID="21" v:groupContext="shape" transform="translate(164.409,-167.244)"> + <title>Sheet.21</title> + <desc>ALT Implementation for ECC</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="25.5118" cy="257.244" width="51.03" height="24.0945"/> + <rect x="0" y="245.197" width="51.0236" height="24.0945" class="st14"/> + <text x="20.01" y="251.84" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ALT <tspan x="5" + dy="1.2em" class="st7">Implementation </tspan><tspan x="14.84" dy="1.2em" class="st7">for ECC</tspan></text> </g> + <g id="shape24-90" v:mID="24" v:groupContext="shape" transform="translate(109.417,-240.945)"> + <title>Sheet.24</title> + <desc>App_Class_1</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="37.4173" cy="255.118" width="74.84" height="28.3465"/> + <rect x="0" y="240.945" width="74.8346" height="28.3465" class="st8"/> + <text x="13.62" y="257.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>App_Class_1</text> </g> + <g id="shape25-93" v:mID="25" v:groupContext="shape" v:layerMember="0" transform="translate(148.879,-240.945)"> + <title>Dynamic connector.81</title> + <path d="M7.09 277.21 L7.09 277.57 L7.09 282.27" class="st12"/> + </g> + <g id="shape26-100" v:mID="26" v:groupContext="shape" transform="translate(318.898,-208.346)"> + <title>Sheet.26</title> + <desc>mbed TLS ALT implementation</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="257.953" width="70.87" height="22.6772"/> + <rect x="0" y="246.614" width="70.8661" height="22.6772" class="st14"/> + <text x="8.53" y="255.55" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>mbed TLS ALT <tspan + x="8.31" dy="1.2em" class="st7">implementation</tspan></text> </g> + <g id="shape27-104" v:mID="27" v:groupContext="shape" transform="translate(70.8661,-99.2126)"> + <title>Sheet.27</title> + <desc>HL CRYPT</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="17.7165" cy="258.661" width="35.44" height="21.2598"/> + <rect x="0" y="248.031" width="35.4331" height="21.2598" class="st15"/> + <text x="12.6" y="256.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HL<v:lf/><tspan + x="4.16" dy="1.2em" class="st7">CRYPT</tspan></text> </g> + <g id="shape28-108" v:mID="28" v:groupContext="shape" transform="translate(128.74,429.134) rotate(180)"> + <title>Sheet.28</title> + <path d="M0 269.29 L14.16 269.29" class="st6"/> + </g> + <g id="shape29-113" v:mID="29" v:groupContext="shape" transform="translate(127.559,-127.559)"> + <title>Sheet.29</title> + <desc>HLSE</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="60.2362" cy="258.661" width="120.48" height="21.2598"/> + <rect x="0" y="248.031" width="120.472" height="21.2598" class="st1"/> + <text x="49.79" y="261.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HLSE</text> </g> + <g id="shape30-116" v:mID="30" v:groupContext="shape" transform="translate(318.898,-191.339)"> + <title>Sheet.30</title> + <desc>HLCRYPT</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="262.205" width="70.87" height="14.1732"/> + <rect x="0" y="255.118" width="70.8661" height="14.1732" class="st15"/> + <text x="16.76" y="264.6" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>HLCRYPT</text> </g> + </g> +</svg>
diff --git a/doc/_images/A71CH_Kinetis_OpenSSLConfig.jpg b/doc/_images/A71CH_Kinetis_OpenSSLConfig.jpg new file mode 100644 index 0000000..ce508c9 --- /dev/null +++ b/doc/_images/A71CH_Kinetis_OpenSSLConfig.jpg Binary files differ
diff --git a/doc/_images/A71CH_PersoDevHw_iMX.svg b/doc/_images/A71CH_PersoDevHw_iMX.svg new file mode 100644 index 0000000..b3ccc49 --- /dev/null +++ b/doc/_images/A71CH_PersoDevHw_iMX.svg
@@ -0,0 +1,634 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export A71CH_PersoDevHw_iMX.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="5.548in" height="2.66783in" + viewBox="0 0 399.456 192.084" xml:space="preserve" color-interpolation-filters="sRGB" class="st28"> + <v:documentProperties v:langID="1033" v:viewMarkup="false"> + <v:userDefs> + <v:ud v:nameU="msvConvertTheme"/> + </v:userDefs> + </v:documentProperties> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#fbd7bb;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st4 {fill:#eaeff5;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st5 {font-size:1em} + .st6 {marker-end:url(#mrkr5-21);marker-start:url(#mrkr5-18);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st7 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.08695652173913} + .st8 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2} + .st9 {fill:#00b0f0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st10 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st11 {fill:#9a9a9a;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st12 {fill:#e6e6e6;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st13 {fill:url(#grad7-42)} + .st14 {stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st15 {fill:url(#grad0-47);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st16 {fill:url(#grad0-51);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.12} + .st17 {fill:#000000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.12} + .st18 {fill:url(#grad8-57);stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.12} + .st19 {fill:url(#grad0-63);stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st20 {fill:url(#grad12-67);stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.12} + .st21 {fill:#00ff00;stroke:#00ff00;stroke-linecap:butt;stroke-width:0.24} + .st22 {fill:#c0c0c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st23 {fill:#00ff00;stroke:none;stroke-linecap:butt;stroke-width:0.24} + .st24 {fill:url(#grad12-83);stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st25 {stroke:#b3b3b3;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st26 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st27 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72;visibility:hidden} + .st28 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Patterns_And_Gradients"> + <radialGradient id="grad7-42" cx="0" cy="0" r="1.4"> + <stop offset="0" stop-color="#666666" stop-opacity="1"/> + <stop offset="1" stop-color="#c0c0c0" stop-opacity="1"/> + </radialGradient> + <linearGradient id="grad0-47" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(0 0.5 0.5)"> + <stop offset="0" stop-color="#c0c0c0" stop-opacity="1"/> + <stop offset="1" stop-color="#e6e6e6" stop-opacity="1"/> + </linearGradient> + <linearGradient id="grad0-51" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)"> + <stop offset="0.01" stop-color="#9a9a9a" stop-opacity="1"/> + <stop offset="0.5" stop-color="#e6e6e6" stop-opacity="1"/> + <stop offset="1" stop-color="#9a9a9a" stop-opacity="1"/> + </linearGradient> + <pattern id="grad8-57" x="0" y="0" width="1" height="1" patternContentUnits="objectBoundingBox"> + <path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad0-58)"/> + <path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad0-59)"/> + </pattern> + <linearGradient id="grad0-58" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(270 0.5 0.5)"> + <stop offset="0" stop-color="#e6e6e6" stop-opacity="1"/> + <stop offset="1" stop-color="#9a9a9a" stop-opacity="1"/> + </linearGradient> + <linearGradient id="grad0-59" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(180 0.5 0.5)"> + <stop offset="0" stop-color="#e6e6e6" stop-opacity="1"/> + <stop offset="1" stop-color="#9a9a9a" stop-opacity="1"/> + </linearGradient> + <linearGradient id="grad0-63" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(180 0.5 0.5)"> + <stop offset="0.01" stop-color="#dbdac6" stop-opacity="1"/> + <stop offset="0.5" stop-color="#9a9a9a" stop-opacity="1"/> + <stop offset="1" stop-color="#dbdac6" stop-opacity="1"/> + </linearGradient> + <pattern id="grad12-67" x="0" y="0" width="1" height="1" patternContentUnits="objectBoundingBox"> + <path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad0-68)"/> + <path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad0-69)"/> + </pattern> + <linearGradient id="grad0-68" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)"> + <stop offset="0" stop-color="#e6e6e6" stop-opacity="1"/> + <stop offset="1" stop-color="#9a9a9a" stop-opacity="1"/> + </linearGradient> + <linearGradient id="grad0-69" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(360 0.5 0.5)"> + <stop offset="0" stop-color="#e6e6e6" stop-opacity="1"/> + <stop offset="1" stop-color="#9a9a9a" stop-opacity="1"/> + </linearGradient> + <pattern id="grad12-83" x="0" y="0" width="1" height="1" patternContentUnits="objectBoundingBox"> + <path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad0-84)"/> + <path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad0-85)"/> + </pattern> + <linearGradient id="grad0-84" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(90 0.5 0.5)"> + <stop offset="0" stop-color="#ffffff" stop-opacity="1"/> + <stop offset="1" stop-color="#8a8aff" stop-opacity="1"/> + </linearGradient> + <linearGradient id="grad0-85" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(360 0.5 0.5)"> + <stop offset="0" stop-color="#ffffff" stop-opacity="1"/> + <stop offset="1" stop-color="#8a8aff" stop-opacity="1"/> + </linearGradient> + </defs> + <defs id="Markers"> + <g id="lend5"> + <path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"/> + </g> + <marker id="mrkr5-18" class="st7" v:arrowType="5" v:arrowSize="2" v:setback="18.625" refX="18.625" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(11.5) "/> + </marker> + <marker id="mrkr5-21" class="st7" v:arrowType="5" v:arrowSize="2" v:setback="20.125" refX="-20.125" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(-11.5,-11.5) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Network" v:index="0"/> + <g id="shape234-1" v:mID="234" v:groupContext="shape" transform="translate(200.911,-13.3649)"> + <title>Rounded Rectangle.234</title> + <desc>End - device</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.20472440944882):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.20472440944882):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.20472440944882):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.20472440944882):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="73.7008" cy="166.958" width="147.41" height="50.2505"/> + <path d="M14.74 192.08 L132.66 192.08 A14.7399 14.7399 -180 0 0 147.4 177.34 L147.4 156.57 A14.7399 14.7399 -180 0 0 + 132.66 141.83 L14.74 141.83 A14.7399 14.7399 -180 0 0 0 156.57 L0 177.34 A14.7399 14.7399 -180 0 0 14.74 + 192.08 Z" class="st1"/> + <text x="51.47" y="153.03" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>End - device</text> </g> + <g id="shape150-4" v:mID="150" v:groupContext="shape" transform="translate(0.36,-164.795)"> + <title>Sheet.150</title> + <desc>(1)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="30.4724" cy="178.619" width="60.95" height="26.9291"/> + <rect x="0" y="165.155" width="60.9449" height="26.9291" class="st3"/> + <text x="25.58" y="181.02" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(1)</text> </g> + <g id="shape159-7" v:mID="159" v:groupContext="shape" transform="translate(186.738,-126.751)"> + <title>Rounded Rectangle.159</title> + <desc>MCIMX6UL-EVK</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.1811" cy="181.454" width="62.37" height="21.2598"/> + <path d="M6.24 192.08 L56.13 192.08 A6.23612 6.23612 -180 0 0 62.36 185.85 L62.36 177.06 A6.23612 6.23612 -180 0 0 56.13 + 170.82 L6.24 170.82 A6.23612 6.23612 -180 0 0 -0 177.06 L0 185.85 A6.23612 6.23612 -180 0 0 6.24 192.08 + Z" class="st4"/> + <text x="9.18" y="179.05" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>MCIMX6UL-<tspan + x="23.18" dy="1.2em" class="st5">EVK</tspan></text> </g> + <g id="shape161-11" v:mID="161" v:groupContext="shape" transform="translate(73.3521,-135.702)"> + <title>Sheet.161</title> + <desc>TCP/IP over Ethernet</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="53.7091" cy="192.084" width="107.42" height="0"/> + <path d="M4.47 192.08 L4.83 192.08 L102.59 192.08" class="st6"/> + <rect v:rectContext="textBkgnd" x="15.694" y="187.284" width="76.0303" height="9.59985" class="st8"/> + <text x="15.69" y="194.48" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP over Ethernet</text> </g> + <g id="shape169-24" v:mID="169" v:groupContext="shape" transform="translate(365.321,-126.751)"> + <title>Rounded Rectangle.169</title> + <desc>A71CH</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="17.0079" cy="181.454" width="34.02" height="21.2598"/> + <path d="M3.4 192.08 L30.61 192.08 A3.40152 3.40152 -180 0 0 34.02 188.68 L34.02 174.23 A3.40152 3.40152 -180 0 0 30.61 + 170.82 L3.4 170.82 A3.40152 3.40152 -180 0 0 0 174.23 L0 188.68 A3.40152 3.40152 -180 0 0 3.4 192.08 Z" + class="st9"/> + <text x="4.11" y="183.85" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>A71CH</text> </g> + <g id="shape171-27" v:mID="171" v:groupContext="shape" transform="translate(249.1,-137.381)"> + <title>Sheet.171</title> + <path d="M0 192.08 L22.68 192.08" class="st10"/> + </g> + <g id="group183-30" transform="translate(23.1789,-119.097)" v:mID="183" v:groupContext="group" v:layerMember="0"> + <v:custProps> + <v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="1" v:invis="false" + v:ask="false" v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Department" v:lbl="Department" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <title>Workstation</title> + <g id="shape184-31" v:mID="184" v:groupContext="shape" v:layerMember="0" transform="translate(36,-1.42109E-013)"> + <title>Sheet.184</title> + <path d="M0 192.08 L4.5 187.58 L4.5 180.83 L0 185.33 L0 192.08 Z" class="st11"/> + </g> + <g id="shape185-33" v:mID="185" v:groupContext="shape" v:layerMember="0" transform="translate(33.75,-7.875)"> + <title>Sheet.185</title> + <path d="M3.37 192.08 L6.75 188.71 L0 188.71 L3.37 192.08 Z" class="st12"/> + </g> + <g id="shape186-35" v:mID="186" v:groupContext="shape" v:layerMember="0" transform="translate(6.39488E-014,-6.75)"> + <title>Sheet.186</title> + <path d="M9 192.08 L2.25 189.83 L0 192.08 L9 192.08 Z" class="st12"/> + </g> + <g id="shape187-37" v:mID="187" v:groupContext="shape" v:layerMember="0" transform="translate(2.25,-6.75)"> + <title>Sheet.187</title> + <path d="M37.12 188.71 L34.87 187.58 L2.25 187.58 L0 189.83 L6.75 192.08 L33.75 192.08 L37.12 188.71 Z" + class="st11"/> + </g> + <g id="shape188-39" v:mID="188" v:groupContext="shape" v:layerMember="0" transform="translate(7.59375,-7.00854)"> + <title>Sheet.188</title> + <path d="M0 190.36 A12.6563 1.71017 -179.94 0 0 25.31 190.39 L0 190.35 L0 190.36 Z" class="st13"/> + <path d="M0 190.36 A12.6563 1.71017 -179.94 0 0 25.31 190.39 L0 190.35" class="st14"/> + </g> + <g id="shape189-44" v:mID="189" v:groupContext="shape" v:layerMember="0"> + <title>Sheet.189</title> + <rect x="0" y="185.334" width="36" height="6.75" class="st15"/> + </g> + <g id="shape190-48" v:mID="190" v:groupContext="shape" v:layerMember="0" transform="translate(0.321429,-4.17857)"> + <title>Sheet.190</title> + <rect x="0" y="191.119" width="35.3571" height="0.964286" class="st16"/> + </g> + <g id="shape191-52" v:mID="191" v:groupContext="shape" v:layerMember="0" transform="translate(3.31071,-4.17857)"> + <title>Sheet.191</title> + <rect x="0" y="191.119" width="6.23571" height="0.964286" class="st17"/> + </g> + <g id="shape192-54" v:mID="192" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,55.3261) rotate(-45)"> + <title>Sheet.192</title> + <rect x="0" y="190.421" width="1.66229" height="1.66229" class="st18"/> + </g> + <g id="shape193-60" v:mID="193" v:groupContext="shape" v:layerMember="0" transform="translate(5.48437,-1.00446)"> + <title>Sheet.193</title> + <rect x="0" y="191.119" width="3.51563" height="0.964286" class="st19"/> + </g> + <g id="shape194-64" v:mID="194" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,54.9266) rotate(-45)"> + <title>Sheet.194</title> + <rect x="0" y="190.986" width="1.09743" height="1.09743" class="st20"/> + </g> + <g id="shape195-70" v:mID="195" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,54.3114) rotate(-45)"> + <title>Sheet.195</title> + <rect x="0" y="191.856" width="0.227284" height="0.227284" class="st21"/> + </g> + <g id="shape196-72" v:mID="196" v:groupContext="shape" v:layerMember="0" transform="translate(34.9432,-8.51136)"> + <title>Sheet.196</title> + <path d="M0 192.08 L4.23 187.86 L4.23 180.11 L5.64 175.88 L5.64 158.97 L0 164.61 L0 192.08 Z" class="st11"/> + </g> + <g id="shape197-74" v:mID="197" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-35.9886)"> + <title>Sheet.197</title> + <path d="M39.45 186.45 L5.64 186.45 L0 192.08 L33.82 192.08 L39.45 186.45 Z" class="st12"/> + </g> + <g id="shape198-76" v:mID="198" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-8.57072)"> + <title>Sheet.198</title> + <path d="M0 164.67 L0 192.08 L33.82 192.08 L33.82 164.67 L0 164.67 Z" class="st22"/> + </g> + <g id="shape199-78" v:mID="199" v:groupContext="shape" v:layerMember="0" transform="translate(31.5614,-11.1412)"> + <title>Sheet.199</title> + <rect x="0" y="191.227" width="1.69091" height="0.85681" class="st23"/> + </g> + <g id="shape200-80" v:mID="200" v:groupContext="shape" v:layerMember="0" transform="translate(5.50269,-14.8683)"> + <title>Sheet.200</title> + <rect x="0" y="174.816" width="24.5087" height="17.2675" class="st24"/> + </g> + <g id="shape201-86" v:mID="201" v:groupContext="shape" v:layerMember="0" transform="translate(4.17857,-0.803571)"> + <title>Sheet.201</title> + <path d="M21.21 189.19 L20.57 189.67 L21.21 190.16" class="st25"/> + <path d="M23.79 189.19 L23.14 189.67 L23.79 190.16" class="st25"/> + <path d="M26.36 189.19 L25.71 189.67 L26.36 190.16" class="st25"/> + <path d="M28.93 189.19 L28.29 189.67 L28.93 190.16" class="st25"/> + <path d="M18.64 189.19 L18 189.67 L18.64 190.16" class="st25"/> + <path d="M13.5 189.19 L12.86 189.67 L13.5 190.16" class="st25"/> + <path d="M16.07 189.19 L15.43 189.67 L16.07 190.16" class="st25"/> + <path d="M5.79 189.19 L5.14 189.67 L5.79 190.16" class="st25"/> + <path d="M8.36 189.19 L7.71 189.67 L8.36 190.16" class="st25"/> + <path d="M10.93 189.19 L10.29 189.67 L10.93 190.16" class="st25"/> + <path d="M7.71 191.12 L7.07 191.6 L7.71 192.08" class="st25"/> + <path d="M27.64 191.12 L27 191.6 L27.64 192.08" class="st25"/> + <path d="M30.21 191.12 L29.57 191.6 L30.21 192.08" class="st25"/> + <path d="M22.82 191.12 L22.18 191.6 L22.82 192.08" class="st25"/> + <path d="M25.39 191.12 L24.75 191.6 L25.39 192.08" class="st25"/> + <path d="M12.54 191.12 L11.89 191.6 L12.54 192.08" class="st25"/> + <path d="M15.11 191.12 L14.46 191.6 L15.11 192.08" class="st25"/> + <path d="M17.68 191.12 L17.04 191.6 L17.68 192.08" class="st25"/> + <path d="M20.25 191.12 L19.61 191.6 L20.25 192.08" class="st25"/> + <path d="M9.96 191.12 L9.32 191.6 L9.96 192.08" class="st25"/> + <path d="M3.21 189.19 L2.57 189.67 L3.21 190.16" class="st25"/> + <path d="M0.64 189.19 L0 189.67 L0.64 190.16" class="st25"/> + </g> + <g id="shape202-110" v:mID="202" v:groupContext="shape" v:layerMember="0" transform="translate(4.29545,-12.8725)"> + <title>Sheet.202</title> + <path d="M2.11 189.93 L2.11 173.8 L25.36 173.8 L25.36 189.93 L2.11 189.93 ZM1.06 191.01 L26.42 191.01 L26.42 172.73 + L27.48 172.73 L27.48 171.65 L0 171.65 L0 172.54 L0 192.08 L1.06 192.08 L1.06 191.01 Z" class="st18"/> + </g> + <g id="shape203-113" v:mID="203" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-8.57072)"> + <title>Sheet.203</title> + <path d="M9.3 190.37 L9.3 192.08" class="st10"/> + <path d="M5.07 190.37 L5.07 192.08" class="st10"/> + <path d="M0 190.37 L33.82 190.37" class="st10"/> + </g> + <g id="shape204-118" v:mID="204" v:groupContext="shape" v:layerMember="0"> + <title>Sheet.204</title> + <path d="M0 192.08 L0 185.33 L1.69 183.65 L1.12 183.65 L1.12 156.08 L6.75 150.46 L40.5 150.46 L40.5 167.61 L39.09 + 171.55 L39.09 179.15 L37.69 180.83 L40.5 180.83 L40.5 187.58 L36 192.08 L0 192.08" class="st26"/> + </g> + <g id="shape205-121" v:mID="205" v:groupContext="shape" v:layerMember="0" transform="translate(-15.3492,13.6036)"> + <title>Sheet.205</title> + <desc>Development PC</desc> + <v:userDefs> + <v:ud v:nameU="FillPattern" v:val="VT0(1):26"/> + <v:ud v:nameU="FillForegnd" v:val="VT0(1):26"/> + <v:ud v:nameU="FillBkgnd" v:val="VT0(0):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="33.3492" cy="185.282" width="66.7" height="13.6036"/> + <rect x="0" y="178.48" width="66.6985" height="13.6036" class="st27"/> + <text x="3.11" y="187.68" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Development PC</text> </g> + </g> + <g id="shape207-124" v:mID="207" v:groupContext="shape" transform="translate(215.084,-21.2571)"> + <title>Rounded Rectangle.207</title> + <desc>iMX6UL</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.1811" cy="181.454" width="62.37" height="21.2598"/> + <path d="M6.24 192.08 L56.13 192.08 A6.23612 6.23612 -180 0 0 62.36 185.85 L62.36 177.06 A6.23612 6.23612 -180 0 0 56.13 + 170.82 L6.24 170.82 A6.23612 6.23612 -180 0 0 -0 177.06 L0 185.85 A6.23612 6.23612 -180 0 0 6.24 192.08 + Z" class="st4"/> + <text x="16.95" y="183.85" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>iMX6UL</text> </g> + <g id="shape208-127" v:mID="208" v:groupContext="shape" transform="translate(75.7616,-30.2086)"> + <title>Sheet.208</title> + <desc>TCP/IP over Ethernet</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="53.7091" cy="192.084" width="107.42" height="0"/> + <path d="M4.47 192.08 L4.83 192.08 L102.59 192.08" class="st6"/> + <rect v:rectContext="textBkgnd" x="15.694" y="187.284" width="76.0303" height="9.59985" class="st8"/> + <text x="15.69" y="194.48" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP over Ethernet</text> </g> + <g id="shape209-136" v:mID="209" v:groupContext="shape" transform="translate(294.454,-21.2571)"> + <title>Rounded Rectangle.209</title> + <desc>A71CH</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.047244094488189):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="17.0079" cy="181.454" width="34.02" height="21.2598"/> + <path d="M3.4 192.08 L30.61 192.08 A3.40152 3.40152 -180 0 0 34.02 188.68 L34.02 174.23 A3.40152 3.40152 -180 0 0 30.61 + 170.82 L3.4 170.82 A3.40152 3.40152 -180 0 0 0 174.23 L0 188.68 A3.40152 3.40152 -180 0 0 3.4 192.08 Z" + class="st9"/> + <text x="4.11" y="183.85" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>A71CH</text> </g> + <g id="shape210-139" v:mID="210" v:groupContext="shape" transform="translate(277.447,-31.887)"> + <title>Sheet.210</title> + <path d="M0 192.08 L17.01 192.08" class="st10"/> + </g> + <g id="group211-142" transform="translate(25.5883,-13.6036)" v:mID="211" v:groupContext="group" v:layerMember="0"> + <v:custProps> + <v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="1" v:invis="false" + v:ask="false" v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Department" v:lbl="Department" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <title>Workstation.211</title> + <g id="shape212-143" v:mID="212" v:groupContext="shape" v:layerMember="0" transform="translate(36,-1.42109E-013)"> + <title>Sheet.212</title> + <path d="M0 192.08 L4.5 187.58 L4.5 180.83 L0 185.33 L0 192.08 Z" class="st11"/> + </g> + <g id="shape213-145" v:mID="213" v:groupContext="shape" v:layerMember="0" transform="translate(33.75,-7.875)"> + <title>Sheet.213</title> + <path d="M3.37 192.08 L6.75 188.71 L0 188.71 L3.37 192.08 Z" class="st12"/> + </g> + <g id="shape214-147" v:mID="214" v:groupContext="shape" v:layerMember="0" transform="translate(6.39488E-014,-6.75)"> + <title>Sheet.214</title> + <path d="M9 192.08 L2.25 189.83 L0 192.08 L9 192.08 Z" class="st12"/> + </g> + <g id="shape215-149" v:mID="215" v:groupContext="shape" v:layerMember="0" transform="translate(2.25,-6.75)"> + <title>Sheet.215</title> + <path d="M37.12 188.71 L34.87 187.58 L2.25 187.58 L0 189.83 L6.75 192.08 L33.75 192.08 L37.12 188.71 Z" + class="st11"/> + </g> + <g id="shape216-151" v:mID="216" v:groupContext="shape" v:layerMember="0" transform="translate(7.59375,-7.00854)"> + <title>Sheet.216</title> + <path d="M0 190.36 A12.6563 1.71017 -179.94 0 0 25.31 190.39 L0 190.35 L0 190.36 Z" class="st13"/> + <path d="M0 190.36 A12.6563 1.71017 -179.94 0 0 25.31 190.39 L0 190.35" class="st14"/> + </g> + <g id="shape217-155" v:mID="217" v:groupContext="shape" v:layerMember="0"> + <title>Sheet.217</title> + <rect x="0" y="185.334" width="36" height="6.75" class="st15"/> + </g> + <g id="shape218-158" v:mID="218" v:groupContext="shape" v:layerMember="0" transform="translate(0.321429,-4.17857)"> + <title>Sheet.218</title> + <rect x="0" y="191.119" width="35.3571" height="0.964286" class="st16"/> + </g> + <g id="shape219-161" v:mID="219" v:groupContext="shape" v:layerMember="0" transform="translate(3.31071,-4.17857)"> + <title>Sheet.219</title> + <rect x="0" y="191.119" width="6.23571" height="0.964286" class="st17"/> + </g> + <g id="shape220-163" v:mID="220" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,55.3261) rotate(-45)"> + <title>Sheet.220</title> + <rect x="0" y="190.421" width="1.66229" height="1.66229" class="st18"/> + </g> + <g id="shape221-166" v:mID="221" v:groupContext="shape" v:layerMember="0" transform="translate(5.48437,-1.00446)"> + <title>Sheet.221</title> + <rect x="0" y="191.119" width="3.51563" height="0.964286" class="st19"/> + </g> + <g id="shape222-169" v:mID="222" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,54.9266) rotate(-45)"> + <title>Sheet.222</title> + <rect x="0" y="190.986" width="1.09743" height="1.09743" class="st20"/> + </g> + <g id="shape223-172" v:mID="223" v:groupContext="shape" v:layerMember="0" + transform="translate(-133.152,54.3114) rotate(-45)"> + <title>Sheet.223</title> + <rect x="0" y="191.856" width="0.227284" height="0.227284" class="st21"/> + </g> + <g id="shape224-174" v:mID="224" v:groupContext="shape" v:layerMember="0" transform="translate(34.9432,-8.51136)"> + <title>Sheet.224</title> + <path d="M0 192.08 L4.23 187.86 L4.23 180.11 L5.64 175.88 L5.64 158.97 L0 164.61 L0 192.08 Z" class="st11"/> + </g> + <g id="shape225-176" v:mID="225" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-35.9886)"> + <title>Sheet.225</title> + <path d="M39.45 186.45 L5.64 186.45 L0 192.08 L33.82 192.08 L39.45 186.45 Z" class="st12"/> + </g> + <g id="shape226-178" v:mID="226" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-8.57072)"> + <title>Sheet.226</title> + <path d="M0 164.67 L0 192.08 L33.82 192.08 L33.82 164.67 L0 164.67 Z" class="st22"/> + </g> + <g id="shape227-180" v:mID="227" v:groupContext="shape" v:layerMember="0" transform="translate(31.5614,-11.1412)"> + <title>Sheet.227</title> + <rect x="0" y="191.227" width="1.69091" height="0.85681" class="st23"/> + </g> + <g id="shape228-182" v:mID="228" v:groupContext="shape" v:layerMember="0" transform="translate(5.50269,-14.8683)"> + <title>Sheet.228</title> + <rect x="0" y="174.816" width="24.5087" height="17.2675" class="st24"/> + </g> + <g id="shape229-185" v:mID="229" v:groupContext="shape" v:layerMember="0" transform="translate(4.17857,-0.803571)"> + <title>Sheet.229</title> + <path d="M21.21 189.19 L20.57 189.67 L21.21 190.16" class="st25"/> + <path d="M23.79 189.19 L23.14 189.67 L23.79 190.16" class="st25"/> + <path d="M26.36 189.19 L25.71 189.67 L26.36 190.16" class="st25"/> + <path d="M28.93 189.19 L28.29 189.67 L28.93 190.16" class="st25"/> + <path d="M18.64 189.19 L18 189.67 L18.64 190.16" class="st25"/> + <path d="M13.5 189.19 L12.86 189.67 L13.5 190.16" class="st25"/> + <path d="M16.07 189.19 L15.43 189.67 L16.07 190.16" class="st25"/> + <path d="M5.79 189.19 L5.14 189.67 L5.79 190.16" class="st25"/> + <path d="M8.36 189.19 L7.71 189.67 L8.36 190.16" class="st25"/> + <path d="M10.93 189.19 L10.29 189.67 L10.93 190.16" class="st25"/> + <path d="M7.71 191.12 L7.07 191.6 L7.71 192.08" class="st25"/> + <path d="M27.64 191.12 L27 191.6 L27.64 192.08" class="st25"/> + <path d="M30.21 191.12 L29.57 191.6 L30.21 192.08" class="st25"/> + <path d="M22.82 191.12 L22.18 191.6 L22.82 192.08" class="st25"/> + <path d="M25.39 191.12 L24.75 191.6 L25.39 192.08" class="st25"/> + <path d="M12.54 191.12 L11.89 191.6 L12.54 192.08" class="st25"/> + <path d="M15.11 191.12 L14.46 191.6 L15.11 192.08" class="st25"/> + <path d="M17.68 191.12 L17.04 191.6 L17.68 192.08" class="st25"/> + <path d="M20.25 191.12 L19.61 191.6 L20.25 192.08" class="st25"/> + <path d="M9.96 191.12 L9.32 191.6 L9.96 192.08" class="st25"/> + <path d="M3.21 189.19 L2.57 189.67 L3.21 190.16" class="st25"/> + <path d="M0.64 189.19 L0 189.67 L0.64 190.16" class="st25"/> + </g> + <g id="shape230-209" v:mID="230" v:groupContext="shape" v:layerMember="0" transform="translate(4.29545,-12.8725)"> + <title>Sheet.230</title> + <path d="M2.11 189.93 L2.11 173.8 L25.36 173.8 L25.36 189.93 L2.11 189.93 ZM1.06 191.01 L26.42 191.01 L26.42 172.73 + L27.48 172.73 L27.48 171.65 L0 171.65 L0 172.54 L0 192.08 L1.06 192.08 L1.06 191.01 Z" class="st18"/> + </g> + <g id="shape231-212" v:mID="231" v:groupContext="shape" v:layerMember="0" transform="translate(1.125,-8.57072)"> + <title>Sheet.231</title> + <path d="M9.3 190.37 L9.3 192.08" class="st10"/> + <path d="M5.07 190.37 L5.07 192.08" class="st10"/> + <path d="M0 190.37 L33.82 190.37" class="st10"/> + </g> + <g id="shape232-217" v:mID="232" v:groupContext="shape" v:layerMember="0"> + <title>Sheet.232</title> + <path d="M0 192.08 L0 185.33 L1.69 183.65 L1.12 183.65 L1.12 156.08 L6.75 150.46 L40.5 150.46 L40.5 167.61 L39.09 + 171.55 L39.09 179.15 L37.69 180.83 L40.5 180.83 L40.5 187.58 L36 192.08 L0 192.08" class="st26"/> + </g> + <g id="shape233-220" v:mID="233" v:groupContext="shape" v:layerMember="0" transform="translate(-15.3492,13.6036)"> + <title>Sheet.233</title> + <desc>Development PC</desc> + <v:userDefs> + <v:ud v:nameU="FillPattern" v:val="VT0(1):26"/> + <v:ud v:nameU="FillForegnd" v:val="VT0(1):26"/> + <v:ud v:nameU="FillBkgnd" v:val="VT0(0):26"/> + </v:userDefs> + <v:textBlock v:margins="rect(2,2,2,2)" v:tabSpace="42.5197"/> + <v:textRect cx="33.3492" cy="185.282" width="66.7" height="13.6036"/> + <rect x="0" y="178.48" width="66.6985" height="13.6036" class="st27"/> + <text x="3.11" y="187.68" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Development PC</text> </g> + </g> + <g id="shape236-223" v:mID="236" v:groupContext="shape" transform="translate(0.36,-56.5932)"> + <title>Sheet.236</title> + <desc>(2)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="30.4724" cy="178.619" width="60.95" height="26.9291"/> + <rect x="0" y="165.155" width="60.9449" height="26.9291" class="st3"/> + <text x="25.58" y="181.02" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(2)</text> </g> + <g id="shape237-226" v:mID="237" v:groupContext="shape" transform="translate(271.777,-126.751)"> + <title>Rounded Rectangle.237</title> + <desc>Arduino Shield</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.086614173228346):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.1811" cy="181.454" width="62.37" height="21.2598"/> + <path d="M6.24 192.08 L56.13 192.08 A6.23612 6.23612 -180 0 0 62.36 185.85 L62.36 177.06 A6.23612 6.23612 -180 0 0 56.13 + 170.82 L6.24 170.82 A6.23612 6.23612 -180 0 0 -0 177.06 L0 185.85 A6.23612 6.23612 -180 0 0 6.24 192.08 + Z" class="st4"/> + <text x="5.16" y="183.85" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Arduino Shield</text> </g> + <g id="shape238-229" v:mID="238" v:groupContext="shape" transform="translate(334.14,-137.381)"> + <title>Sheet.238</title> + <path d="M0 192.08 L31.18 192.08" class="st10"/> + </g> + </g> +</svg>
diff --git a/doc/_images/A71CH_PersoDevSW_PC_iMX.svg b/doc/_images/A71CH_PersoDevSW_PC_iMX.svg new file mode 100644 index 0000000..775431e --- /dev/null +++ b/doc/_images/A71CH_PersoDevSW_PC_iMX.svg
@@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export A71CH_PersoDevSW_PC_iMX.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="7.08661in" height="3.34646in" + viewBox="0 0 510.236 240.945" xml:space="preserve" color-interpolation-filters="sRGB" class="st17"> + <v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false"> + <v:userDefs> + <v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/> + <v:ud v:nameU="msvConvertTheme"/> + </v:userDefs> + </v:documentProperties> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#d1ebf1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {fill:#000000;font-family:Arial;font-size:0.499992em} + .st4 {fill:#f59d56;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st5 {marker-end:url(#mrkr5-23);marker-start:url(#mrkr5-20);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st6 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.08695652173913} + .st7 {fill:none;stroke:#000000;stroke-dasharray:2.16,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st8 {fill:#99ff66;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st9 {font-size:1em} + .st10 {fill:#ffffff} + .st11 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st12 {marker-start:url(#mrkr5-20);stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st13 {stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st14 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st15 {fill:#00b0f0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st16 {stroke:#000000;stroke-dasharray:0,3.75;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75} + .st17 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend5"> + <path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"/> + </g> + <marker id="mrkr5-20" class="st6" v:arrowType="5" v:arrowSize="2" v:setback="18.625" refX="18.625" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(11.5) "/> + </marker> + <marker id="mrkr5-23" class="st6" v:arrowType="5" v:arrowSize="2" v:setback="20.125" refX="-20.125" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(-11.5,-11.5) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Connector" v:index="0"/> + <v:layer v:name="Network" v:index="1"/> + <g id="shape3-1" v:mID="3" v:groupContext="shape" transform="translate(184.252,-113.386)"> + <title>Sheet.3</title> + <desc>A71CH_API</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="29.7638" cy="233.858" width="59.53" height="14.1732"/> + <rect x="0" y="226.772" width="59.5276" height="14.1732" class="st1"/> + <text x="4" y="236.26" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>A71CH_API</text> </g> + <g id="shape7-4" v:mID="7" v:groupContext="shape" transform="translate(184.252,-77.9528)"> + <title>Sheet.7</title> + <desc>APDU</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="42.5197" cy="226.772" width="85.04" height="28.3465"/> + <rect x="0" y="212.598" width="85.0394" height="28.3465" class="st1"/> + <text x="31.41" y="223.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>APDU</text> </g> + <g id="shape21-7" v:mID="21" v:groupContext="shape" transform="translate(354.331,-198.425)"> + <title>Sheet.21</title> + <desc>Host Library Modules</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="237.402" width="70.87" height="7.08661"/> + <rect x="0" y="233.858" width="70.8661" height="7.08661" class="st1"/> + <text x="7.09" y="239.2" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Host Library Modules</text> </g> + <g id="shape44-10" v:mID="44" v:groupContext="shape" transform="translate(354.331,-212.598)"> + <title>Sheet.44</title> + <desc>Applications</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="237.402" width="70.87" height="7.08661"/> + <rect x="0" y="233.858" width="70.8661" height="7.08661" class="st4"/> + <text x="19.26" y="239.2" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Applications</text> </g> + <g id="shape46-13" v:mID="46" v:groupContext="shape" transform="translate(396.85,92.126) rotate(90)"> + <title>Sheet.46</title> + <path d="M4.47 240.94 L4.83 240.94 L16.43 240.94" class="st5"/> + </g> + <g id="shape50-24" v:mID="50" v:groupContext="shape" transform="translate(184.252,-56.6929)"> + <title>Sheet.50</title> + <desc>smComSocket</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="42.5197" cy="233.858" width="85.04" height="14.1732"/> + <rect x="0" y="226.772" width="85.0394" height="14.1732" class="st1"/> + <text x="16.51" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>smComSocket</text> </g> + <g id="shape57-27" v:mID="57" v:groupContext="shape" transform="translate(196.299,-77.9528)"> + <title>Sheet.57</title> + <desc>SmCom Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="233.858" width="63.78" height="14.1732"/> + <path d="M0 240.94 L63.78 240.94 L63.78 226.77 L0 226.77 L0 240.94 Z" class="st7"/> + <text x="8.55" y="235.66" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SmCom Interface</text> </g> + <g id="shape63-30" v:mID="63" v:groupContext="shape" transform="translate(184.252,-35.4331)"> + <title>Sheet.63</title> + <desc>TCP/IP</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="42.5197" cy="233.858" width="85.04" height="14.1732"/> + <rect x="0" y="226.772" width="85.0394" height="14.1732" class="st8"/> + <text x="29.63" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP</text> </g> + <g id="shape69-33" v:mID="69" v:groupContext="shape" transform="translate(134.646,-148.819)"> + <title>Sheet.69</title> + <desc>Configure Tool</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="67.3228" cy="230.315" width="134.65" height="21.2598"/> + <rect x="0" y="219.685" width="134.646" height="21.2598" class="st4"/> + <text x="41.09" y="232.72" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Configure Tool</text> </g> + <g id="shape73-36" v:mID="73" v:groupContext="shape" transform="translate(354.331,-184.252)"> + <title>Sheet.73</title> + <desc>Platform Infrastructure</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="237.402" width="70.87" height="7.08661"/> + <rect x="0" y="233.858" width="70.8661" height="7.08661" class="st8"/> + <text x="5.76" y="239.2" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Platform Infrastructure</text> </g> + <g id="shape74-39" v:mID="74" v:groupContext="shape" transform="translate(28.3465,-148.819)"> + <title>Sheet.74</title> + <desc>OpenSSL Cmd Line tools</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="230.315" width="70.87" height="21.2598"/> + <rect x="0" y="219.685" width="70.8661" height="21.2598" class="st8"/> + <text x="8.53" y="227.91" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenSSL Cmd <tspan + x="18.31" dy="1.2em" class="st9">Line tools</tspan></text> </g> + <g id="shape75-43" v:mID="75" v:groupContext="shape" transform="translate(134.646,-106.299)"> + <title>Sheet.75</title> + <desc>Open-SSL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="230.315" width="42.52" height="21.2598"/> + <rect x="0" y="219.685" width="42.5197" height="21.2598" class="st8"/> + <text x="10.14" y="227.91" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Open-<tspan x="13.7" + dy="1.2em" class="st9">SSL</tspan></text> </g> + <g id="shape76-47" v:mID="76" v:groupContext="shape" transform="translate(453.543,92.126) rotate(90)"> + <title>Sheet.76</title> + <path d="M4.47 240.94 L4.83 240.94 L16.43 240.94" class="st5"/> + </g> + <g id="shape77-54" v:mID="77" v:groupContext="shape" transform="translate(503.15,92.126) rotate(90)"> + <title>Sheet.77</title> + <path d="M4.47 240.94 L4.83 240.94 L37.69 240.94" class="st5"/> + </g> + <g id="shape78-61" v:mID="78" v:groupContext="shape" transform="translate(42.5197,-106.299)"> + <title>Sheet.78</title> + <desc>Open-SSL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="230.315" width="42.52" height="21.2598"/> + <rect x="0" y="219.685" width="42.5197" height="21.2598" class="st8"/> + <text x="10.14" y="227.91" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Open-<tspan x="13.7" + dy="1.2em" class="st9">SSL</tspan></text> </g> + <g id="shape79-65" v:mID="79" v:groupContext="shape" transform="translate(304.724,92.126) rotate(90)"> + <title>Sheet.79</title> + <path d="M4.47 240.94 L4.83 240.94 L16.43 240.94" class="st5"/> + </g> + <g id="shape80-72" v:mID="80" v:groupContext="shape" v:layerMember="1" transform="translate(89.2913,-64.4528)"> + <title>Datastore</title> + <v:custProps> + <v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="1" v:invis="false" + v:ask="false" v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Department" v:lbl="Department" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visDescription" + v:val="VT4(Use to add a a database, data source, or data storage device to your system diagram.)"/> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <path d="M0 217.32 L0 237.57 A13.5 3.375 -180 1 0 27 237.57 L27 217.32 A13.5 3.375 -180 0 0 0 217.32 Z" class="st10"/> + <path d="M0 217.32 L0 237.57 A13.5 3.375 -180 1 0 27 237.57 L27 217.32 A13.5 3.375 -180 0 0 0 217.32" class="st11"/> + <path d="M0 217.32 A13.5 3.375 -180 1 0 27 217.32" class="st11"/> + </g> + <g id="shape81-76" v:mID="81" v:groupContext="shape" transform="translate(-111.804,295.715) rotate(-123.425)"> + <title>Sheet.81</title> + <path d="M2.9 237.54 L3.13 237.27 A69.3292 58.6695 66.5 0 1 84.91 240.94" class="st12"/> + </g> + <g id="shape82-81" v:mID="82" v:groupContext="shape" transform="translate(362.002,237.796) rotate(127.198)"> + <title>Sheet.82</title> + <path d="M2.97 237.61 L3.21 237.34 A69.9954 60.8879 59.35 0 1 88.97 240.94" class="st12"/> + </g> + <g id="shape83-86" v:mID="83" v:groupContext="shape" transform="translate(311.811,-35.4331)"> + <title>Sheet.83</title> + <desc>TCP/IP</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="233.858" width="42.52" height="14.1732"/> + <rect x="0" y="226.772" width="42.5197" height="14.1732" class="st8"/> + <text x="8.37" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP</text> </g> + <g id="shape85-89" v:mID="85" v:groupContext="shape" transform="translate(311.811,-148.819)"> + <title>Sheet.85</title> + <desc>JRCP_v1-Server</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="56.6929" cy="230.315" width="113.39" height="21.2598"/> + <rect x="0" y="219.685" width="113.386" height="21.2598" class="st4"/> + <text x="26.68" y="232.72" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>JRCP_v1-Server</text> </g> + <g id="shape87-92" v:mID="87" v:groupContext="shape" transform="translate(361.417,-77.9528)"> + <title>Sheet.87</title> + <desc>APDU</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="31.8898" cy="226.772" width="63.78" height="28.3465"/> + <rect x="0" y="212.598" width="63.7795" height="28.3465" class="st1"/> + <text x="20.78" y="223.8" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>APDU</text> </g> + <g id="shape88-95" v:mID="88" v:groupContext="shape" transform="translate(361.417,-56.6929)"> + <title>Sheet.88</title> + <desc>SCI2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="233.858" width="63.78" height="14.1732"/> + <rect x="0" y="226.772" width="63.7795" height="14.1732" class="st1"/> + <text x="20.11" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SCI2C</text> </g> + <g id="shape89-98" v:mID="89" v:groupContext="shape" transform="translate(367.795,-77.9528)"> + <title>Sheet.89</title> + <desc>SmCom Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="25.1575" cy="233.858" width="50.32" height="14.1732"/> + <path d="M0 240.94 L50.31 240.94 L50.31 226.77 L0 226.77 L0 240.94 Z" class="st7"/> + <text x="14.32" y="232.06" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SmCom <tspan + x="13.48" dy="1.2em" class="st9">Interface</tspan></text> </g> + <g id="shape90-102" v:mID="90" v:groupContext="shape" transform="translate(361.417,-35.4331)"> + <title>Sheet.90</title> + <desc>I2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="233.858" width="63.78" height="14.1732"/> + <rect x="0" y="226.772" width="63.7795" height="14.1732" class="st8"/> + <text x="25.67" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>I2C</text> </g> + <g id="shape91-105" v:mID="91" v:groupContext="shape" transform="translate(574.016,92.126) rotate(90)"> + <title>Sheet.91</title> + <path d="M4.47 240.94 L4.83 240.94 L94.38 240.94" class="st5"/> + </g> + <g id="shape92-112" v:mID="92" v:groupContext="shape" transform="translate(630.709,92.126) rotate(90)"> + <title>Sheet.92</title> + <path d="M4.47 240.94 L4.83 240.94 L37.69 240.94" class="st5"/> + </g> + <g id="shape93-119" v:mID="93" v:groupContext="shape" transform="translate(528.661,56.6929) rotate(90)"> + <title>Sheet.93</title> + <path d="M0 240.94 L170.08 240.94" class="st13"/> + </g> + <g id="shape94-122" v:mID="94" v:groupContext="shape" transform="translate(87.874,-4.96063)"> + <title>Sheet.94</title> + <desc>Development PC</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="46.7717" cy="231.732" width="93.55" height="18.4252"/> + <rect x="0" y="222.52" width="93.5433" height="18.4252" class="st14"/> + <text x="16.54" y="234.13" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Development PC</text> </g> + <g id="shape95-125" v:mID="95" v:groupContext="shape" transform="translate(314.646,-9.56693)"> + <title>Sheet.95</title> + <desc>iMX6UL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="46.7717" cy="236.339" width="93.55" height="9.2126"/> + <rect x="0" y="231.732" width="93.5433" height="9.2126" class="st14"/> + <text x="32.55" y="238.74" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>iMX6UL</text> </g> + <g id="shape96-128" v:mID="96" v:groupContext="shape" transform="translate(439.37,-35.4331)"> + <title>Rounded Rectangle.179</title> + <desc>A71CH</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="233.858" width="42.52" height="14.1732"/> + <path d="M4.25 240.94 L38.27 240.94 A4.2519 4.2519 -180 0 0 42.52 236.69 L42.52 231.02 A4.2519 4.2519 -180 0 0 38.27 + 226.77 L4.25 226.77 A4.2519 4.2519 -180 0 0 0 231.02 L0 236.69 A4.2519 4.2519 -180 0 0 4.25 240.94 Z" + class="st15"/> + <text x="8.37" y="236.26" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>A71CH</text> </g> + <g id="shape97-131" v:mID="97" v:groupContext="shape" transform="translate(226.772,-21.2598)"> + <title>Sheet.97</title> + <path d="M0 240.94 L106.3 240.94" class="st16"/> + </g> + <g id="shape98-134" v:mID="98" v:groupContext="shape" transform="translate(389.764,-21.2598)"> + <title>Sheet.98</title> + <path d="M0 240.94 L70.87 240.94" class="st16"/> + </g> + <g id="shape99-137" v:mID="99" v:groupContext="shape" transform="translate(467.717,205.512) rotate(90)"> + <title>Sheet.99</title> + <path d="M0 240.94 L14.17 240.94" class="st16"/> + </g> + <g id="shape100-140" v:mID="100" v:groupContext="shape" transform="translate(574.016,205.512) rotate(90)"> + <title>Sheet.100</title> + <path d="M0 240.94 L14.17 240.94" class="st16"/> + </g> + <g id="shape101-143" v:mID="101" v:groupContext="shape" transform="translate(630.709,205.512) rotate(90)"> + <title>Sheet.101</title> + <path d="M0 240.94 L14.17 240.94" class="st16"/> + </g> + <g id="shape103-146" v:mID="103" v:groupContext="shape" transform="translate(701.575,205.512) rotate(90)"> + <title>Sheet.103</title> + <path d="M0 240.94 L14.17 240.94" class="st16"/> + </g> + <g id="shape104-149" v:mID="104" v:groupContext="shape" transform="translate(413.858,-21.2598)"> + <title>Sheet.104</title> + <desc>(1)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="11.3386" cy="236.339" width="22.68" height="9.2126"/> + <rect x="0" y="231.732" width="22.6772" height="9.2126" class="st14"/> + <text x="6.45" y="238.74" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(1)</text> </g> + </g> +</svg>
diff --git a/doc/_images/A71CH_PersoDevSW_iMXOnly.svg b/doc/_images/A71CH_PersoDevSW_iMXOnly.svg new file mode 100644 index 0000000..ac90d1e --- /dev/null +++ b/doc/_images/A71CH_PersoDevSW_iMXOnly.svg
@@ -0,0 +1,317 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by Microsoft Visio, SVG Export A71CH_PersoDevSW_iMXOnly.svg Page-1 --> +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="5.7927in" height="2.98895in" + viewBox="0 0 417.074 215.204" xml:space="preserve" color-interpolation-filters="sRGB" class="st17"> + <v:documentProperties v:langID="1033" v:viewMarkup="false"> + <v:userDefs> + <v:ud v:nameU="msvConvertTheme"/> + </v:userDefs> + </v:documentProperties> + + <style type="text/css"> + <![CDATA[ + .st1 {fill:#d1ebf1;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st2 {fill:#000000;font-family:Arial;font-size:0.666664em} + .st3 {fill:#000000;font-family:Arial;font-size:0.499992em} + .st4 {fill:#f59d56;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st5 {marker-end:url(#mrkr5-20);marker-start:url(#mrkr5-17);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st6 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.08695652173913} + .st7 {fill:#99ff66;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st8 {font-size:1em} + .st9 {fill:#ffffff} + .st10 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st11 {marker-start:url(#mrkr5-17);stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st12 {fill:none;stroke:#000000;stroke-dasharray:2.16,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st13 {stroke:#000000;stroke-dasharray:1.68,1.2;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st14 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72} + .st15 {fill:#00b0f0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24} + .st16 {stroke:#000000;stroke-dasharray:0,3.75;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75} + .st17 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3} + ]]> + </style> + + <defs id="Markers"> + <g id="lend5"> + <path d="M 2 1 L 0 0 L 1.98117 -0.993387 C 1.67173 -0.364515 1.67301 0.372641 1.98465 1.00043 " style="stroke:none"/> + </g> + <marker id="mrkr5-17" class="st6" v:arrowType="5" v:arrowSize="2" v:setback="18.625" refX="18.625" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(11.5) "/> + </marker> + <marker id="mrkr5-20" class="st6" v:arrowType="5" v:arrowSize="2" v:setback="20.125" refX="-20.125" orient="auto" + markerUnits="strokeWidth" overflow="visible"> + <use xlink:href="#lend5" transform="scale(-11.5,-11.5) "/> + </marker> + </defs> + <g v:mID="0" v:index="1" v:groupContext="foregroundPage"> + <title>Page-1</title> + <v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394" + v:shadowOffsetY="-8.50394"/> + <v:layer v:name="Network" v:index="0"/> + <g id="shape3-1" v:mID="3" v:groupContext="shape" transform="translate(285.852,-108.785)"> + <title>Sheet.3</title> + <desc>A71CH_API</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="26.2205" cy="208.118" width="52.45" height="14.1732"/> + <rect x="0" y="201.031" width="52.4409" height="14.1732" class="st1"/> + <text x="4" y="210.52" class="st2" v:langID="1033"><v:paragraph/><v:tabList/>A71CH_API</text> </g> + <g id="shape21-4" v:mID="21" v:groupContext="shape" transform="translate(342.545,-193.825)"> + <title>Sheet.21</title> + <desc>Host Library Modules</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="211.661" width="70.87" height="7.08661"/> + <rect x="0" y="208.118" width="70.8661" height="7.08661" class="st1"/> + <text x="7.09" y="213.46" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Host Library Modules</text> </g> + <g id="shape44-7" v:mID="44" v:groupContext="shape" transform="translate(342.545,-207.998)"> + <title>Sheet.44</title> + <desc>Applications</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="211.661" width="70.87" height="7.08661"/> + <rect x="0" y="208.118" width="70.8661" height="7.08661" class="st4"/> + <text x="19.26" y="213.46" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Applications</text> </g> + <g id="shape46-10" v:mID="46" v:groupContext="shape" transform="translate(472.71,70.9861) rotate(90)"> + <title>Sheet.46</title> + <path d="M4.47 215.2 L4.83 215.2 L16.43 215.2" class="st5"/> + </g> + <g id="shape50-21" v:mID="50" v:groupContext="shape" transform="translate(122.86,-52.0923)"> + <title>Sheet.50</title> + <desc>SSH Client</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="208.118" width="56.7" height="14.1732"/> + <rect x="0" y="201.031" width="56.6929" height="14.1732" class="st7"/> + <text x="8.78" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SSH Client</text> </g> + <g id="shape63-24" v:mID="63" v:groupContext="shape" transform="translate(122.86,-30.8324)"> + <title>Sheet.63</title> + <desc>TCP/IP</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="208.118" width="56.7" height="14.1732"/> + <rect x="0" y="201.031" width="56.6929" height="14.1732" class="st7"/> + <text x="15.46" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP</text> </g> + <g id="shape69-27" v:mID="69" v:groupContext="shape" transform="translate(122.86,-144.218)"> + <title>Sheet.69</title> + <desc>Bash Shell</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="28.3465" cy="204.574" width="56.7" height="21.2598"/> + <rect x="0" y="193.945" width="56.6929" height="21.2598" class="st7"/> + <text x="9.22" y="206.97" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Bash Shell</text> </g> + <g id="shape73-30" v:mID="73" v:groupContext="shape" transform="translate(342.545,-179.651)"> + <title>Sheet.73</title> + <desc>Platform Infrastructure</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="211.661" width="70.87" height="7.08661"/> + <rect x="0" y="208.118" width="70.8661" height="7.08661" class="st7"/> + <text x="5.76" y="213.46" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Platform Infrastructure</text> </g> + <g id="shape74-33" v:mID="74" v:groupContext="shape" transform="translate(2.38753,-144.218)"> + <title>Sheet.74</title> + <desc>OpenSSL Cmd Line tools</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="35.4331" cy="204.574" width="70.87" height="21.2598"/> + <rect x="0" y="193.945" width="70.8661" height="21.2598" class="st7"/> + <text x="8.53" y="202.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>OpenSSL Cmd <tspan + x="18.31" dy="1.2em" class="st8">Line tools</tspan></text> </g> + <g id="shape75-37" v:mID="75" v:groupContext="shape" transform="translate(236.246,-101.699)"> + <title>Sheet.75</title> + <desc>Open-SSL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="204.574" width="42.52" height="21.2598"/> + <rect x="0" y="193.945" width="42.5197" height="21.2598" class="st7"/> + <text x="10.14" y="202.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Open-<tspan x="13.7" + dy="1.2em" class="st8">SSL</tspan></text> </g> + <g id="shape76-41" v:mID="76" v:groupContext="shape" transform="translate(522.316,70.9861) rotate(90)"> + <title>Sheet.76</title> + <path d="M4.47 215.2 L4.83 215.2 L16.43 215.2" class="st5"/> + </g> + <g id="shape77-48" v:mID="77" v:groupContext="shape" transform="translate(380.584,70.9861) rotate(90)"> + <title>Sheet.77</title> + <path d="M4.47 215.2 L4.83 215.2 L73.12 215.2" class="st5"/> + </g> + <g id="shape78-55" v:mID="78" v:groupContext="shape" transform="translate(16.5608,-101.699)"> + <title>Sheet.78</title> + <desc>Open-SSL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="204.574" width="42.52" height="21.2598"/> + <rect x="0" y="193.945" width="42.5197" height="21.2598" class="st7"/> + <text x="10.14" y="202.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Open-<tspan x="13.7" + dy="1.2em" class="st8">SSL</tspan></text> </g> + <g id="shape79-59" v:mID="79" v:groupContext="shape" transform="translate(253.025,70.9861) rotate(90)"> + <title>Sheet.79</title> + <path d="M4.47 215.2 L4.83 215.2 L16.43 215.2" class="st5"/> + </g> + <g id="shape80-66" v:mID="80" v:groupContext="shape" v:layerMember="0" transform="translate(63.3324,-59.8521)"> + <title>Datastore</title> + <v:custProps> + <v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="1" v:invis="false" + v:ask="false" v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + <v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" v:langID="1033" + v:val="VT4()"/> + <v:cp v:nameU="Department" v:lbl="Department" v:type="0" v:sortKey="1" v:invis="false" v:ask="false" + v:langID="1033" v:val="VT4()"/> + </v:custProps> + <v:userDefs> + <v:ud v:nameU="visDescription" + v:val="VT4(Use to add a a database, data source, or data storage device to your system diagram.)"/> + <v:ud v:nameU="visVersion" v:val="VT0(15):26"/> + </v:userDefs> + <path d="M0 191.58 L0 211.83 A13.5 3.375 -180 1 0 27 211.83 L27 191.58 A13.5 3.375 -180 0 0 0 191.58 Z" class="st9"/> + <path d="M0 191.58 L0 211.83 A13.5 3.375 -180 1 0 27 211.83 L27 191.58 A13.5 3.375 -180 0 0 0 191.58" class="st10"/> + <path d="M0 191.58 A13.5 3.375 -180 1 0 27 191.58" class="st10"/> + </g> + <g id="shape81-70" v:mID="81" v:groupContext="shape" transform="translate(-116.279,260.396) rotate(-123.425)"> + <title>Sheet.81</title> + <path d="M2.9 211.8 L3.13 211.53 A69.3292 58.6695 66.5 0 1 84.91 215.2" class="st11"/> + </g> + <g id="shape82-75" v:mID="82" v:groupContext="shape" transform="translate(315.54,201.094) rotate(127.198)"> + <title>Sheet.82</title> + <path d="M2.97 211.87 L3.21 211.6 A69.9954 60.8879 59.35 0 1 88.97 215.2" class="st11"/> + </g> + <g id="shape83-80" v:mID="83" v:groupContext="shape" transform="translate(207.899,-30.8324)"> + <title>Sheet.83</title> + <desc>TCP/IP</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="208.118" width="63.78" height="14.1732"/> + <rect x="0" y="201.031" width="63.7795" height="14.1732" class="st7"/> + <text x="19" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TCP/IP</text> </g> + <g id="shape85-83" v:mID="85" v:groupContext="shape" transform="translate(236.246,-144.218)"> + <title>Sheet.85</title> + <desc>Configure Tool</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="63.7795" cy="204.574" width="127.56" height="21.2598"/> + <rect x="0" y="193.945" width="127.559" height="21.2598" class="st4"/> + <text x="37.54" y="206.97" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Configure Tool</text> </g> + <g id="shape87-86" v:mID="87" v:groupContext="shape" transform="translate(285.852,-73.3521)"> + <title>Sheet.87</title> + <desc>APDU</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/> + <v:textRect cx="37.2047" cy="201.031" width="74.41" height="28.3465"/> + <rect x="0" y="186.858" width="74.4094" height="28.3465" class="st1"/> + <text x="26.09" y="198.06" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>APDU</text> </g> + <g id="shape88-89" v:mID="88" v:groupContext="shape" transform="translate(285.852,-52.0923)"> + <title>Sheet.88</title> + <desc>SCI2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="37.2047" cy="208.118" width="74.41" height="14.1732"/> + <rect x="0" y="201.031" width="74.4094" height="14.1732" class="st1"/> + <text x="25.42" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SCI2C</text> </g> + <g id="shape89-92" v:mID="89" v:groupContext="shape" transform="translate(303.214,-73.3521)"> + <title>Sheet.89</title> + <desc>SmCom Interface</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="25.1575" cy="208.118" width="50.32" height="14.1732"/> + <path d="M0 215.2 L50.31 215.2 L50.31 201.03 L0 201.03 L0 215.2 Z" class="st12"/> + <text x="14.32" y="206.32" class="st3" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SmCom <tspan + x="13.48" dy="1.2em" class="st8">Interface</tspan></text> </g> + <g id="shape90-96" v:mID="90" v:groupContext="shape" transform="translate(285.852,-30.8324)"> + <title>Sheet.90</title> + <desc>I2C</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="37.2047" cy="208.118" width="74.41" height="14.1732"/> + <rect x="0" y="201.031" width="74.4094" height="14.1732" class="st7"/> + <text x="30.98" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>I2C</text> </g> + <g id="shape91-99" v:mID="91" v:groupContext="shape" transform="translate(214.986,-66.2655)"> + <title>Sheet.91</title> + <path d="M16.79 127.37 L16.43 127.37 L0 127.5 L0 210.37" class="st5"/> + </g> + <g id="shape92-106" v:mID="92" v:groupContext="shape" transform="translate(564.836,70.9861) rotate(90)"> + <title>Sheet.92</title> + <path d="M4.47 215.2 L4.83 215.2 L37.69 215.2" class="st5"/> + </g> + <g id="shape93-113" v:mID="93" v:groupContext="shape" transform="translate(413.182,35.5531) rotate(90)"> + <title>Sheet.93</title> + <path d="M0 215.2 L170.08 215.2" class="st13"/> + </g> + <g id="shape94-116" v:mID="94" v:groupContext="shape" transform="translate(23.6474,-0.36)"> + <title>Sheet.94</title> + <desc>Development PC</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="46.7717" cy="205.992" width="93.55" height="18.4252"/> + <rect x="0" y="196.779" width="93.5433" height="18.4252" class="st14"/> + <text x="16.54" y="208.39" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Development PC</text> </g> + <g id="shape95-119" v:mID="95" v:groupContext="shape" transform="translate(224.907,-4.9663)"> + <title>Sheet.95</title> + <desc>iMX6UL</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="46.7717" cy="210.598" width="93.55" height="9.2126"/> + <rect x="0" y="205.992" width="93.5433" height="9.2126" class="st14"/> + <text x="32.55" y="213" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>iMX6UL</text> </g> + <g id="shape96-122" v:mID="96" v:groupContext="shape" transform="translate(374.435,-30.8324)"> + <title>Rounded Rectangle.179</title> + <desc>A71CH</desc> + <v:userDefs> + <v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/> + <v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15748031496063):24"/> + <v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/> + <v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + <v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.059055118110236):1"/> + </v:userDefs> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="21.2598" cy="208.118" width="42.52" height="14.1732"/> + <path d="M4.25 215.2 L38.27 215.2 A4.2519 4.2519 -180 0 0 42.52 210.95 L42.52 205.28 A4.2519 4.2519 -180 0 0 38.27 201.03 + L4.25 201.03 A4.2519 4.2519 -180 0 0 0 205.28 L0 210.95 A4.2519 4.2519 -180 0 0 4.25 215.2 Z" class="st15"/> + <text x="8.37" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>A71CH</text> </g> + <g id="shape97-125" v:mID="97" v:groupContext="shape" transform="translate(137.033,-16.6592)"> + <title>Sheet.97</title> + <path d="M0 215.2 L106.3 215.2" class="st16"/> + </g> + <g id="shape98-128" v:mID="98" v:groupContext="shape" transform="translate(324.828,-16.6592)"> + <title>Sheet.98</title> + <path d="M0 215.2 L70.87 215.2" class="st16"/> + </g> + <g id="shape99-131" v:mID="99" v:groupContext="shape" transform="translate(352.238,184.372) rotate(90)"> + <title>Sheet.99</title> + <path d="M0 215.2 L14.17 215.2" class="st16"/> + </g> + <g id="shape100-134" v:mID="100" v:groupContext="shape" transform="translate(458.537,184.372) rotate(90)"> + <title>Sheet.100</title> + <path d="M0 215.2 L14.17 215.2" class="st16"/> + </g> + <g id="shape101-137" v:mID="101" v:groupContext="shape" transform="translate(539.824,184.372) rotate(90)"> + <title>Sheet.101</title> + <path d="M0 215.2 L14.17 215.2" class="st16"/> + </g> + <g id="shape103-140" v:mID="103" v:groupContext="shape" transform="translate(610.899,184.372) rotate(90)"> + <title>Sheet.103</title> + <path d="M0 215.2 L14.17 215.2" class="st16"/> + </g> + <g id="shape104-143" v:mID="104" v:groupContext="shape" transform="translate(349.632,-16.6592)"> + <title>Sheet.104</title> + <desc>(1)</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="11.3386" cy="210.598" width="22.68" height="9.2126"/> + <rect x="0" y="205.992" width="22.6772" height="9.2126" class="st14"/> + <text x="6.45" y="213" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>(1)</text> </g> + <g id="shape105-146" v:mID="105" v:groupContext="shape" transform="translate(207.899,-52.0923)"> + <title>Sheet.105</title> + <desc>SSH Server</desc> + <v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/> + <v:textRect cx="31.8898" cy="208.118" width="63.78" height="14.1732"/> + <rect x="0" y="201.031" width="63.7795" height="14.1732" class="st7"/> + <text x="10.77" y="210.52" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>SSH Server</text> </g> + </g> +</svg>
diff --git a/doc/_images/HD-SE-connections.png b/doc/_images/HD-SE-connections.png new file mode 100644 index 0000000..7968185 --- /dev/null +++ b/doc/_images/HD-SE-connections.png Binary files differ
diff --git a/doc/_images/I2C-Master-operation.png b/doc/_images/I2C-Master-operation.png new file mode 100644 index 0000000..7034e2e --- /dev/null +++ b/doc/_images/I2C-Master-operation.png Binary files differ
diff --git a/doc/_images/I2C-operation.png b/doc/_images/I2C-operation.png new file mode 100644 index 0000000..d4bd861 --- /dev/null +++ b/doc/_images/I2C-operation.png Binary files differ
diff --git a/doc/_images/Overview.jpg b/doc/_images/Overview.jpg new file mode 100644 index 0000000..c1892fb --- /dev/null +++ b/doc/_images/Overview.jpg Binary files differ
diff --git a/doc/_images/Package.jpg b/doc/_images/Package.jpg new file mode 100644 index 0000000..5a3e2f3 --- /dev/null +++ b/doc/_images/Package.jpg Binary files differ
diff --git a/doc/_images/Package_generator.jpg b/doc/_images/Package_generator.jpg new file mode 100644 index 0000000..dd725a6 --- /dev/null +++ b/doc/_images/Package_generator.jpg Binary files differ
diff --git a/doc/_images/SE050-RPi.jpg b/doc/_images/SE050-RPi.jpg new file mode 100644 index 0000000..d3f07da --- /dev/null +++ b/doc/_images/SE050-RPi.jpg Binary files differ
diff --git a/doc/_images/akm-with-se050.png b/doc/_images/akm-with-se050.png new file mode 100644 index 0000000..a029720 --- /dev/null +++ b/doc/_images/akm-with-se050.png Binary files differ
diff --git a/doc/_images/asymm-decrypt.png b/doc/_images/asymm-decrypt.png new file mode 100644 index 0000000..d83c0f5 --- /dev/null +++ b/doc/_images/asymm-decrypt.png Binary files differ
diff --git a/doc/_images/asymm-encrypt.png b/doc/_images/asymm-encrypt.png new file mode 100644 index 0000000..a40c821 --- /dev/null +++ b/doc/_images/asymm-encrypt.png Binary files differ
diff --git a/doc/_images/asymm-sign.png b/doc/_images/asymm-sign.png new file mode 100644 index 0000000..2d10dfd --- /dev/null +++ b/doc/_images/asymm-sign.png Binary files differ
diff --git a/doc/_images/asymm-verify.png b/doc/_images/asymm-verify.png new file mode 100644 index 0000000..4fb8b98 --- /dev/null +++ b/doc/_images/asymm-verify.png Binary files differ
diff --git a/doc/_images/auth-object-fastscp-use.png b/doc/_images/auth-object-fastscp-use.png new file mode 100644 index 0000000..347c6d3 --- /dev/null +++ b/doc/_images/auth-object-fastscp-use.png Binary files differ
diff --git a/doc/_images/auth-object-pin-create.png b/doc/_images/auth-object-pin-create.png new file mode 100644 index 0000000..05bef76 --- /dev/null +++ b/doc/_images/auth-object-pin-create.png Binary files differ
diff --git a/doc/_images/auth-object-pin-use.png b/doc/_images/auth-object-pin-use.png new file mode 100644 index 0000000..813c4b7 --- /dev/null +++ b/doc/_images/auth-object-pin-use.png Binary files differ
diff --git a/doc/_images/block_diagram.png b/doc/_images/block_diagram.png new file mode 100644 index 0000000..ab3c74b --- /dev/null +++ b/doc/_images/block_diagram.png Binary files differ
diff --git a/doc/_images/blockdiag-8e9a231270e7538561229123a8e96ed3cc7cfd82.png b/doc/_images/blockdiag-8e9a231270e7538561229123a8e96ed3cc7cfd82.png new file mode 100644 index 0000000..31f14fe --- /dev/null +++ b/doc/_images/blockdiag-8e9a231270e7538561229123a8e96ed3cc7cfd82.png Binary files differ
diff --git a/doc/_images/build_project.jpg b/doc/_images/build_project.jpg new file mode 100644 index 0000000..41b1bf8 --- /dev/null +++ b/doc/_images/build_project.jpg Binary files differ
diff --git a/doc/_images/cm_010_import_general_projects.png b/doc/_images/cm_010_import_general_projects.png new file mode 100644 index 0000000..e83d66c --- /dev/null +++ b/doc/_images/cm_010_import_general_projects.png Binary files differ
diff --git a/doc/_images/cm_015_import_general_projects.png b/doc/_images/cm_015_import_general_projects.png new file mode 100644 index 0000000..04d71ff --- /dev/null +++ b/doc/_images/cm_015_import_general_projects.png Binary files differ
diff --git a/doc/_images/cm_020_import_cmake_generated_project.png b/doc/_images/cm_020_import_cmake_generated_project.png new file mode 100644 index 0000000..b7a0c7c --- /dev/null +++ b/doc/_images/cm_020_import_cmake_generated_project.png Binary files differ
diff --git a/doc/_images/cm_030_import_manual_cmake_project.png b/doc/_images/cm_030_import_manual_cmake_project.png new file mode 100644 index 0000000..bcf95eb --- /dev/null +++ b/doc/_images/cm_030_import_manual_cmake_project.png Binary files differ
diff --git a/doc/_images/cm_040_change_cmake_configuration.png b/doc/_images/cm_040_change_cmake_configuration.png new file mode 100644 index 0000000..e17fcab --- /dev/null +++ b/doc/_images/cm_040_change_cmake_configuration.png Binary files differ
diff --git a/doc/_images/cm_050_change_target_makefile.png b/doc/_images/cm_050_change_target_makefile.png new file mode 100644 index 0000000..a4afaad --- /dev/null +++ b/doc/_images/cm_050_change_target_makefile.png Binary files differ
diff --git a/doc/_images/cm_090_short_cut_edit_cache.png b/doc/_images/cm_090_short_cut_edit_cache.png new file mode 100644 index 0000000..2cb857a --- /dev/null +++ b/doc/_images/cm_090_short_cut_edit_cache.png Binary files differ
diff --git a/doc/_images/container-session-ks-ko.png b/doc/_images/container-session-ks-ko.png new file mode 100644 index 0000000..be0b892 --- /dev/null +++ b/doc/_images/container-session-ks-ko.png Binary files differ
diff --git a/doc/_images/ex-boot-no-rtos-embedded.png b/doc/_images/ex-boot-no-rtos-embedded.png new file mode 100644 index 0000000..e65b7fa --- /dev/null +++ b/doc/_images/ex-boot-no-rtos-embedded.png Binary files differ
diff --git a/doc/_images/ex-boot-windows.png b/doc/_images/ex-boot-windows.png new file mode 100644 index 0000000..8eb7fec --- /dev/null +++ b/doc/_images/ex-boot-windows.png Binary files differ
diff --git a/doc/_images/ex-boot-with-rtos-embedded.png b/doc/_images/ex-boot-with-rtos-embedded.png new file mode 100644 index 0000000..3b4699d --- /dev/null +++ b/doc/_images/ex-boot-with-rtos-embedded.png Binary files differ
diff --git a/doc/_images/flashed.jpg b/doc/_images/flashed.jpg new file mode 100644 index 0000000..fd32b5d --- /dev/null +++ b/doc/_images/flashed.jpg Binary files differ
diff --git a/doc/_images/flow_chart1.png b/doc/_images/flow_chart1.png new file mode 100644 index 0000000..5221d46 --- /dev/null +++ b/doc/_images/flow_chart1.png Binary files differ
diff --git a/doc/_images/flow_chart2.png b/doc/_images/flow_chart2.png new file mode 100644 index 0000000..094989a --- /dev/null +++ b/doc/_images/flow_chart2.png Binary files differ
diff --git a/doc/_images/flow_chart3.png b/doc/_images/flow_chart3.png new file mode 100644 index 0000000..5128f69 --- /dev/null +++ b/doc/_images/flow_chart3.png Binary files differ
diff --git a/doc/_images/flow_chart4.png b/doc/_images/flow_chart4.png new file mode 100644 index 0000000..85d519d --- /dev/null +++ b/doc/_images/flow_chart4.png Binary files differ
diff --git a/doc/_images/flow_chart5.png b/doc/_images/flow_chart5.png new file mode 100644 index 0000000..df2d0a9 --- /dev/null +++ b/doc/_images/flow_chart5.png Binary files differ
diff --git a/doc/_images/gui_flash_tool.jpg b/doc/_images/gui_flash_tool.jpg new file mode 100644 index 0000000..22043e3 --- /dev/null +++ b/doc/_images/gui_flash_tool.jpg Binary files differ
diff --git a/doc/_images/i2cm-accelerometer-k64f-photo.jpg b/doc/_images/i2cm-accelerometer-k64f-photo.jpg new file mode 100644 index 0000000..fb8c450 --- /dev/null +++ b/doc/_images/i2cm-accelerometer-k64f-photo.jpg Binary files differ
diff --git a/doc/_images/i2cm-accelerometer-k64f-wiring.png b/doc/_images/i2cm-accelerometer-k64f-wiring.png new file mode 100644 index 0000000..0f21454 --- /dev/null +++ b/doc/_images/i2cm-accelerometer-k64f-wiring.png Binary files differ
diff --git a/doc/_images/i2cm-config-attread.png b/doc/_images/i2cm-config-attread.png new file mode 100644 index 0000000..f110522 --- /dev/null +++ b/doc/_images/i2cm-config-attread.png Binary files differ
diff --git a/doc/_images/i2cm-config-read-write.png b/doc/_images/i2cm-config-read-write.png new file mode 100644 index 0000000..05e558d --- /dev/null +++ b/doc/_images/i2cm-config-read-write.png Binary files differ
diff --git a/doc/_images/img-sss.png b/doc/_images/img-sss.png new file mode 100644 index 0000000..3cfafef --- /dev/null +++ b/doc/_images/img-sss.png Binary files differ
diff --git a/doc/_images/import_projects.jpg b/doc/_images/import_projects.jpg new file mode 100644 index 0000000..f6d5076 --- /dev/null +++ b/doc/_images/import_projects.jpg Binary files differ
diff --git a/doc/_images/imx8evk_se050.jpg b/doc/_images/imx8evk_se050.jpg new file mode 100644 index 0000000..1753270 --- /dev/null +++ b/doc/_images/imx8evk_se050.jpg Binary files differ
diff --git a/doc/_images/key_object-create-key.png b/doc/_images/key_object-create-key.png new file mode 100644 index 0000000..18473b8 --- /dev/null +++ b/doc/_images/key_object-create-key.png Binary files differ
diff --git a/doc/_images/key_object-set-key.png b/doc/_images/key_object-set-key.png new file mode 100644 index 0000000..90ef34e --- /dev/null +++ b/doc/_images/key_object-set-key.png Binary files differ
diff --git a/doc/_images/key_object-use-key.png b/doc/_images/key_object-use-key.png new file mode 100644 index 0000000..f3c993f --- /dev/null +++ b/doc/_images/key_object-use-key.png Binary files differ
diff --git a/doc/_images/key_store.png b/doc/_images/key_store.png new file mode 100644 index 0000000..7e2855e --- /dev/null +++ b/doc/_images/key_store.png Binary files differ
diff --git a/doc/_images/lpc55s_se050.jpg b/doc/_images/lpc55s_se050.jpg new file mode 100644 index 0000000..ea907fd --- /dev/null +++ b/doc/_images/lpc55s_se050.jpg Binary files differ
diff --git a/doc/_images/lpc55s_wifi.jpg b/doc/_images/lpc55s_wifi.jpg new file mode 100644 index 0000000..f931189 --- /dev/null +++ b/doc/_images/lpc55s_wifi.jpg Binary files differ
diff --git a/doc/_images/mcux_InstallSDK.png b/doc/_images/mcux_InstallSDK.png new file mode 100644 index 0000000..64f1b20 --- /dev/null +++ b/doc/_images/mcux_InstallSDK.png Binary files differ
diff --git a/doc/_images/mcux_build.png b/doc/_images/mcux_build.png new file mode 100644 index 0000000..f7afe08 --- /dev/null +++ b/doc/_images/mcux_build.png Binary files differ
diff --git a/doc/_images/mcux_debug.png b/doc/_images/mcux_debug.png new file mode 100644 index 0000000..ed6cf23 --- /dev/null +++ b/doc/_images/mcux_debug.png Binary files differ
diff --git a/doc/_images/mcux_play.jpg b/doc/_images/mcux_play.jpg new file mode 100644 index 0000000..3735dfe --- /dev/null +++ b/doc/_images/mcux_play.jpg Binary files differ
diff --git a/doc/_images/mcux_selectjlinkopensda.png b/doc/_images/mcux_selectjlinkopensda.png new file mode 100644 index 0000000..6242b79 --- /dev/null +++ b/doc/_images/mcux_selectjlinkopensda.png Binary files differ
diff --git a/doc/_images/object_policy_attach.jpg b/doc/_images/object_policy_attach.jpg new file mode 100644 index 0000000..deb9cd6 --- /dev/null +++ b/doc/_images/object_policy_attach.jpg Binary files differ
diff --git a/doc/_images/object_policy_create.jpg b/doc/_images/object_policy_create.jpg new file mode 100644 index 0000000..1fb2f7c --- /dev/null +++ b/doc/_images/object_policy_create.jpg Binary files differ
diff --git a/doc/_images/object_policy_display.jpg b/doc/_images/object_policy_display.jpg new file mode 100644 index 0000000..b2b9b85 --- /dev/null +++ b/doc/_images/object_policy_display.jpg Binary files differ
diff --git a/doc/_images/open62541_sss.jpg b/doc/_images/open62541_sss.jpg new file mode 100644 index 0000000..e6a3dab --- /dev/null +++ b/doc/_images/open62541_sss.jpg Binary files differ
diff --git a/doc/_images/policy-types.png b/doc/_images/policy-types.png new file mode 100644 index 0000000..acf75b9 --- /dev/null +++ b/doc/_images/policy-types.png Binary files differ
diff --git a/doc/_images/program_only.jpg b/doc/_images/program_only.jpg new file mode 100644 index 0000000..b88dd1d --- /dev/null +++ b/doc/_images/program_only.jpg Binary files differ
diff --git a/doc/_images/sdk-010-add-sdk-to-mcux.png b/doc/_images/sdk-010-add-sdk-to-mcux.png new file mode 100644 index 0000000..4b7af82 --- /dev/null +++ b/doc/_images/sdk-010-add-sdk-to-mcux.png Binary files differ
diff --git a/doc/_images/sdk-020-accept-to-add.png b/doc/_images/sdk-020-accept-to-add.png new file mode 100644 index 0000000..b3e72e1 --- /dev/null +++ b/doc/_images/sdk-020-accept-to-add.png Binary files differ
diff --git a/doc/_images/sdk-030-new-sdk-added.png b/doc/_images/sdk-030-new-sdk-added.png new file mode 100644 index 0000000..1dfcb8d --- /dev/null +++ b/doc/_images/sdk-030-new-sdk-added.png Binary files differ
diff --git a/doc/_images/sdk-040-import-sdk-examples.png b/doc/_images/sdk-040-import-sdk-examples.png new file mode 100644 index 0000000..bd6b8c7 --- /dev/null +++ b/doc/_images/sdk-040-import-sdk-examples.png Binary files differ
diff --git a/doc/_images/sdk-050-select-with-se050.png b/doc/_images/sdk-050-select-with-se050.png new file mode 100644 index 0000000..f0f0e6d --- /dev/null +++ b/doc/_images/sdk-050-select-with-se050.png Binary files differ
diff --git a/doc/_images/sdk-060-add-project-of-your-choice.png b/doc/_images/sdk-060-add-project-of-your-choice.png new file mode 100644 index 0000000..757d915 --- /dev/null +++ b/doc/_images/sdk-060-add-project-of-your-choice.png Binary files differ
diff --git a/doc/_images/sdk-070-example-specific-configurations.png b/doc/_images/sdk-070-example-specific-configurations.png new file mode 100644 index 0000000..819cda5 --- /dev/null +++ b/doc/_images/sdk-070-example-specific-configurations.png Binary files differ
diff --git a/doc/_images/sdk-080-ready-to-test.png b/doc/_images/sdk-080-ready-to-test.png new file mode 100644 index 0000000..bf921c1 --- /dev/null +++ b/doc/_images/sdk-080-ready-to-test.png Binary files differ
diff --git a/doc/_images/sdk_selectSwComp.png b/doc/_images/sdk_selectSwComp.png new file mode 100644 index 0000000..dc810b3 --- /dev/null +++ b/doc/_images/sdk_selectSwComp.png Binary files differ
diff --git a/doc/_images/se05x_get_info.png b/doc/_images/se05x_get_info.png new file mode 100644 index 0000000..8e19062 --- /dev/null +++ b/doc/_images/se05x_get_info.png Binary files differ
diff --git a/doc/_images/security.jpg b/doc/_images/security.jpg new file mode 100644 index 0000000..8f090cd --- /dev/null +++ b/doc/_images/security.jpg Binary files differ
diff --git a/doc/_images/sems_lite_getCardcontent.png b/doc/_images/sems_lite_getCardcontent.png new file mode 100644 index 0000000..42ee59b --- /dev/null +++ b/doc/_images/sems_lite_getCardcontent.png Binary files differ
diff --git a/doc/_images/sems_lite_getPublickey.png b/doc/_images/sems_lite_getPublickey.png new file mode 100644 index 0000000..752f6ee --- /dev/null +++ b/doc/_images/sems_lite_getPublickey.png Binary files differ
diff --git a/doc/_images/sems_lite_getUUID.png b/doc/_images/sems_lite_getUUID.png new file mode 100644 index 0000000..64825ab --- /dev/null +++ b/doc/_images/sems_lite_getUUID.png Binary files differ
diff --git a/doc/_images/session.png b/doc/_images/session.png new file mode 100644 index 0000000..0148159 --- /dev/null +++ b/doc/_images/session.png Binary files differ
diff --git a/doc/_images/start_debug.jpg b/doc/_images/start_debug.jpg new file mode 100644 index 0000000..60a0b5d --- /dev/null +++ b/doc/_images/start_debug.jpg Binary files differ
diff --git a/doc/_images/uid_log.png b/doc/_images/uid_log.png new file mode 100644 index 0000000..3d70f5d --- /dev/null +++ b/doc/_images/uid_log.png Binary files differ
diff --git a/doc/_images/uid_log_cli.png b/doc/_images/uid_log_cli.png new file mode 100644 index 0000000..38969a4 --- /dev/null +++ b/doc/_images/uid_log_cli.png Binary files differ
diff --git a/doc/_images/uid_log_vcom.png b/doc/_images/uid_log_vcom.png new file mode 100644 index 0000000..6ecc2a4 --- /dev/null +++ b/doc/_images/uid_log_vcom.png Binary files differ
diff --git a/doc/_images/update_makefile.jpg b/doc/_images/update_makefile.jpg new file mode 100644 index 0000000..10d5650 --- /dev/null +++ b/doc/_images/update_makefile.jpg Binary files differ
diff --git a/doc/_images/user_in_client_conf.jpg b/doc/_images/user_in_client_conf.jpg new file mode 100644 index 0000000..944c8b6 --- /dev/null +++ b/doc/_images/user_in_client_conf.jpg Binary files differ
diff --git a/doc/_images/vs2019-installer-import-configuration-1.png b/doc/_images/vs2019-installer-import-configuration-1.png new file mode 100644 index 0000000..c00fc8a --- /dev/null +++ b/doc/_images/vs2019-installer-import-configuration-1.png Binary files differ
diff --git a/doc/_images/vs2019-installer-import-configuration-2.png b/doc/_images/vs2019-installer-import-configuration-2.png new file mode 100644 index 0000000..28c9331 --- /dev/null +++ b/doc/_images/vs2019-installer-import-configuration-2.png Binary files differ
diff --git a/doc/_images/vs2019-installer-import-configuration-3.png b/doc/_images/vs2019-installer-import-configuration-3.png new file mode 100644 index 0000000..b1d0ce5 --- /dev/null +++ b/doc/_images/vs2019-installer-import-configuration-3.png Binary files differ
diff --git a/doc/_images/wifiEAP.jpg b/doc/_images/wifiEAP.jpg new file mode 100644 index 0000000..b9d34c5 --- /dev/null +++ b/doc/_images/wifiEAP.jpg Binary files differ
diff --git a/doc/_static/NXP_logo_JPG.jpg b/doc/_static/NXP_logo_JPG.jpg new file mode 100644 index 0000000..eecb732 --- /dev/null +++ b/doc/_static/NXP_logo_JPG.jpg Binary files differ
diff --git a/doc/_static/basic.css b/doc/_static/basic.css new file mode 100644 index 0000000..0119285 --- /dev/null +++ b/doc/_static/basic.css
@@ -0,0 +1,768 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > p:first-child, +td > p:first-child { + margin-top: 0px; +} + +th > p:last-child, +td > p:last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +li > p:first-child { + margin-top: 0px; +} + +li > p:last-child { + margin-bottom: 0px; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > p:first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file
diff --git a/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.css b/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.css new file mode 100644 index 0000000..09e88ce --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.css
@@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-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); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +}
diff --git a/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css b/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css new file mode 100644 index 0000000..f4ede63 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/css/bootstrap-responsive.min.css
@@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-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)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/doc/_static/bootstrap-2.3.2/css/bootstrap.css b/doc/_static/bootstrap-2.3.2/css/bootstrap.css new file mode 100644 index 0000000..b725064 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/css/bootstrap.css
@@ -0,0 +1,6167 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-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 linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-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-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.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-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-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; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-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-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +}
diff --git a/doc/_static/bootstrap-2.3.2/css/bootstrap.min.css b/doc/_static/bootstrap-2.3.2/css/bootstrap.min.css new file mode 100644 index 0000000..b6428e6 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/css/bootstrap.min.css
@@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png b/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings-white.png Binary files differ
diff --git a/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings.png b/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings.png new file mode 100644 index 0000000..a996999 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/img/glyphicons-halflings.png Binary files differ
diff --git a/doc/_static/bootstrap-2.3.2/js/bootstrap.js b/doc/_static/bootstrap-2.3.2/js/bootstrap.js new file mode 100644 index 0000000..638bb18 --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/js/bootstrap.js
@@ -0,0 +1,2287 @@ +/* =================================================== + * bootstrap-transition.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $(function () { + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-alert.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT NO CONFLICT + * ================= */ + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + /* ALERT DATA-API + * ============== */ + + $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-button.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON NO CONFLICT + * ================== */ + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + /* BUTTON DATA-API + * =============== */ + + $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-carousel.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + if (this.interval) clearInterval(this.interval); + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , getActiveIndex: function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + return this.$items.index(this.$active) + } + + , to: function (pos) { + var activeIndex = this.getActiveIndex() + , that = this + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-collapse.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================ + * bootstrap-dropdown.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus) + } + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $('.dropdown-backdrop').remove() + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.$jqTheme || window.jQuery); +/* ========================================================= + * bootstrap-modal.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.options.remote && this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : + that.$element.focus().trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + , enforceFocus: function () { + var that = this + $(document).on('focusin.modal', function (e) { + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } + + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.modal') + } + } + + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + , hideModal: function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden') + }) + } + + , removeBackdrop: function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') + .appendTo(document.body) + + this.$backdrop.click( + this.options.backdrop == 'static' ? + $.proxy(this.$element[0].focus, this.$element[0]) + : $.proxy(this.hide, this) + ) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop.one($.support.transition.end, callback) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one($.support.transition.end, callback) : + callback() + + } else if (callback) { + callback() + } + } + } + + + /* MODAL PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.modal + + $.fn.modal = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('modal') + , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option]() + else if (options.show) data.show() + }) + } + + $.fn.modal.defaults = { + backdrop: true + , keyboard: true + , show: true + } + + $.fn.modal.Constructor = Modal + + + /* MODAL NO CONFLICT + * ================= */ + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + /* MODAL DATA-API + * ============== */ + + $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + , href = $this.attr('href') + , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) + + e.preventDefault() + + $target + .modal(option) + .one('hide', function () { + $this.focus() + }) + }) + +}(window.$jqTheme || window.jQuery); +/* =========================================================== + * bootstrap-tooltip.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#tooltips + * Inspired by the original jQuery.tipsy by Jason Frame + * =========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* TOOLTIP PUBLIC CLASS DEFINITION + * =============================== */ + + var Tooltip = function (element, options) { + this.init('tooltip', element, options) + } + + Tooltip.prototype = { + + constructor: Tooltip + + , init: function (type, element, options) { + var eventIn + , eventOut + , triggers + , trigger + , i + + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.enabled = true + + triggers = this.options.trigger.split(' ') + + for (i = triggers.length; i--;) { + trigger = triggers[i] + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + , getOptions: function (options) { + options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + , enter: function (e) { + var defaults = $.fn[this.type].defaults + , options = {} + , self + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }, this) + + self = $(e.currentTarget)[this.type](options).data(this.type) + + if (!self.options.delay || !self.options.delay.show) return self.show() + + clearTimeout(this.timeout) + self.hoverState = 'in' + this.timeout = setTimeout(function() { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + , leave: function (e) { + var self = $(e.currentTarget)[this.type](this._options).data(this.type) + + if (this.timeout) clearTimeout(this.timeout) + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.hoverState = 'out' + this.timeout = setTimeout(function() { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + , show: function () { + var $tip + , pos + , actualWidth + , actualHeight + , placement + , tp + , e = $.Event('show') + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $tip = this.tip() + this.setContent() + + if (this.options.animation) { + $tip.addClass('fade') + } + + placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + pos = this.getPosition() + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + switch (placement) { + case 'bottom': + tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'top': + tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'left': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} + break + case 'right': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} + break + } + + this.applyPlacement(tp, placement) + this.$element.trigger('shown') + } + } + + , applyPlacement: function(offset, placement){ + var $tip = this.tip() + , width = $tip[0].offsetWidth + , height = $tip[0].offsetHeight + , actualWidth + , actualHeight + , delta + , replace + + $tip + .offset(offset) + .addClass(placement) + .addClass('in') + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + replace = true + } + + if (placement == 'bottom' || placement == 'top') { + delta = 0 + + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 + $tip.offset(offset) + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + , replaceArrow: function(delta, dimension, position){ + this + .arrow() + .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + + , setContent: function () { + var $tip = this.tip() + , title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + , hide: function () { + var that = this + , $tip = this.tip() + , e = $.Event('hide') + + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + function removeWithAnimation() { + var timeout = setTimeout(function () { + $tip.off($.support.transition.end).detach() + }, 500) + + $tip.one($.support.transition.end, function () { + clearTimeout(timeout) + $tip.detach() + }) + } + + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() + + this.$element.trigger('hidden') + + return this + } + + , fixTitle: function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + , hasContent: function () { + return this.getTitle() + } + + , getPosition: function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) + } + + , getTitle: function () { + var title + , $e = this.$element + , o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + , tip: function () { + return this.$tip = this.$tip || $(this.options.template) + } + + , arrow: function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } + + , validate: function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + , enable: function () { + this.enabled = true + } + + , disable: function () { + this.enabled = false + } + + , toggleEnabled: function () { + this.enabled = !this.enabled + } + + , toggle: function (e) { + var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this + self.tip().hasClass('in') ? self.hide() : self.show() + } + + , destroy: function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + } + + + /* TOOLTIP PLUGIN DEFINITION + * ========================= */ + + var old = $.fn.tooltip + + $.fn.tooltip = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tooltip') + , options = typeof option == 'object' && option + if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + $.fn.tooltip.defaults = { + animation: true + , placement: 'top' + , selector: false + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' + , trigger: 'hover focus' + , title: '' + , delay: 0 + , html: false + , container: false + } + + + /* TOOLTIP NO CONFLICT + * =================== */ + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.$jqTheme || window.jQuery); +/* =========================================================== + * bootstrap-popover.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#popovers + * =========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* POPOVER PUBLIC CLASS DEFINITION + * =============================== */ + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js + ========================================== */ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { + + constructor: Popover + + , setContent: function () { + var $tip = this.tip() + , title = this.getTitle() + , content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + + $tip.removeClass('fade top bottom left right in') + } + + , hasContent: function () { + return this.getTitle() || this.getContent() + } + + , getContent: function () { + var content + , $e = this.$element + , o = this.options + + content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) + || $e.attr('data-content') + + return content + } + + , tip: function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + } + return this.$tip + } + + , destroy: function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + }) + + + /* POPOVER PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.popover + + $.fn.popover = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('popover') + , options = typeof option == 'object' && option + if (!data) $this.data('popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.popover.Constructor = Popover + + $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { + placement: 'right' + , trigger: 'click' + , content: '' + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + /* POPOVER NO CONFLICT + * =================== */ + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-scrollspy.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* SCROLLSPY CLASS DEFINITION + * ========================== */ + + function ScrollSpy(element, options) { + var process = $.proxy(this.process, this) + , $element = $(element).is('body') ? $(window) : $(element) + , href + this.options = $.extend({}, $.fn.scrollspy.defaults, options) + this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) + this.selector = (this.options.target + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + || '') + ' .nav li > a' + this.$body = $('body') + this.refresh() + this.process() + } + + ScrollSpy.prototype = { + + constructor: ScrollSpy + + , refresh: function () { + var self = this + , $targets + + this.offsets = $([]) + this.targets = $([]) + + $targets = this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + , href = $el.data('target') || $el.attr('href') + , $href = /^#\w/.test(href) && $(href) + return ( $href + && $href.length + && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + , process: function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight + , maxScroll = scrollHeight - this.$scrollElement.height() + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) + && this.activate ( i ) + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } + + , activate: function (target) { + var active + , selector + + this.activeTarget = target + + $(this.selector) + .parent('.active') + .removeClass('active') + + selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + active = $(selector) + .parent('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active.closest('li.dropdown').addClass('active') + } + + active.trigger('activate') + } + + } + + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + var old = $.fn.scrollspy + + $.fn.scrollspy = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('scrollspy') + , options = typeof option == 'object' && option + if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.scrollspy.Constructor = ScrollSpy + + $.fn.scrollspy.defaults = { + offset: 10 + } + + + /* SCROLLSPY NO CONFLICT + * ===================== */ + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + /* SCROLLSPY DATA-API + * ================== */ + + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) + +}(window.$jqTheme || window.jQuery); +/* ======================================================== + * bootstrap-tab.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#tabs + * ======================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* TAB CLASS DEFINITION + * ==================== */ + + var Tab = function (element) { + this.element = $(element) + } + + Tab.prototype = { + + constructor: Tab + + , show: function () { + var $this = this.element + , $ul = $this.closest('ul:not(.dropdown-menu)') + , selector = $this.attr('data-target') + , previous + , $target + , e + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + if ( $this.parent('li').hasClass('active') ) return + + previous = $ul.find('.active:last a')[0] + + e = $.Event('show', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown' + , relatedTarget: previous + }) + }) + } + + , activate: function ( element, container, callback) { + var $active = container.find('> .active') + , transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if ( element.parent('.dropdown-menu') ) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') + } + } + + + /* TAB PLUGIN DEFINITION + * ===================== */ + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tab') + if (!data) $this.data('tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + /* TAB NO CONFLICT + * =============== */ + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + /* TAB DATA-API + * ============ */ + + $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + +}(window.$jqTheme || window.jQuery); +/* ============================================================= + * bootstrap-typeahead.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#typeahead + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function($){ + + "use strict"; // jshint ;_; + + + /* TYPEAHEAD PUBLIC CLASS DEFINITION + * ================================= */ + + var Typeahead = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.typeahead.defaults, options) + this.matcher = this.options.matcher || this.matcher + this.sorter = this.options.sorter || this.sorter + this.highlighter = this.options.highlighter || this.highlighter + this.updater = this.options.updater || this.updater + this.source = this.options.source + this.$menu = $(this.options.menu) + this.shown = false + this.listen() + } + + Typeahead.prototype = { + + constructor: Typeahead + + , select: function () { + var val = this.$menu.find('.active').attr('data-value') + this.$element + .val(this.updater(val)) + .change() + return this.hide() + } + + , updater: function (item) { + return item + } + + , show: function () { + var pos = $.extend({}, this.$element.position(), { + height: this.$element[0].offsetHeight + }) + + this.$menu + .insertAfter(this.$element) + .css({ + top: pos.top + pos.height + , left: pos.left + }) + .show() + + this.shown = true + return this + } + + , hide: function () { + this.$menu.hide() + this.shown = false + return this + } + + , lookup: function (event) { + var items + + this.query = this.$element.val() + + if (!this.query || this.query.length < this.options.minLength) { + return this.shown ? this.hide() : this + } + + items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source + + return items ? this.process(items) : this + } + + , process: function (items) { + var that = this + + items = $.grep(items, function (item) { + return that.matcher(item) + }) + + items = this.sorter(items) + + if (!items.length) { + return this.shown ? this.hide() : this + } + + return this.render(items.slice(0, this.options.items)).show() + } + + , matcher: function (item) { + return ~item.toLowerCase().indexOf(this.query.toLowerCase()) + } + + , sorter: function (items) { + var beginswith = [] + , caseSensitive = [] + , caseInsensitive = [] + , item + + while (item = items.shift()) { + if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) + else if (~item.indexOf(this.query)) caseSensitive.push(item) + else caseInsensitive.push(item) + } + + return beginswith.concat(caseSensitive, caseInsensitive) + } + + , highlighter: function (item) { + var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') + return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { + return '<strong>' + match + '</strong>' + }) + } + + , render: function (items) { + var that = this + + items = $(items).map(function (i, item) { + i = $(that.options.item).attr('data-value', item) + i.find('a').html(that.highlighter(item)) + return i[0] + }) + + items.first().addClass('active') + this.$menu.html(items) + return this + } + + , next: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , next = active.next() + + if (!next.length) { + next = $(this.$menu.find('li')[0]) + } + + next.addClass('active') + } + + , prev: function (event) { + var active = this.$menu.find('.active').removeClass('active') + , prev = active.prev() + + if (!prev.length) { + prev = this.$menu.find('li').last() + } + + prev.addClass('active') + } + + , listen: function () { + this.$element + .on('focus', $.proxy(this.focus, this)) + .on('blur', $.proxy(this.blur, this)) + .on('keypress', $.proxy(this.keypress, this)) + .on('keyup', $.proxy(this.keyup, this)) + + if (this.eventSupported('keydown')) { + this.$element.on('keydown', $.proxy(this.keydown, this)) + } + + this.$menu + .on('click', $.proxy(this.click, this)) + .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) + .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) + } + + , eventSupported: function(eventName) { + var isSupported = eventName in this.$element + if (!isSupported) { + this.$element.setAttribute(eventName, 'return;') + isSupported = typeof this.$element[eventName] === 'function' + } + return isSupported + } + + , move: function (e) { + if (!this.shown) return + + switch(e.keyCode) { + case 9: // tab + case 13: // enter + case 27: // escape + e.preventDefault() + break + + case 38: // up arrow + e.preventDefault() + this.prev() + break + + case 40: // down arrow + e.preventDefault() + this.next() + break + } + + e.stopPropagation() + } + + , keydown: function (e) { + this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) + this.move(e) + } + + , keypress: function (e) { + if (this.suppressKeyPressRepeat) return + this.move(e) + } + + , keyup: function (e) { + switch(e.keyCode) { + case 40: // down arrow + case 38: // up arrow + case 16: // shift + case 17: // ctrl + case 18: // alt + break + + case 9: // tab + case 13: // enter + if (!this.shown) return + this.select() + break + + case 27: // escape + if (!this.shown) return + this.hide() + break + + default: + this.lookup() + } + + e.stopPropagation() + e.preventDefault() + } + + , focus: function (e) { + this.focused = true + } + + , blur: function (e) { + this.focused = false + if (!this.mousedover && this.shown) this.hide() + } + + , click: function (e) { + e.stopPropagation() + e.preventDefault() + this.select() + this.$element.focus() + } + + , mouseenter: function (e) { + this.mousedover = true + this.$menu.find('.active').removeClass('active') + $(e.currentTarget).addClass('active') + } + + , mouseleave: function (e) { + this.mousedover = false + if (!this.focused && this.shown) this.hide() + } + + } + + + /* TYPEAHEAD PLUGIN DEFINITION + * =========================== */ + + var old = $.fn.typeahead + + $.fn.typeahead = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('typeahead') + , options = typeof option == 'object' && option + if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.typeahead.defaults = { + source: [] + , items: 8 + , menu: '<ul class="typeahead dropdown-menu"></ul>' + , item: '<li><a href="#"></a></li>' + , minLength: 1 + } + + $.fn.typeahead.Constructor = Typeahead + + + /* TYPEAHEAD NO CONFLICT + * =================== */ + + $.fn.typeahead.noConflict = function () { + $.fn.typeahead = old + return this + } + + + /* TYPEAHEAD DATA-API + * ================== */ + + $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { + var $this = $(this) + if ($this.data('typeahead')) return + $this.typeahead($this.data()) + }) + +}(window.$jqTheme || window.jQuery); +/* ========================================================== + * bootstrap-affix.js v2.3.2 + * http://twitter.github.com/bootstrap/javascript.html#affix + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* AFFIX CLASS DEFINITION + * ====================== */ + + var Affix = function (element, options) { + this.options = $.extend({}, $.fn.affix.defaults, options) + this.$window = $(window) + .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) + this.$element = $(element) + this.checkPosition() + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + , scrollTop = this.$window.scrollTop() + , position = this.$element.offset() + , offset = this.options.offset + , offsetBottom = offset.bottom + , offsetTop = offset.top + , reset = 'affix affix-top affix-bottom' + , affix + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? + false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? + 'bottom' : offsetTop != null && scrollTop <= offsetTop ? + 'top' : false + + if (this.affixed === affix) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) + } + + + /* AFFIX PLUGIN DEFINITION + * ======================= */ + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('affix') + , options = typeof option == 'object' && option + if (!data) $this.data('affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + $.fn.affix.defaults = { + offset: 0 + } + + + /* AFFIX NO CONFLICT + * ================= */ + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + /* AFFIX DATA-API + * ============== */ + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + , data = $spy.data() + + data.offset = data.offset || {} + + data.offsetBottom && (data.offset.bottom = data.offsetBottom) + data.offsetTop && (data.offset.top = data.offsetTop) + + $spy.affix(data) + }) + }) + + +}(window.$jqTheme || window.jQuery);
diff --git a/doc/_static/bootstrap-2.3.2/js/bootstrap.min.js b/doc/_static/bootstrap-2.3.2/js/bootstrap.min.js new file mode 100644 index 0000000..3a3394b --- /dev/null +++ b/doc/_static/bootstrap-2.3.2/js/bootstrap.min.js
@@ -0,0 +1,6 @@ +/** +* Bootstrap.js v2.3.2 by @fat & @mdo +* Copyright 2012 Twitter, Inc. +* http://www.apache.org/licenses/LICENSE-2.0.txt +*/ +!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.$jqTheme||window.jQuery),!function(e){"use strict";function r(){e(".dropdown-backdrop").remove(),e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||("ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",r),s.toggleClass("open")),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.$jqTheme||window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.$jqTheme||window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.$jqTheme||window.jQuery); \ No newline at end of file
diff --git a/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.css b/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.css new file mode 100644 index 0000000..31d8882 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.css
@@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(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, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.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 { + text-shadow: 0 1px 0 #fff; + 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, from(#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; + 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], +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: #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, from(#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], +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: #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, from(#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], +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: #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, from(#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], +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: #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, from(#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], +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: #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, from(#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], +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: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + 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, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + 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, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(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, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .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, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.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, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(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, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(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, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + 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, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + 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, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + 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, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + 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, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(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, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + 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, .05); + box-shadow: 0 1px 2px rgba(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, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.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, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.min.css b/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.min.css new file mode 100644 index 0000000..5e39401 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/css/bootstrap-theme.min.css
@@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;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,from(#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;border-color:#ccc}.btn-default:focus,.btn-default:hover{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.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{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,from(#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:focus,.btn-primary:hover{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.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{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,from(#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:focus,.btn-success:hover{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.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{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,from(#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:focus,.btn-info:hover{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.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{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,from(#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:focus,.btn-warning:hover{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.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{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,from(#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:focus,.btn-danger:hover{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.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;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,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;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,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.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,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>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,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.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,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>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,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{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,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(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,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;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,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;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,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;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,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;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,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.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,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.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,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.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,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.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,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.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,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{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,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(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,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.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,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.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,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.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,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.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,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.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,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.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,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file
diff --git a/doc/_static/bootstrap-3.3.7/css/bootstrap.css b/doc/_static/bootstrap-3.3.7/css/bootstrap.css new file mode 100644 index 0000000..6167622 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/css/bootstrap.css
@@ -0,0 +1,6757 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #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: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +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 { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + 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; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +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; + overflow: hidden; + clear: left; + text-align: right; + 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; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.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, .25); + box-shadow: inset 0 -1px 0 rgba(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; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-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-right: 15px; + padding-left: 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; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.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 { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > 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 { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[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-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + 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 { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 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; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .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, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .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, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .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 { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link: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%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="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-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +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-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn: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-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a: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; + cursor: not-allowed; + background-color: transparent; +} +.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; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a: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 { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a: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; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 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; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.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; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > 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 { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .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; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand: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 { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a: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 { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a: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 { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.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; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .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-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: 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 { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.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, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.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, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > 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-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .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-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-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-right-radius: 3px; + border-bottom-left-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 { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .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; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */
diff --git a/doc/_static/bootstrap-3.3.7/css/bootstrap.min.css b/doc/_static/bootstrap-3.3.7/css/bootstrap.min.css new file mode 100644 index 0000000..ed3905e --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/css/bootstrap.min.css
@@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file
diff --git a/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000..b93a495 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.eot Binary files differ
diff --git a/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000..94fb549 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph horiz-adv-x="0" /> +<glyph horiz-adv-x="400" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" /> +<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode=" " /> +<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="650" /> +<glyph unicode=" " horiz-adv-x="1300" /> +<glyph unicode=" " horiz-adv-x="433" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="216" /> +<glyph unicode=" " horiz-adv-x="162" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="72" /> +<glyph unicode=" " horiz-adv-x="260" /> +<glyph unicode=" " horiz-adv-x="325" /> +<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" /> +<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" /> +<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" /> +<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" /> +<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " /> +<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" /> +<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" /> +<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" /> +<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" /> +<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" /> +<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" /> +<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" /> +<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" /> +<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" /> +<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" /> +<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" /> +<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" /> +<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" /> +<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" /> +<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" /> +<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" /> +<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" /> +<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" /> +<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" /> +<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" /> +<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" /> +<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" /> +<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" /> +<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" /> +<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" /> +<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" /> +<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" /> +<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" /> +<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" /> +<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" /> +<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" /> +<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" /> +<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" /> +<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" /> +<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" /> +<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" /> +<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" /> +<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" /> +<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" /> +<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" /> +<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" /> +<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" /> +<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" /> +<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" /> +<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" /> +<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" /> +<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" /> +<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" /> +<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" /> +<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" /> +<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" /> +<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" /> +<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" /> +<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" /> +<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" /> +<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" /> +<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" /> +<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" /> +<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" /> +<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" /> +<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" /> +<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" /> +<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" /> +<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" /> +<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" /> +<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" /> +<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" /> +<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" /> +<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" /> +<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" /> +<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" /> +<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " /> +<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" /> +<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" /> +<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" /> +<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" /> +<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" /> +<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" /> +<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" /> +<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" /> +<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" /> +<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" /> +<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" /> +<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" /> +<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" /> +<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" /> +<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" /> +<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" /> +<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" /> +<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" /> +<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" /> +<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" /> +<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" /> +<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" /> +<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" /> +<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" /> +<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" /> +<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" /> +<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" /> +<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" /> +<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" /> +<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" /> +<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" /> +<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" /> +<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" /> +<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" /> +<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" /> +<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" /> +<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" /> +<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" /> +<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" /> +<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" /> +<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" /> +<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" /> +<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" /> +<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" /> +<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" /> +<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" /> +<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" /> +<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" /> +<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " /> +<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" /> +<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" /> +<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" /> +<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" /> +<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" /> +<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" /> +<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" /> +<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" /> +<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" /> +<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" /> +<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" /> +<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" /> +<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" /> +<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" /> +<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" /> +<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" /> +<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" /> +<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" /> +<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" /> +<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" /> +<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" /> +<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" /> +<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" /> +<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" /> +<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" /> +<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" /> +<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" /> +<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" /> +<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" /> +<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" /> +<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" /> +<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" /> +<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" /> +</font> +</defs></svg> \ No newline at end of file
diff --git a/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000..1413fc6 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.ttf Binary files differ
diff --git a/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000..9e61285 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff Binary files differ
diff --git a/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 0000000..64539b5 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/fonts/glyphicons-halflings-regular.woff2 Binary files differ
diff --git a/doc/_static/bootstrap-3.3.7/js/bootstrap.js b/doc/_static/bootstrap-3.3.7/js/bootstrap.js new file mode 100644 index 0000000..6317cf3 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/js/bootstrap.js
@@ -0,0 +1,2377 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ + +if (typeof (window.$jqTheme || window.jQuery) === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4') + } +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.7 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.7 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.7' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector === '#' ? [] : selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.7 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.7' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state += 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d).prop(d, true) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d).prop(d, false) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked')) changed = false + $parent.find('.active').removeClass('active') + this.$element.addClass('active') + } else if ($input.prop('type') == 'checkbox') { + if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false + this.$element.toggleClass('active') + } + $input.prop('checked', this.$element.hasClass('active')) + if (changed) $input.trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + this.$element.toggleClass('active') + } + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target).closest('.btn') + Plugin.call($btn, 'toggle') + if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { + // Prevent double click on radios, and the double selections (so cancellation) on checkboxes + e.preventDefault() + // The target component still receive the focus + if ($btn.is('input,button')) $btn.trigger('focus') + else $btn.find('input:visible,button:visible').first().trigger('focus') + } + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.7 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = null + this.sliding = null + this.interval = null + this.$active = null + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.7' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.7 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + +/* jshint latedef: false */ + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + + '[data-toggle="collapse"][data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.7' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + + Plugin.call($target, option) + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.7 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.7' + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + function clearMenus(e) { + if (e && e.which === 3) return + $(backdrop).remove() + $(toggle).each(function () { + var $this = $(this) + var $parent = getParent($this) + var relatedTarget = { relatedTarget: this } + + if (!$parent.hasClass('open')) return + + if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return + + $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this.attr('aria-expanded', 'false') + $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) + }) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $(document.createElement('div')) + .addClass('dropdown-backdrop') + .insertAfter($(this)) + .on('click', clearMenus) + } + + var relatedTarget = { relatedTarget: this } + $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) + + if (e.isDefaultPrevented()) return + + $this + .trigger('focus') + .attr('aria-expanded', 'true') + + $parent + .toggleClass('open') + .trigger($.Event('shown.bs.dropdown', relatedTarget)) + } + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive && e.which != 27 || isActive && e.which == 27) { + if (e.which == 27) $parent.find(toggle).trigger('focus') + return $this.trigger('click') + } + + var desc = ' li:not(.disabled):visible a' + var $items = $parent.find('.dropdown-menu' + desc) + + if (!$items.length) return + + var index = $items.index(e.target) + + if (e.which == 38 && index > 0) index-- // up + if (e.which == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items.eq(index).trigger('focus') + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.dropdown') + + if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.dropdown + + $.fn.dropdown = Plugin + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) + .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: modal.js v3.3.7 + * http://getbootstrap.com/javascript/#modals + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$body = $(document.body) + this.$element = $(element) + this.$dialog = this.$element.find('.modal-dialog') + this.$backdrop = null + this.isShown = null + this.originalBodyPad = null + this.scrollbarWidth = 0 + this.ignoreBackdropClick = false + + if (this.options.remote) { + this.$element + .find('.modal-content') + .load(this.options.remote, $.proxy(function () { + this.$element.trigger('loaded.bs.modal') + }, this)) + } + } + + Modal.VERSION = '3.3.7' + + Modal.TRANSITION_DURATION = 300 + Modal.BACKDROP_TRANSITION_DURATION = 150 + + Modal.DEFAULTS = { + backdrop: true, + keyboard: true, + show: true + } + + Modal.prototype.toggle = function (_relatedTarget) { + return this.isShown ? this.hide() : this.show(_relatedTarget) + } + + Modal.prototype.show = function (_relatedTarget) { + var that = this + var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.checkScrollbar() + this.setScrollbar() + this.$body.addClass('modal-open') + + this.escape() + this.resize() + + this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + + this.$dialog.on('mousedown.dismiss.bs.modal', function () { + that.$element.one('mouseup.dismiss.bs.modal', function (e) { + if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true + }) + }) + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(that.$body) // don't move modals dom position + } + + that.$element + .show() + .scrollTop(0) + + that.adjustDialog() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + that.enforceFocus() + + var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) + + transition ? + that.$dialog // wait for modal to slide in + .one('bsTransitionEnd', function () { + that.$element.trigger('focus').trigger(e) + }) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + that.$element.trigger('focus').trigger(e) + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + this.resize() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .off('click.dismiss.bs.modal') + .off('mouseup.dismiss.bs.modal') + + this.$dialog.off('mousedown.dismiss.bs.modal') + + $.support.transition && this.$element.hasClass('fade') ? + this.$element + .one('bsTransitionEnd', $.proxy(this.hideModal, this)) + .emulateTransitionEnd(Modal.TRANSITION_DURATION) : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (document !== e.target && + this.$element[0] !== e.target && + !this.$element.has(e.target).length) { + this.$element.trigger('focus') + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keydown.dismiss.bs.modal') + } + } + + Modal.prototype.resize = function () { + if (this.isShown) { + $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) + } else { + $(window).off('resize.bs.modal') + } + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.$body.removeClass('modal-open') + that.resetAdjustments() + that.resetScrollbar() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $(document.createElement('div')) + .addClass('modal-backdrop ' + animate) + .appendTo(this.$body) + + this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { + if (this.ignoreBackdropClick) { + this.ignoreBackdropClick = false + return + } + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus() + : this.hide() + }, this)) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop + .one('bsTransitionEnd', callback) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + var callbackRemove = function () { + that.removeBackdrop() + callback && callback() + } + $.support.transition && this.$element.hasClass('fade') ? + this.$backdrop + .one('bsTransitionEnd', callbackRemove) + .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : + callbackRemove() + + } else if (callback) { + callback() + } + } + + // these following methods are used to handle overflowing modals + + Modal.prototype.handleUpdate = function () { + this.adjustDialog() + } + + Modal.prototype.adjustDialog = function () { + var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight + + this.$element.css({ + paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', + paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' + }) + } + + Modal.prototype.resetAdjustments = function () { + this.$element.css({ + paddingLeft: '', + paddingRight: '' + }) + } + + Modal.prototype.checkScrollbar = function () { + var fullWindowWidth = window.innerWidth + if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect() + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) + } + this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth + this.scrollbarWidth = this.measureScrollbar() + } + + Modal.prototype.setScrollbar = function () { + var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) + this.originalBodyPad = document.body.style.paddingRight || '' + if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) + } + + Modal.prototype.resetScrollbar = function () { + this.$body.css('padding-right', this.originalBodyPad) + } + + Modal.prototype.measureScrollbar = function () { // thx walsh + var scrollDiv = document.createElement('div') + scrollDiv.className = 'modal-scrollbar-measure' + this.$body.append(scrollDiv) + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth + this.$body[0].removeChild(scrollDiv) + return scrollbarWidth + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + function Plugin(option, _relatedTarget) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option](_relatedTarget) + else if (options.show) data.show(_relatedTarget) + }) + } + + var old = $.fn.modal + + $.fn.modal = Plugin + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 + var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) + + if ($this.is('a')) e.preventDefault() + + $target.one('show.bs.modal', function (showEvent) { + if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown + $target.one('hidden.bs.modal', function () { + $this.is(':visible') && $this.trigger('focus') + }) + }) + Plugin.call($target, option, this) + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: tooltip.js v3.3.7 + * http://getbootstrap.com/javascript/#tooltip + * Inspired by the original jQuery.tipsy by Jason Frame + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TOOLTIP PUBLIC CLASS DEFINITION + // =============================== + + var Tooltip = function (element, options) { + this.type = null + this.options = null + this.enabled = null + this.timeout = null + this.hoverState = null + this.$element = null + this.inState = null + + this.init('tooltip', element, options) + } + + Tooltip.VERSION = '3.3.7' + + Tooltip.TRANSITION_DURATION = 150 + + Tooltip.DEFAULTS = { + animation: true, + placement: 'top', + selector: false, + template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + container: false, + viewport: { + selector: 'body', + padding: 0 + } + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) + this.inState = { click: false, hover: false, focus: false } + + if (this.$element[0] instanceof document.constructor && !this.options.selector) { + throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') + } + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' + + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay, + hide: options.delay + } + } + + return options + } + + Tooltip.prototype.getDelegateOptions = function () { + var options = {} + var defaults = this.getDefaults() + + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) + + return options + } + + Tooltip.prototype.enter = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true + } + + if (self.tip().hasClass('in') || self.hoverState == 'in') { + self.hoverState = 'in' + return + } + + clearTimeout(self.timeout) + + self.hoverState = 'in' + + if (!self.options.delay || !self.options.delay.show) return self.show() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + Tooltip.prototype.isInStateTrue = function () { + for (var key in this.inState) { + if (this.inState[key]) return true + } + + return false + } + + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget).data('bs.' + this.type) + + if (!self) { + self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) + $(obj.currentTarget).data('bs.' + this.type, self) + } + + if (obj instanceof $.Event) { + self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false + } + + if (self.isInStateTrue()) return + + clearTimeout(self.timeout) + + self.hoverState = 'out' + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.' + this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) + if (e.isDefaultPrevented() || !inDom) return + var that = this + + var $tip = this.tip() + + var tipId = this.getUID(this.type) + + this.setContent() + $tip.attr('id', tipId) + this.$element.attr('aria-describedby', tipId) + + if (this.options.animation) $tip.addClass('fade') + + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement + + var autoToken = /\s?auto?\s?/i + var autoPlace = autoToken.test(placement) + if (autoPlace) placement = placement.replace(autoToken, '') || 'top' + + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) + .data('bs.' + this.type, this) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + this.$element.trigger('inserted.bs.' + this.type) + + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (autoPlace) { + var orgPlacement = placement + var viewportDim = this.getPosition(this.$viewport) + + placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : + placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : + placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : + placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : + placement + + $tip + .removeClass(orgPlacement) + .addClass(placement) + } + + var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) + + this.applyPlacement(calculatedOffset, placement) + + var complete = function () { + var prevHoverState = that.hoverState + that.$element.trigger('shown.bs.' + that.type) + that.hoverState = null + + if (prevHoverState == 'out') that.leave(that) + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + } + } + + Tooltip.prototype.applyPlacement = function (offset, placement) { + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + // manually read margins because getBoundingClientRect includes difference + var marginTop = parseInt($tip.css('margin-top'), 10) + var marginLeft = parseInt($tip.css('margin-left'), 10) + + // we must check for NaN for ie 8/9 + if (isNaN(marginTop)) marginTop = 0 + if (isNaN(marginLeft)) marginLeft = 0 + + offset.top += marginTop + offset.left += marginLeft + + // $.fn.offset doesn't round pixel values + // so we use setOffset directly with our own function B-0 + $.offset.setOffset($tip[0], $.extend({ + using: function (props) { + $tip.css({ + top: Math.round(props.top), + left: Math.round(props.left) + }) + } + }, offset), 0) + + $tip.addClass('in') + + // check to see if placing tip in new offset caused the tip to resize itself + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + offset.top = offset.top + height - actualHeight + } + + var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) + + if (delta.left) offset.left += delta.left + else offset.top += delta.top + + var isVertical = /top|bottom/.test(placement) + var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight + var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' + + $tip.offset(offset) + this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) + } + + Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { + this.arrow() + .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') + .css(isVertical ? 'top' : 'left', '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } + + Tooltip.prototype.hide = function (callback) { + var that = this + var $tip = $(this.$tip) + var e = $.Event('hide.bs.' + this.type) + + function complete() { + if (that.hoverState != 'in') $tip.detach() + if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. + that.$element + .removeAttr('aria-describedby') + .trigger('hidden.bs.' + that.type) + } + callback && callback() + } + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $tip.removeClass('in') + + $.support.transition && $tip.hasClass('fade') ? + $tip + .one('bsTransitionEnd', complete) + .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : + complete() + + this.hoverState = null + + return this + } + + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + Tooltip.prototype.getPosition = function ($element) { + $element = $element || this.$element + + var el = $element[0] + var isBody = el.tagName == 'BODY' + + var elRect = el.getBoundingClientRect() + if (elRect.width == null) { + // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 + elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) + } + var isSvg = window.SVGElement && el instanceof window.SVGElement + // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. + // See https://github.com/twbs/bootstrap/issues/20280 + var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) + var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } + var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null + + return $.extend({}, elRect, scroll, outerDims, elOffset) + } + + Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { + return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : + placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : + /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } + + } + + Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { + var delta = { top: 0, left: 0 } + if (!this.$viewport) return delta + + var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 + var viewportDimensions = this.getPosition(this.$viewport) + + if (/right|left/.test(placement)) { + var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll + var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight + if (topEdgeOffset < viewportDimensions.top) { // top overflow + delta.top = viewportDimensions.top - topEdgeOffset + } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow + delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset + } + } else { + var leftEdgeOffset = pos.left - viewportPadding + var rightEdgeOffset = pos.left + viewportPadding + actualWidth + if (leftEdgeOffset < viewportDimensions.left) { // left overflow + delta.left = viewportDimensions.left - leftEdgeOffset + } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow + delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset + } + } + + return delta + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.getUID = function (prefix) { + do prefix += ~~(Math.random() * 1000000) + while (document.getElementById(prefix)) + return prefix + } + + Tooltip.prototype.tip = function () { + if (!this.$tip) { + this.$tip = $(this.options.template) + if (this.$tip.length != 1) { + throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') + } + } + return this.$tip + } + + Tooltip.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + Tooltip.prototype.toggle = function (e) { + var self = this + if (e) { + self = $(e.currentTarget).data('bs.' + this.type) + if (!self) { + self = new this.constructor(e.currentTarget, this.getDelegateOptions()) + $(e.currentTarget).data('bs.' + this.type, self) + } + } + + if (e) { + self.inState.click = !self.inState.click + if (self.isInStateTrue()) self.enter(self) + else self.leave(self) + } else { + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } + } + + Tooltip.prototype.destroy = function () { + var that = this + clearTimeout(this.timeout) + this.hide(function () { + that.$element.off('.' + that.type).removeData('bs.' + that.type) + if (that.$tip) { + that.$tip.detach() + } + that.$tip = null + that.$arrow = null + that.$viewport = null + that.$element = null + }) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tooltip + + $.fn.tooltip = Plugin + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: popover.js v3.3.7 + * http://getbootstrap.com/javascript/#popovers + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // POPOVER PUBLIC CLASS DEFINITION + // =============================== + + var Popover = function (element, options) { + this.init('popover', element, options) + } + + if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') + + Popover.VERSION = '3.3.7' + + Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right', + trigger: 'click', + content: '', + template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) + + + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ + + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) + + Popover.prototype.constructor = Popover + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() + + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events + this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' + ](content) + + $tip.removeClass('fade top bottom left right in') + + // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do + // this manually by checking the contents. + if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options + + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } + + Popover.prototype.arrow = function () { + return (this.$arrow = this.$arrow || this.tip().find('.arrow')) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data && /destroy|hide/.test(option)) return + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.popover + + $.fn.popover = Plugin + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: scrollspy.js v3.3.7 + * http://getbootstrap.com/javascript/#scrollspy + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + this.$body = $(document.body) + this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target || '') + ' .nav li > a' + this.offsets = [] + this.targets = [] + this.activeTarget = null + this.scrollHeight = 0 + + this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) + this.refresh() + this.process() + } + + ScrollSpy.VERSION = '3.3.7' + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.getScrollHeight = function () { + return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) + } + + ScrollSpy.prototype.refresh = function () { + var that = this + var offsetMethod = 'offset' + var offsetBase = 0 + + this.offsets = [] + this.targets = [] + this.scrollHeight = this.getScrollHeight() + + if (!$.isWindow(this.$scrollElement[0])) { + offsetMethod = 'position' + offsetBase = this.$scrollElement.scrollTop() + } + + this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#./.test(href) && $(href) + + return ($href + && $href.length + && $href.is(':visible') + && [[$href[offsetMethod]().top + offsetBase, href]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + that.offsets.push(this[0]) + that.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.getScrollHeight() + var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (this.scrollHeight != scrollHeight) { + this.refresh() + } + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) + } + + if (activeTarget && scrollTop < offsets[0]) { + this.activeTarget = null + return this.clear() + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) + && this.activate(targets[i]) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + this.clear() + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate.bs.scrollspy') + } + + ScrollSpy.prototype.clear = function () { + $(this.selector) + .parentsUntil(this.options.target, '.active') + .removeClass('active') + } + + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.scrollspy + + $.fn.scrollspy = Plugin + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load.bs.scrollspy.data-api', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + Plugin.call($spy, $spy.data()) + }) + }) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: tab.js v3.3.7 + * http://getbootstrap.com/javascript/#tabs + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + // jscs:disable requireDollarBeforejQueryAssignment + this.element = $(element) + // jscs:enable requireDollarBeforejQueryAssignment + } + + Tab.VERSION = '3.3.7' + + Tab.TRANSITION_DURATION = 150 + + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.data('target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + if ($this.parent('li').hasClass('active')) return + + var $previous = $ul.find('.active:last a') + var hideEvent = $.Event('hide.bs.tab', { + relatedTarget: $this[0] + }) + var showEvent = $.Event('show.bs.tab', { + relatedTarget: $previous[0] + }) + + $previous.trigger(hideEvent) + $this.trigger(showEvent) + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.closest('li'), $ul) + this.activate($target, $target.parent(), function () { + $previous.trigger({ + type: 'hidden.bs.tab', + relatedTarget: $this[0] + }) + $this.trigger({ + type: 'shown.bs.tab', + relatedTarget: $previous[0] + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', false) + + element + .addClass('active') + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu').length) { + element + .closest('li.dropdown') + .addClass('active') + .end() + .find('[data-toggle="tab"]') + .attr('aria-expanded', true) + } + + callback && callback() + } + + $active.length && transition ? + $active + .one('bsTransitionEnd', next) + .emulateTransitionEnd(Tab.TRANSITION_DURATION) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.tab + + $.fn.tab = Plugin + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + // TAB DATA-API + // ============ + + var clickHandler = function (e) { + e.preventDefault() + Plugin.call($(this), 'show') + } + + $(document) + .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) + .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) + +}(window.$jqTheme || window.jQuery); + +/* ======================================================================== + * Bootstrap: affix.js v3.3.7 + * http://getbootstrap.com/javascript/#affix + * ======================================================================== + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // AFFIX CLASS DEFINITION + // ====================== + + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + + this.$target = $(this.options.target) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) + + this.$element = $(element) + this.affixed = null + this.unpin = null + this.pinnedOffset = null + + this.checkPosition() + } + + Affix.VERSION = '3.3.7' + + Affix.RESET = 'affix affix-top affix-bottom' + + Affix.DEFAULTS = { + offset: 0, + target: window + } + + Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + var targetHeight = this.$target.height() + + if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false + + if (this.affixed == 'bottom') { + if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' + return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' + } + + var initializing = this.affixed == null + var colliderTop = initializing ? scrollTop : position.top + var colliderHeight = initializing ? targetHeight : height + + if (offsetTop != null && scrollTop <= offsetTop) return 'top' + if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' + + return false + } + + Affix.prototype.getPinnedOffset = function () { + if (this.pinnedOffset) return this.pinnedOffset + this.$element.removeClass(Affix.RESET).addClass('affix') + var scrollTop = this.$target.scrollTop() + var position = this.$element.offset() + return (this.pinnedOffset = position.top - scrollTop) + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var height = this.$element.height() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var scrollHeight = Math.max($(document).height(), $(document.body).height()) + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) + + var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) + + if (this.affixed != affix) { + if (this.unpin != null) this.$element.css('top', '') + + var affixType = 'affix' + (affix ? '-' + affix : '') + var e = $.Event(affixType + '.bs.affix') + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null + + this.$element + .removeClass(Affix.RESET) + .addClass(affixType) + .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') + } + + if (affix == 'bottom') { + this.$element.offset({ + top: scrollHeight - height - offsetBottom + }) + } + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.affix + + $.fn.affix = Plugin + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom + if (data.offsetTop != null) data.offset.top = data.offsetTop + + Plugin.call($spy, data) + }) + }) + +}(window.$jqTheme || window.jQuery);
diff --git a/doc/_static/bootstrap-3.3.7/js/bootstrap.min.js b/doc/_static/bootstrap-3.3.7/js/bootstrap.min.js new file mode 100644 index 0000000..bc849bd --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/js/bootstrap.min.js
@@ -0,0 +1,7 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under the MIT license + */ +if("undefined"==typeof (window.$jqTheme || window.jQuery))throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){ +this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(window.$jqTheme || window.jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(window.$jqTheme || window.jQuery);
diff --git a/doc/_static/bootstrap-3.3.7/js/npm.js b/doc/_static/bootstrap-3.3.7/js/npm.js new file mode 100644 index 0000000..bf6aa80 --- /dev/null +++ b/doc/_static/bootstrap-3.3.7/js/npm.js
@@ -0,0 +1,13 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('../../js/transition.js') +require('../../js/alert.js') +require('../../js/button.js') +require('../../js/carousel.js') +require('../../js/collapse.js') +require('../../js/dropdown.js') +require('../../js/modal.js') +require('../../js/tooltip.js') +require('../../js/popover.js') +require('../../js/scrollspy.js') +require('../../js/tab.js') +require('../../js/affix.js') \ No newline at end of file
diff --git a/doc/_static/bootstrap-sphinx.css b/doc/_static/bootstrap-sphinx.css new file mode 100644 index 0000000..ca9f396 --- /dev/null +++ b/doc/_static/bootstrap-sphinx.css
@@ -0,0 +1,223 @@ +/* + * bootstrap-sphinx.css + * ~~~~~~~~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- Bootstrap theme. + */ + +/* + * Imports to aggregate everything together. + */ + +@import url("./basic.css"); + + + + + + + + + @import url("./bootswatch-3.3.7/readable/bootstrap.min.css"); + + + +/* + * Styles + */ + +.navbar-inverse .brand { + color: #FFF; +} + +/* + * Reset navbar styles from overrides in: + * https://bitbucket.org/birkenfeld/sphinx/commits/78d8ebf76b630ab4073a7328af9d91e8123b8d96 + */ +.navbar .container { + padding-top: 0; +} + +/* + * Reset the logo image dimensions. Sites like RTD can override with bad + * results on mobile (mega-huge logo...) + * + * https://github.com/ryan-roemer/sphinx-bootstrap-theme/issues/142 + */ +.navbar-brand img { + width: auto; + height: 100%; +} + +.page-top { + top: 0px; +} + + + + + + body { + + padding-top: 60px; + + } + .page-top { + + top: 60px; + + } + + + +.navbar-inner { + padding-left: 12px !important; + padding-right: 12px !important; +} + + +table { + border: 0; +} + +.highlighttable .code pre { + font-size: 12px; +} + +.highlighttable .linenos pre { + word-break: normal; + font-size: 12px; +} + +div.highlight { + background: none; +} + +a.headerlink { + margin-left: 0.25em; +} + +a.footnote-reference { + vertical-align: super; + font-size: 75%; +} + +table.footnote td.label { + color: inherit; + font-size: 100%; + display: block; + line-height: normal; + background: inherit; +} + +table.footnote { + width: auto; + margin-bottom: 0px; +} + +table.field-list { + width: auto; +} + +.footer { + width: 100%; + border-top: 1px solid #ccc; + padding-top: 10px; +} + +.bs-sidenav form, .bs-sidenav #sourcelink { + padding: 5px 20px; +} + + + +/* The code below is based on the bootstrap website sidebar */ + +.bs-sidenav.affix { + position: static; +} + +/* First level of nav */ +.bs-sidenav { + margin-top: 30px; + margin-bottom: 30px; + padding-top: 10px; + padding-bottom: 10px; + text-shadow: 0 1px 0 #fff; + background-color: #f7f5fa; + border-radius: 5px; +} + +/* All levels of nav */ +.bs-sidenav .nav > li > a { + display: block; + color: #716b7a; + padding: 5px 20px; +} +.bs-sidenav .nav > li > a:hover, +.bs-sidenav .nav > li > a:focus { + text-decoration: none; + background-color: #e5e3e9; + border-right: 1px solid #dbd8e0; +} +.bs-sidenav .nav > .active > a, +.bs-sidenav .nav > .active:hover > a, +.bs-sidenav .nav > .active:focus > a { + font-weight: bold; + color: #563d7c; + background-color: transparent; + border-right: 1px solid #563d7c; +} + +.bs-sidenav .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 30px; + font-size: 90%; +} + +.bs-sidenav .nav .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 40px; + font-size: 90%; +} + +.bs-sidenav .nav .nav .nav .nav > li > a { + padding-top: 3px; + padding-bottom: 3px; + padding-left: 50px; + font-size: 90%; +} + +/* Show and affix the side nav when space allows it */ +@media screen and (min-width: 992px) { + .bs-sidenav .nav > .active > ul { + display: block; + } + /* Widen the fixed sidenav */ + .bs-sidenav.affix, + .bs-sidenav.affix-bottom { + width: 213px; + } + .bs-sidenav.affix { + position: fixed; /* Undo the static from mobile first approach */ + } + .bs-sidenav.affix-bottom { + position: absolute; /* Undo the static from mobile first approach */ + } + .bs-sidenav.affix-bottom .bs-sidenav, + .bs-sidenav.affix .bs-sidenav { + margin-top: 0; + margin-bottom: 0; + } +} +@media screen and (min-width: 1200px) { + /* Widen the fixed sidenav again */ + .bs-sidenav.affix-bottom, + .bs-sidenav.affix { + width: 263px; + } +} + +
diff --git a/doc/_static/bootstrap-sphinx.js b/doc/_static/bootstrap-sphinx.js new file mode 100644 index 0000000..17e8198 --- /dev/null +++ b/doc/_static/bootstrap-sphinx.js
@@ -0,0 +1,175 @@ +(function ($) { + /** + * Patch TOC list. + * + * Will mutate the underlying span to have a correct ul for nav. + * + * @param $span: Span containing nested UL"s to mutate. + * @param minLevel: Starting level for nested lists. (1: global, 2: local). + */ + var patchToc = function ($ul, minLevel) { + var findA, + patchTables, + $localLi; + + // Find all a "internal" tags, traversing recursively. + findA = function ($elem, level) { + level = level || 0; + var $items = $elem.find("> li > a.internal, > ul, > li > ul"); + + // Iterate everything in order. + $items.each(function (index, item) { + var $item = $(item), + tag = item.tagName.toLowerCase(), + $childrenLi = $item.children("li"), + $parentLi = $($item.parent("li"), $item.parent().parent("li")); + + // Add dropdowns if more children and above minimum level. + if (tag === "ul" && level >= minLevel && $childrenLi.length > 0) { + $parentLi + .addClass("dropdown-submenu") + .children("a").first().attr("tabindex", -1); + + $item.addClass("dropdown-menu"); + } + + findA($item, level + 1); + }); + }; + + findA($ul); + }; + + /** + * Patch all tables to remove ``docutils`` class and add Bootstrap base + * ``table`` class. + */ + patchTables = function () { + $("table.docutils") + .removeClass("docutils") + .addClass("table") + .attr("border", 0); + }; + + $(window).load(function () { + /* + * Scroll the window to avoid the topnav bar + * https://github.com/twbs/bootstrap/issues/1768 + */ + if ($("#navbar.navbar-fixed-top").length > 0) { + var navHeight = $("#navbar").height(), + shiftWindow = function() { scrollBy(0, -navHeight - 10); }; + + if (location.hash) { + setTimeout(shiftWindow, 1); + } + + window.addEventListener("hashchange", shiftWindow); + } + }); + + $(document).ready(function () { + // Add styling, structure to TOC"s. + $(".dropdown-menu").each(function () { + $(this).find("ul").each(function (index, item){ + var $item = $(item); + $item.addClass("unstyled"); + }); + }); + + // Global TOC. + if ($("ul.globaltoc li").length) { + patchToc($("ul.globaltoc"), 1); + } else { + // Remove Global TOC. + $(".globaltoc-container").remove(); + } + + // Local TOC. + $(".bs-sidenav ul").addClass("nav nav-list"); + $(".bs-sidenav > ul > li > a").addClass("nav-header"); + + + // back to top + setTimeout(function () { + var $sideBar = $(".bs-sidenav"); + var $content = $(".content"); + + // Enlarge content if sidebar is larger. + if ($sideBar.outerHeight(true) > $content.outerHeight(true)) { + $content.css("min-height", $sideBar.outerHeight(true)); + } + + $sideBar + // Add affix. + .affix({ + offset: { + top: function () { + var offsetTop = $sideBar.offset().top; + var sideBarMargin = parseInt($sideBar.css("margin-top"), 10); + var navOuterHeight = $("#navbar").outerHeight(true); + + return (this.top = offsetTop - navOuterHeight); + }, + bottom: function () { + return (this.bottom = $(".footer").outerHeight(true)); + } + } + }) + // Trigger to reset if page content is scrolled to bottom. + .trigger("scroll.bs.affix.data-api"); + }, 0); + + + // Local TOC. + patchToc($("ul.localtoc"), 2); + + // Mutate sub-lists (for bs-2.3.0). + $(".dropdown-menu ul").not(".dropdown-menu").each(function () { + var $ul = $(this), + $parent = $ul.parent(), + tag = $parent[0].tagName.toLowerCase(), + $kids = $ul.children().detach(); + + // Replace list with items if submenu header. + if (tag === "ul") { + $ul.replaceWith($kids); + } else if (tag === "li") { + // Insert into previous list. + $parent.after($kids); + $ul.remove(); + } + }); + + // Add divider in page TOC. + $localLi = $("ul.localtoc li"); + if ($localLi.length > 2) { + $localLi.first().after("<li class=\"divider\"></li>"); + } + + // Patch tables. + patchTables(); + + // Add Note, Warning styles. (BS v2,3 compatible). + $(".admonition").addClass("alert alert-info") + .filter(".warning, .caution") + .removeClass("alert-info") + .addClass("alert-warning").end() + .filter(".error, .danger") + .removeClass("alert-info") + .addClass("alert-danger alert-error").end(); + + // Inline code styles to Bootstrap style. + $("tt.docutils.literal").not(".xref").each(function (i, e) { + // ignore references + if (!$(e).parent().hasClass("reference")) { + $(e).replaceWith(function () { + return $("<code />").html($(this).html()); + }); + }}); + + // Update sourcelink to remove outerdiv (fixes appearance in navbar). + var $srcLink = $(".nav #sourcelink"); + $srcLink.parent().html($srcLink.html()); + }); +}(window.$jqTheme || window.jQuery)); \ No newline at end of file
diff --git a/doc/_static/bootswatch-2.3.2/amelia/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/amelia/bootstrap.min.css new file mode 100644 index 0000000..b8cea32 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/amelia/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Lobster|Cabin:400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:'Cabin',Verdana,sans-serif;font-size:14px;line-height:20px;color:#e1f0f0;background-color:#003f4d}a{color:#e8d069;text-decoration:none}a:hover,a:focus{color:#e8d069;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#aaa}a.muted:hover,a.muted:focus{color:#919191}.text-warning{color:#e1f0f0}a.text-warning:hover,a.text-warning:focus{color:#bfdfdf}.text-error{color:#e1f0f0}a.text-error:hover,a.text-error:focus{color:#bfdfdf}.text-info{color:#e1f0f0}a.text-info:hover,a.text-info:focus{color:#bfdfdf}.text-success{color:#e1f0f0}a.text-success:hover,a.text-success:focus{color:#bfdfdf}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:'Lobster',cursive;font-weight:normal;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#aaa}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #ddd}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid rgba(255,255,255,0.3);border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #aaa}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #ddd}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#aaa}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #ddd;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#444;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#444;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#aaa}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:'Cabin',Verdana,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid transparent;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid transparent}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#aaa;cursor:not-allowed;background-color:#fcfcfc;border-color:transparent;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#aaa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#e1f0f0}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#e1f0f0}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#e1f0f0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#bfdfdf;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#e1f0f0;background-color:#df6e1e;border-color:#e1f0f0}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#e1f0f0}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#e1f0f0}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#e1f0f0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#bfdfdf;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#e1f0f0;background-color:#ad1d28;border-color:#e1f0f0}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#e1f0f0}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#e1f0f0}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#e1f0f0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#bfdfdf;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#e1f0f0;background-color:#48ca3b;border-color:#e1f0f0}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#e1f0f0}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#e1f0f0}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#e1f0f0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#bfdfdf;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#e1f0f0;background-color:#4d3a7d;border-color:#e1f0f0}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#fff}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#ddd;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#b8ebb3;border-color:#48ca3b}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:#1ba7b4;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #1cafbd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #1cafbd}.table .table{background-color:#003f4d}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #1cafbd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered th,.table-bordered td{border-left:1px solid #1cafbd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#1ebccb}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:rgba(255,255,255,0.4)}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#48ca3b}.table tbody tr.error>td{background-color:#ad1d28}.table tbody tr.warning>td{background-color:#df6e1e}.table tbody tr.info>td{background-color:#4d3a7d}.table-hover tbody tr.success:hover>td{background-color:#3eb932}.table-hover tbody tr.error:hover>td{background-color:#971923}.table-hover tbody tr.warning:hover>td{background-color:#c9631b}.table-hover tbody tr.info:hover>td{background-color:#42326c}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#444;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#a41c26;background-image:-moz-linear-gradient(top,#ad1d28,#971923);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ad1d28),to(#971923));background-image:-webkit-linear-gradient(top,#ad1d28,#971923);background-image:-o-linear-gradient(top,#ad1d28,#971923);background-image:linear-gradient(to bottom,#ad1d28,#971923);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffad1d28',endColorstr='#ff971923',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#a41c26;background-image:-moz-linear-gradient(top,#ad1d28,#971923);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ad1d28),to(#971923));background-image:-webkit-linear-gradient(top,#ad1d28,#971923);background-image:-o-linear-gradient(top,#ad1d28,#971923);background-image:linear-gradient(to bottom,#ad1d28,#971923);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffad1d28',endColorstr='#ff971923',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#aaa}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#3cb9c6;border:1px solid #32a1ac;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#444;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#ddd;*background-color:#ddd;background-image:-moz-linear-gradient(top,#ddd,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ddd),to(#ddd));background-image:-webkit-linear-gradient(top,#ddd,#ddd);background-image:-o-linear-gradient(top,#ddd,#ddd);background-image:linear-gradient(to bottom,#ddd,#ddd);background-repeat:repeat-x;border:1px solid rgba(0,0,0,0);*border:0;border-color:#ddd #ddd #b7b7b7;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:rgba(0,0,0,0);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdddddd',endColorstr='#ffdddddd',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#444;background-color:#ddd;*background-color:#d0d0d0}.btn:active,.btn.active{background-color:#c4c4c4 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#444;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:20px 24px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:8px 12px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:4px 8px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ad1d28;*background-color:#ad1d28;background-image:-moz-linear-gradient(top,#ad1d28,#ad1d28);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ad1d28),to(#ad1d28));background-image:-webkit-linear-gradient(top,#ad1d28,#ad1d28);background-image:-o-linear-gradient(top,#ad1d28,#ad1d28);background-image:linear-gradient(to bottom,#ad1d28,#ad1d28);background-repeat:repeat-x;border-color:#ad1d28 #ad1d28 #6b1219;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffad1d28',endColorstr='#ffad1d28',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#ad1d28;*background-color:#971923}.btn-primary:active,.btn-primary.active{background-color:#81161e \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#df6e1e;*background-color:#df6e1e;background-image:-moz-linear-gradient(top,#df6e1e,#df6e1e);background-image:-webkit-gradient(linear,0 0,0 100%,from(#df6e1e),to(#df6e1e));background-image:-webkit-linear-gradient(top,#df6e1e,#df6e1e);background-image:-o-linear-gradient(top,#df6e1e,#df6e1e);background-image:linear-gradient(to bottom,#df6e1e,#df6e1e);background-repeat:repeat-x;border-color:#df6e1e #df6e1e #9c4d15;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdf6e1e',endColorstr='#ffdf6e1e',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#df6e1e;*background-color:#c9631b}.btn-warning:active,.btn-warning.active{background-color:#b25818 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#debb27;*background-color:#debb27;background-image:-moz-linear-gradient(top,#debb27,#debb27);background-image:-webkit-gradient(linear,0 0,0 100%,from(#debb27),to(#debb27));background-image:-webkit-linear-gradient(top,#debb27,#debb27);background-image:-o-linear-gradient(top,#debb27,#debb27);background-image:linear-gradient(to bottom,#debb27,#debb27);background-repeat:repeat-x;border-color:#debb27 #debb27 #a08618;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdebb27',endColorstr='#ffdebb27',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#debb27;*background-color:#ccab1f}.btn-danger:active,.btn-danger.active{background-color:#b6991c \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#48ca3b;*background-color:#48ca3b;background-image:-moz-linear-gradient(top,#48ca3b,#48ca3b);background-image:-webkit-gradient(linear,0 0,0 100%,from(#48ca3b),to(#48ca3b));background-image:-webkit-linear-gradient(top,#48ca3b,#48ca3b);background-image:-o-linear-gradient(top,#48ca3b,#48ca3b);background-image:linear-gradient(to bottom,#48ca3b,#48ca3b);background-repeat:repeat-x;border-color:#48ca3b #48ca3b #319127;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff48ca3b',endColorstr='#ff48ca3b',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#48ca3b;*background-color:#3eb932}.btn-success:active,.btn-success.active{background-color:#38a52d \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#4d3a7d;*background-color:#4d3a7d;background-image:-moz-linear-gradient(top,#4d3a7d,#4d3a7d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d3a7d),to(#4d3a7d));background-image:-webkit-linear-gradient(top,#4d3a7d,#4d3a7d);background-image:-o-linear-gradient(top,#4d3a7d,#4d3a7d);background-image:linear-gradient(to bottom,#4d3a7d,#4d3a7d);background-repeat:repeat-x;border-color:#4d3a7d #4d3a7d #2d2249;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d3a7d',endColorstr='#ff4d3a7d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#4d3a7d;*background-color:#42326c}.btn-info:active,.btn-info.active{background-color:#382a5a \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#27666d;*background-color:#27666d;background-image:-moz-linear-gradient(top,#27666d,#27666d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#27666d),to(#27666d));background-image:-webkit-linear-gradient(top,#27666d,#27666d);background-image:-o-linear-gradient(top,#27666d,#27666d);background-image:linear-gradient(to bottom,#27666d,#27666d);background-repeat:repeat-x;border-color:#27666d #27666d #133135;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff27666d',endColorstr='#ff27666d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#27666d;*background-color:#20545a}.btn-inverse:active,.btn-inverse.active{background-color:#1a4347 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#e8d069;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#e8d069;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#444;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#ddd}.btn-group.open .btn-primary.dropdown-toggle{background-color:#ad1d28}.btn-group.open .btn-warning.dropdown-toggle{background-color:#df6e1e}.btn-group.open .btn-danger.dropdown-toggle{background-color:#debb27}.btn-group.open .btn-success.dropdown-toggle{background-color:#48ca3b}.btn-group.open .btn-info.dropdown-toggle{background-color:#4d3a7d}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#27666d}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#df6e1e;border:1px solid #d2491c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert,.alert h4{color:#e1f0f0}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#e1f0f0;background-color:#48ca3b;border-color:#55b932}.alert-success h4{color:#e1f0f0}.alert-danger,.alert-error{color:#e1f0f0;background-color:#ad1d28;border-color:#a01b3b}.alert-danger h4,.alert-error h4{color:#e1f0f0}.alert-info{color:#e1f0f0;background-color:#4d3a7d;border-color:#352f65}.alert-info h4{color:#e1f0f0}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#ddd}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#aaa;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#e8d069}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#ddd #ddd #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#003f4d;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#e8d069}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#e8d069;border-bottom-color:#e8d069}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#e8d069;border-bottom-color:#e8d069}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#aaa;border-color:#aaa}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#aaa}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#ddd #ddd #ddd #ddd}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#ddd #ddd #ddd #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#aaa}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#ad1d28;background-image:-moz-linear-gradient(top,#ad1d28,#ad1d28);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ad1d28),to(#ad1d28));background-image:-webkit-linear-gradient(top,#ad1d28,#ad1d28);background-image:-o-linear-gradient(top,#ad1d28,#ad1d28);background-image:linear-gradient(to bottom,#ad1d28,#ad1d28);background-repeat:repeat-x;border:1px solid #79141c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffad1d28',endColorstr='#ffad1d28',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#fff;text-shadow:0 1px 0 #ad1d28}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#fff}.navbar-link{color:#fff}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #ad1d28;border-left:1px solid #ad1d28}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:'Cabin',Verdana,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#fff;text-decoration:none;text-shadow:0 1px 0 #ad1d28}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:#d92432}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#d92432;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#971923;*background-color:#971923;background-image:-moz-linear-gradient(top,#971923,#971923);background-image:-webkit-gradient(linear,0 0,0 100%,from(#971923),to(#971923));background-image:-webkit-linear-gradient(top,#971923,#971923);background-image:-o-linear-gradient(top,#971923,#971923);background-image:linear-gradient(to bottom,#971923,#971923);background-repeat:repeat-x;border-color:#971923 #971923 #560e14;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff971923',endColorstr='#ff971923',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#971923;*background-color:#81161e}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#6b1219 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#d92432}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#debb27;background-image:-moz-linear-gradient(top,#debb27,#debb27);background-image:-webkit-gradient(linear,0 0,0 100%,from(#debb27),to(#debb27));background-image:-webkit-linear-gradient(top,#debb27,#debb27);background-image:-o-linear-gradient(top,#debb27,#debb27);background-image:linear-gradient(to bottom,#debb27,#debb27);background-repeat:repeat-x;border-color:rgba(0,0,0,0.1);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdebb27',endColorstr='#ffdebb27',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:rgba(255,255,255,0.2)}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:rgba(255,255,255,0.2)}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#debb27;border-left-color:#debb27}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:rgba(255,255,255,0.2)}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#efde96;border-color:#debb27;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#444;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ccab1f;*background-color:#ccab1f;background-image:-moz-linear-gradient(top,#ccab1f,#ccab1f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccab1f),to(#ccab1f));background-image:-webkit-linear-gradient(top,#ccab1f,#ccab1f);background-image:-o-linear-gradient(top,#ccab1f,#ccab1f);background-image:linear-gradient(to bottom,#ccab1f,#ccab1f);background-repeat:repeat-x;border-color:#ccab1f #ccab1f #8a7415;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffccab1f',endColorstr='#ffccab1f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#ccab1f;*background-color:#b6991c}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#a08618 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#aaa}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#3cb9c6;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:rgba(255,255,255,0.4)}.pagination ul>.active>a,.pagination ul>.active>span{color:#aaa;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#aaa;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:20px 24px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:8px 12px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:4px 8px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#aaa;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#ad1d28;border-bottom:1px solid #971923;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#e8d069;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#aaa}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#e1f0f0}.label-important[href],.badge-important[href]{background-color:#bfdfdf}.label-warning,.badge-warning{background-color:#df6e1e}.label-warning[href],.badge-warning[href]{background-color:#b25818}.label-success,.badge-success{background-color:#e1f0f0}.label-success[href],.badge-success[href]{background-color:#bfdfdf}.label-info,.badge-info{background-color:#e1f0f0}.label-info[href],.badge-info[href]{background-color:#bfdfdf}.label-inverse,.badge-inverse{background-color:#444}.label-inverse[href],.badge-inverse[href]{background-color:#2b2b2b}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#e58846;background-image:-moz-linear-gradient(top,#ea9960,#df6e1e);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ea9960),to(#df6e1e));background-image:-webkit-linear-gradient(top,#ea9960,#df6e1e);background-image:-o-linear-gradient(top,#ea9960,#df6e1e);background-image:linear-gradient(to bottom,#ea9960,#df6e1e);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffea9960',endColorstr='#ffdf6e1e',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ea9960;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#111;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#444;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#3cb9c6;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h6{color:#e1f0f0}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:'Cabin',Verdana,sans-serif;color:#e1f0f0}code,pre{padding:2px;background-color:rgba(255,255,255,0.3)}blockquote{border-left-color:#1cafbd}blockquote.pull-right{border-right-color:#1cafbd}blockquote small{color:rgba(255,255,255,0.6)}.muted{color:rgba(255,255,255,0.6)}body{background-color:#0f8790;background-image:-webkit-gradient(radial,center center,0,center center,460,from(#12a5b0),to(#0f8790));background-image:-webkit-radial-gradient(circle,#12a5b0,#0f8790);background-image:-moz-radial-gradient(circle,#12a5b0,#0f8790);background-image:-o-radial-gradient(circle,#12a5b0,#0f8790);background-repeat:no-repeat}hr{border-bottom:0}.page-header{margin:30px 0 15px;border-bottom:0 solid transparent}.navbar .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .brand{padding:15px 20px 14px;font-family:'Lobster',cursive;font-size:24px;font-weight:normal}.navbar .nav>li>a{padding-top:17px;padding-bottom:14px;text-shadow:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-search{margin-top:10px}.navbar .navbar-search .search-query{padding-top:5px;padding-bottom:5px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .navbar-text{margin:17px 15px 14px;line-height:20px}.navbar .btn,.navbar .btn-group{padding:4px}.navbar-inverse .dropdown-menu li>a:hover,.navbar-inverse .dropdown-menu li>a:focus,.navbar-inverse .dropdown-submenu:hover>a{background-color:#debb27;background-image:none}@media(max-width:979px){.navbar .nav-collapse .nav li>a{color:#e1f0f0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .nav-collapse .nav li>a:hover{background-color:#d92432}.navbar .nav-collapse .dropdown-menu li>a:hover,.navbar .nav-collapse .dropdown-menu li>a:focus,.navbar .nav-collapse .dropdown-submenu:hover>a{background-image:none}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav-collapse .navbar-search .search-query{border:2px solid #e1f0f0}.navbar .nav-collapse .nav-header{color:rgba(255,255,255,0.5)}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#fff!important}.navbar-inverse .nav-collapse .nav li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:#e5c953!important}}div.subnav{margin:0 1px;background:rgba(42,99,105,0.9) none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav .nav>li>a{color:#e1f0f0;border-color:transparent}div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}div.subnav .nav>.active>a{color:#e1f0f0;background-color:rgba(255,255,255,0.4);border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav .nav>li>a:hover,div.subnav .nav>.active>a:hover{color:#e1f0f0;background-color:rgba(255,255,255,0.4);border-right-color:transparent}div.subnav .nav>li.open>a{background-color:rgba(255,255,255,0.4);border-color:transparent}div.subnav-fixed{top:51px;margin:0}@media(max-width:767px){div.subnav .nav>li+li>a{border-top:1px solid rgba(255,255,255,0.4)}}.nav-tabs,.nav-pills{border-color:transparent}.nav-tabs>li>a,.nav-pills>li>a{border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0;-moz-box-shadow:0;box-shadow:0}.nav-tabs>li>a:hover,.nav-pills>li>a:hover{text-shadow:none;background-color:#8ad5dc;border-color:transparent}.nav-tabs>.active>a,.nav-pills>.active>a,.nav-tabs>.active>a:hover,.nav-pills>.active>a:hover{color:#e1f0f0;text-shadow:none;background-color:#8ad5dc;border-color:transparent}.nav-tabs>.disabled>a,.nav-pills>.disabled>a,.nav-tabs>.disabled>a:hover,.nav-pills>.disabled>a:hover{color:#ddd;background:0}.nav-tabs>.open>.dropdown-toggle,.nav-pills>.open>.dropdown-toggle,.nav-tabs>.open>.dropdown-toggle,.nav-pills>.open>.dropdown-toggle{color:#e8d069;background-color:#8ad5dc;border-color:transparent}.nav-tabs{border-bottom:1px solid rgba(255,255,255,0.5)}.nav-tabs>li>a{background-color:#3cb9c6}.nav-tabs.nav-stacked li>a:first-child,.nav-tabs.nav-stacked li>a:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked li>a,.nav-tabs.nav-stacked li>a:hover,.nav-tabs.nav-stacked li.active>a,.nav-tabs.nav-stacked li.active>a:hover{border-color:transparent}.nav-list .nav-header{color:#e1f0f0;text-shadow:none}.nav-list li>a{text-shadow:none}.nav-list li.active>a,.nav-list li>a:hover,.nav-list li.active>a:hover{text-shadow:none;background-color:#8ad5dc}.nav-list .divider{background-color:rgba(255,255,255,0.3);border-bottom:0}.breadcrumb,.pager>li>a{text-shadow:none;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.breadcrumb{background-color:#3cb9c6;background-image:none}.breadcrumb li{text-shadow:none}.breadcrumb .active{color:#fff}.breadcrumb>li>a.divider,.breadcrumb>li>span.divider{color:#ddd}.pagination ul{background-color:#3cb9c6;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.pagination ul>li>a:hover{color:#e8d069;background-color:rgba(255,255,255,0.4)}.pagination ul>li:first-child>a,.pagination ul>li:last-child>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{color:#e1f0f0}.pagination ul>.active>a,.pagination ul>.active>a:hover,.pagination ul>.active>span,.pagination ul>.active>span:hover{color:#e1f0f0;background-color:rgba(255,255,255,0.4)}.pager li>a{background-color:#3cb9c6}.pager li>a:hover{background-color:#8ad5dc}.pager .disabled a,.pager .disabled a:hover{color:#fff;background-color:#3cb9c6}.btn{padding:12px 16px;text-shadow:none;background-color:#ddd;background-image:none;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{text-shadow:none;background-color:#d0d0d0}.btn:active,.btn.active{background-color:#b7b7b7;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn:active,.btn.active{background-color:#b7b7b7 \9}.btn-large{padding:20px 24px}.btn-small{padding:8px 12px}.btn-mini{padding:4px 8px}.btn-group .btn:first-child{margin-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group .dropdown-toggle,.btn-group.open .dropdown-toggle,.btn.open .dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-primary{background-color:#ad1d28;border-color:transparent}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{text-shadow:none;background-color:#971923}.btn-primary:active,.btn-primary.active{background-color:#6b1219;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-primary:active,.btn-primary.active{background-color:#6b1219 \9}.btn-info{background-color:#4d3a7d;border-color:transparent}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{text-shadow:none;background-color:#42326c}.btn-info:active,.btn-info.active{background-color:#2d2249;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-info:active,.btn-info.active{background-color:#2d2249 \9}.btn-success{background-color:#48ca3b;border-color:transparent}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{text-shadow:none;background-color:#3eb932}.btn-success:active,.btn-success.active{background-color:#319127;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-success:active,.btn-success.active{background-color:#319127 \9}.btn-warning{background-color:#df6e1e;border-color:transparent}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{text-shadow:none;background-color:#c9631b}.btn-warning:active,.btn-warning.active{background-color:#9c4d15;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-warning:active,.btn-warning.active{background-color:#9c4d15 \9}.btn-danger{background-color:#debb27;border-color:transparent}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{text-shadow:none;background-color:#ccab1f}.btn-danger:active,.btn-danger.active{background-color:#a08618;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-danger:active,.btn-danger.active{background-color:#a08618 \9}.btn-inverse{background-color:#27666d;border-color:transparent}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{text-shadow:none;background-color:#20545a}.btn-inverse:active,.btn-inverse.active{background-color:#133135;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-inverse:active,.btn-inverse.active{background-color:#133135 \9}.btn-link{background-color:#ad1d28;border-color:transparent}.btn-link:hover,.btn-link:active,.btn-link.active,.btn-link.disabled,.btn-link[disabled]{text-shadow:none;background-color:#971923}.btn-link:active,.btn-link.active{background-color:#6b1219;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link:active,.btn-link.active{background-color:#6b1219 \9}.btn-small [class^="icon-"]{margin-top:1px}.add-on [class^="icon-"]{margin-left:5px}.table th,.table td,.table tbody+tbody{border-top:0 solid transparent}.table-bordered{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table tbody tr.success td{background-color:#48ca3b}.table tbody tr.error td{background-color:#ad1d28}.table tbody tr.info td{background-color:#00bce1}legend{font-family:'Lobster',cursive}legend,label,.help-block,.input-file{color:inherit;border:0 solid transparent}input,textarea,.uneditable-input{padding:10px;border:0 solid transparent}.uneditable-input{padding-bottom:30px}select{border:0 solid transparent}button{margin-left:12px}input,textarea,.search-query,.uneditable-input,.input-append input,.input-append .uneditable-input,.input-prepend input,.input-prepend .uneditable-input{border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.form-actions{border-top:0 solid transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#debb27}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#debb27}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#f2e5ac;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#ecd77f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#debb27;background-color:#df6e1e;border-color:#debb27}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#df6e1e}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#df6e1e}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#f3c4a3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#eda776;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefd;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefd;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fffefd}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#df6e1e;background-color:#ad1d28;border-color:#df6e1e}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#48ca3b}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#48ca3b}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#93e08b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#6dd563;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #def5dc;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #def5dc;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #def5dc}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#48ca3b;background-color:#48ca3b;border-color:#48ca3b}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#4d3a7d}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#4d3a7d}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#7d65b8;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#624aa0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b8abd8;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b8abd8;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b8abd8}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#4d3a7d;background-color:#4d3a7d;border-color:#4d3a7d}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#f2e5ac}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#f3c4a3}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#93e08b}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#7d65b8}.input-prepend .add-on,.input-append .add-on{height:20px;padding-top:4px;color:#555;text-shadow:none;background-color:#ddd;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .btn,.input-prepend .btn{padding:4px 10px}.alert{text-shadow:none;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#e1f0f0}.alert-heading{color:#e1f0f0}.label,.badge{background-color:#00bce1}.label-success,.badge-success{background-color:#48ca3b}.label-important,.badge-important{background-color:#ad1d28}.label-warning,.badge-warning{background-color:#df6e1e}.label-info,.badge-info{background-color:#4d3a7d}.label-inverse,.badge-inverse{background-color:#27666d}.progress,.well,pre,code{text-shadow:none;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.well{background-image:none}.hero-unit{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.thumbnail{border:0 solid transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress{background-color:#27666d;background-image:none}.progress .bar{background-color:#debb27;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress .bar-success{background-color:#48ca3b}.progress .bar-warning{background-color:#df6e1e}.progress .bar-error{background-color:#ad1d28}.progress-danger .bar{background-color:#ad1d28;background-image:none}.progress-danger.progress-striped .bar{background-color:#ad1d28;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar{background-color:#48ca3b;background-image:none}.progress-success.progress-striped .bar{background-color:#48ca3b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar{background-color:#00bce1;background-image:none}.progress-info.progress-striped .bar{background-color:#00bce1;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.modal{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal-header{color:#fff;background-color:#ad1d28}.modal-body{color:#444}.modal-body h1,.modal-body h2,.modal-body h3,.modal-body h4,.modal-body h5,.modal-body h6,.modal-body legend{color:#ad1d28}.modal-body label,.modal-body .input-file{color:#444}.modal-body .help-block,.modal-body .help-inline{color:#aaa}.modal-body textarea,.modal-body input,.modal-body .uneditable-input{border:1px solid #aaa}.popover{padding:0;color:#444;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover .popover-title{color:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css new file mode 100644 index 0000000..9740c15 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/cerulean/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url(//fonts.googleapis.com/css?family=Telex);/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#555;background-color:#fff}a{color:#2fa4e7;text-decoration:none}a:hover,a:focus{color:#157ab5;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#dd5600}a.text-warning:hover,a.text-warning:focus{color:#aa4200}.text-error{color:#bd4247}a.text-error:hover,a.text-error:focus{color:#983538}.text-info{color:#178acc}a.text-info:hover,a.text-info:focus{color:#126b9e}.text-success{color:#669533}a.text-success:hover,a.text-success:focus{color:#4c6f26}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:'Telex',sans-serif;font-weight:bold;line-height:20px;color:#317eac;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #f5f5f5}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #f5f5f5;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #f5f5f5}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #f5f5f5;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#f5f5f5}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#dd5600}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#dd5600}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#dd5600;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#aa4200;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff8d44;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff8d44;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff8d44}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#dd5600;background-color:#f1ceab;border-color:#dd5600}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#bd4247}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#bd4247}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#bd4247;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#983538;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d88e90;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d88e90;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d88e90}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#bd4247;background-color:#f2bdb1;border-color:#bd4247}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#669533}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#669533}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#669533;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#4c6f26;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #99ca63;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #99ca63;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #99ca63}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#669533;background-color:#d5ecbf;border-color:#669533}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#178acc}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#178acc}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#178acc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#126b9e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5db8ec;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5db8ec;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #5db8ec}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#178acc;background-color:#a7dff1;border-color:#178acc}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#f5f5f5;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bede9c;border-color:#73a839}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#d5ecbf}.table tbody tr.error>td{background-color:#f2bdb1}.table tbody tr.warning>td{background-color:#f1ceab}.table tbody tr.info>td{background-color:#a7dff1}.table-hover tbody tr.success:hover>td{background-color:#c8e6ab}.table-hover tbody tr.error:hover>td{background-color:#eeab9b}.table-hover tbody tr.warning:hover>td{background-color:#edc195}.table-hover tbody tr.info:hover>td{background-color:#91d7ee}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#27a0e5;background-image:-moz-linear-gradient(top,#2fa4e7,#1a99e2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2fa4e7),to(#1a99e2));background-image:-webkit-linear-gradient(top,#2fa4e7,#1a99e2);background-image:-o-linear-gradient(top,#2fa4e7,#1a99e2);background-image:linear-gradient(to bottom,#2fa4e7,#1a99e2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2fa4e7',endColorstr='#ff1a99e2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#27a0e5;background-image:-moz-linear-gradient(top,#2fa4e7,#1a99e2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2fa4e7),to(#1a99e2));background-image:-webkit-linear-gradient(top,#2fa4e7,#1a99e2);background-image:-o-linear-gradient(top,#2fa4e7,#1a99e2);background-image:linear-gradient(to bottom,#2fa4e7,#1a99e2);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2fa4e7',endColorstr='#ff1a99e2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#2f92e7;*background-color:#2f76e7;background-image:-moz-linear-gradient(top,#2fa4e7,#2f76e7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2fa4e7),to(#2f76e7));background-image:-webkit-linear-gradient(top,#2fa4e7,#2f76e7);background-image:-o-linear-gradient(top,#2fa4e7,#2f76e7);background-image:linear-gradient(to bottom,#2fa4e7,#2f76e7);background-repeat:repeat-x;border-color:#2f76e7 #2f76e7 #1553b5;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2fa4e7',endColorstr='#ff2f76e7',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#2f76e7;*background-color:#1a67e2}.btn-primary:active,.btn-primary.active{background-color:#175dcc \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#dd5600;*background-color:#dd5600;background-image:-moz-linear-gradient(top,#dd5600,#dd5600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#dd5600),to(#dd5600));background-image:-webkit-linear-gradient(top,#dd5600,#dd5600);background-image:-o-linear-gradient(top,#dd5600,#dd5600);background-image:linear-gradient(to bottom,#dd5600,#dd5600);background-repeat:repeat-x;border-color:#dd5600 #dd5600 #913800;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd5600',endColorstr='#ffdd5600',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#dd5600;*background-color:#c44c00}.btn-warning:active,.btn-warning.active{background-color:#aa4200 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#c32627;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#c71c22,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c71c22),to(#bd362f));background-image:-webkit-linear-gradient(top,#c71c22,#bd362f);background-image:-o-linear-gradient(top,#c71c22,#bd362f);background-image:linear-gradient(to bottom,#c71c22,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc71c22',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#65a643;*background-color:#51a351;background-image:-moz-linear-gradient(top,#73a839,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#73a839),to(#51a351));background-image:-webkit-linear-gradient(top,#73a839,#51a351);background-image:-o-linear-gradient(top,#73a839,#51a351);background-image:linear-gradient(to bottom,#73a839,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff73a839',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#6d76b3;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#9760b3,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#9760b3),to(#2f96b4));background-image:-webkit-linear-gradient(top,#9760b3,#2f96b4);background-image:-o-linear-gradient(top,#9760b3,#2f96b4);background-image:linear-gradient(to bottom,#9760b3,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff9760b3',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0f3253;*background-color:#222;background-image:-moz-linear-gradient(top,#033c73,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#033c73),to(#222));background-image:-webkit-linear-gradient(top,#033c73,#222);background-image:-o-linear-gradient(top,#033c73,#222);background-image:linear-gradient(to bottom,#033c73,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff033c73',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#2fa4e7;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#157ab5;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#2f76e7}.btn-group.open .btn-warning.dropdown-toggle{background-color:#dd5600}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#f1ceab;border:1px solid #efb99e;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#dd5600}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#669533;background-color:#d5ecbf;border-color:#d2e6ab}.alert-success h4{color:#669533}.alert-danger,.alert-error{color:#bd4247;background-color:#f2bdb1;border-color:#f0a5a4}.alert-danger h4,.alert-error h4{color:#bd4247}.alert-info{color:#178acc;background-color:#a7dff1;border-color:#88e4ec}.alert-info h4{color:#178acc}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#f5f5f5}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#2fa4e7}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#f5f5f5 #f5f5f5 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#2fa4e7}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#2fa4e7;border-bottom-color:#2fa4e7}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#157ab5;border-bottom-color:#157ab5}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#f5f5f5 #ddd #f5f5f5 #f5f5f5}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#f5f5f5 #f5f5f5 #f5f5f5 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#45aeea;background-image:-moz-linear-gradient(top,#54b4eb,#2fa4e7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#54b4eb),to(#2fa4e7));background-image:-webkit-linear-gradient(top,#54b4eb,#2fa4e7);background-image:-o-linear-gradient(top,#54b4eb,#2fa4e7);background-image:linear-gradient(to bottom,#54b4eb,#2fa4e7);background-repeat:repeat-x;border:1px solid #1990d5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff54b4eb',endColorstr='#ff2fa4e7',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#fff;text-shadow:0 1px 0 #54b4eb}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#f5f5f5}.navbar-link{color:#fff}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #54b4eb;border-left:1px solid #2fa4e7}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#fff;text-decoration:none;text-shadow:0 1px 0 #54b4eb}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:#1684c2}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#1684c2;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#2fa3e6;*background-color:#1a99e2;background-image:-moz-linear-gradient(top,#3daae9,#1a99e2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#3daae9),to(#1a99e2));background-image:-webkit-linear-gradient(top,#3daae9,#1a99e2);background-image:-o-linear-gradient(top,#3daae9,#1a99e2);background-image:linear-gradient(to bottom,#3daae9,#1a99e2);background-repeat:repeat-x;border-color:#1a99e2 #1a99e2 #126b9e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3daae9',endColorstr='#ff1a99e2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#1a99e2;*background-color:#178acc}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#157ab5 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#1684c2}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#034482;background-image:-moz-linear-gradient(top,#04498c,#033c73);background-image:-webkit-gradient(linear,0 0,0 100%,from(#04498c),to(#033c73));background-image:-webkit-linear-gradient(top,#04498c,#033c73);background-image:-o-linear-gradient(top,#04498c,#033c73);background-image:linear-gradient(to bottom,#04498c,#033c73);background-repeat:repeat-x;border-color:#033464;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff04498c',endColorstr='#ff033c73',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:#022c55}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#022c55}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#04498c;border-left-color:#033c73}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#022c55}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#fff;border-color:#033c73;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#033769;*background-color:#022f5a;background-image:-moz-linear-gradient(top,#033c73,#022f5a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#033c73),to(#022f5a));background-image:-webkit-linear-gradient(top,#033c73,#022f5a);background-image:-o-linear-gradient(top,#033c73,#022f5a);background-image:linear-gradient(to bottom,#033c73,#022f5a);background-repeat:repeat-x;border-color:#022f5a #022f5a #000810;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff033c73',endColorstr='#ff022f5a',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#022f5a;*background-color:#022241}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#011528 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#2fa4e7;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#bd4247}.label-important[href],.badge-important[href]{background-color:#983538}.label-warning,.badge-warning{background-color:#dd5600}.label-warning[href],.badge-warning[href]{background-color:#aa4200}.label-success,.badge-success{background-color:#669533}.label-success[href],.badge-success[href]{background-color:#4c6f26}.label-info,.badge-info{background-color:#178acc}.label-info[href],.badge-info[href]{background-color:#126b9e}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#f16e1a;background-image:-moz-linear-gradient(top,#ff7d2b,#dd5600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff7d2b),to(#dd5600));background-image:-webkit-linear-gradient(top,#ff7d2b,#dd5600);background-image:-o-linear-gradient(top,#ff7d2b,#dd5600);background-image:linear-gradient(to bottom,#ff7d2b,#dd5600);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff7d2b',endColorstr='#ffdd5600',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ff7d2b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}.navbar .brand{padding:14px 20px 16px;font-family:'Telex',sans-serif;text-shadow:1px 1px 0 rgba(0,0,0,0.2)}.navbar li{line-height:20px}.navbar .nav>li>a{padding:16px 10px 14px;font-family:'Telex',sans-serif;text-shadow:1px 1px 0 rgba(0,0,0,0.2)}.navbar .search-query{line-height:normal;border:1px solid #178acc}.navbar .navbar-text{padding:19px 10px 18px;line-height:13px;color:rgba(0,0,0,0.5);text-shadow:1px 1px 0 rgba(255,255,255,0.3)}.navbar-inverse .navbar-search .search-query{color:#555}@media(max-width:979px){.navbar .nav-collapse .nav li>a{font-family:'Telex',sans-serif;font-weight:normal;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,0.2)}.navbar .nav-collapse .nav li>a:hover{background-color:#2b7cac}.navbar .nav-collapse .nav .active>a{background-color:#2b7cac;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav-collapse .dropdown-menu li>a:hover,.navbar .nav-collapse .dropdown-menu li>a:focus,.navbar .nav-collapse .dropdown-submenu:hover>a{background-image:none}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border:0}.navbar .nav-collapse .nav-header{color:#2b7cac}.navbar-inverse .nav-collapse .nav li>a{color:#fff}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:rgba(0,0,0,0.1)}.navbar-inverse .nav-collapse .nav .active>a,.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:hover{background-color:rgba(0,0,0,0.1)!important}}div.subnav{font-family:'Telex',sans-serif;text-shadow:1px 1px 0 rgba(255,255,255,0.2)}div.subnav-fixed{top:51px}.btn{background-color:#fff;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),color-stop(5%,#fff),to(#fff));background-image:-webkit-linear-gradient(#fff,#fff 5%,#fff);background-image:-moz-linear-gradient(top,#fff,#fff 5%,#fff);background-image:-o-linear-gradient(#fff,#fff 5%,#fff);background-image:linear-gradient(#fff,#fff 5%,#fff);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffffffff',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover{background-position:0 0}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#3daae9;*background-color:#2fa4e7;background-image:-moz-linear-gradient(top,#46aeea,#2fa4e7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#46aeea),to(#2fa4e7));background-image:-webkit-linear-gradient(top,#46aeea,#2fa4e7);background-image:-o-linear-gradient(top,#46aeea,#2fa4e7);background-image:linear-gradient(to bottom,#46aeea,#2fa4e7);background-repeat:repeat-x;border-color:#2fa4e7 #2fa4e7 #157ab5;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff46aeea',endColorstr='#ff2fa4e7',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#2fa4e7;*background-color:#1a99e2}.btn-primary:active,.btn-primary.active{background-color:#178acc \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9e6ab8;*background-color:#9760b3;background-image:-moz-linear-gradient(top,#a271bb,#9760b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a271bb),to(#9760b3));background-image:-webkit-linear-gradient(top,#a271bb,#9760b3);background-image:-o-linear-gradient(top,#a271bb,#9760b3);background-image:linear-gradient(to bottom,#a271bb,#9760b3);background-repeat:repeat-x;border-color:#9760b3 #9760b3 #6f4086;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa271bb',endColorstr='#ff9760b3',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#9760b3;*background-color:#8b51a9}.btn-info:active,.btn-info.active{background-color:#7d4898 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7bb33d;*background-color:#73a839;background-image:-moz-linear-gradient(top,#80bb3f,#73a839);background-image:-webkit-gradient(linear,0 0,0 100%,from(#80bb3f),to(#73a839));background-image:-webkit-linear-gradient(top,#80bb3f,#73a839);background-image:-o-linear-gradient(top,#80bb3f,#73a839);background-image:linear-gradient(to bottom,#80bb3f,#73a839);background-repeat:repeat-x;border-color:#73a839 #73a839 #4c6f26;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff80bb3f',endColorstr='#ff73a839',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#73a839;*background-color:#669533}.btn-success:active,.btn-success.active{background-color:#59822c \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ec5c00;*background-color:#dd5600;background-image:-moz-linear-gradient(top,#f76000,#dd5600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f76000),to(#dd5600));background-image:-webkit-linear-gradient(top,#f76000,#dd5600);background-image:-o-linear-gradient(top,#f76000,#dd5600);background-image:linear-gradient(to bottom,#f76000,#dd5600);background-repeat:repeat-x;border-color:#dd5600 #dd5600 #913800;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff76000',endColorstr='#ffdd5600',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#dd5600;*background-color:#c44c00}.btn-warning:active,.btn-warning.active{background-color:#aa4200 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d41e24;*background-color:#c71c22;background-image:-moz-linear-gradient(top,#dd1f26,#c71c22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#dd1f26),to(#c71c22));background-image:-webkit-linear-gradient(top,#dd1f26,#c71c22);background-image:-o-linear-gradient(top,#dd1f26,#c71c22);background-image:linear-gradient(to bottom,#dd1f26,#c71c22);background-repeat:repeat-x;border-color:#c71c22 #c71c22 #841317;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdd1f26',endColorstr='#ffc71c22',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c71c22;*background-color:#b1191e}.btn-danger:active,.btn-danger.active{background-color:#9a161a \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#034482;*background-color:#033c73;background-image:-moz-linear-gradient(top,#04498c,#033c73);background-image:-webkit-gradient(linear,0 0,0 100%,from(#04498c),to(#033c73));background-image:-webkit-linear-gradient(top,#04498c,#033c73);background-image:-o-linear-gradient(top,#04498c,#033c73);background-image:linear-gradient(to bottom,#04498c,#033c73);background-repeat:repeat-x;border-color:#033c73 #033c73 #011528;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff04498c',endColorstr='#ff033c73',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#033c73;*background-color:#022f5a}.btn-inverse:active,.btn-inverse.active{background-color:#022241 \9}i[class^="icon-"]{opacity:.8}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css new file mode 100644 index 0000000..cae7e4f --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/cosmo/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Open Sans",Calibri,Candara,Arial,sans-serif;font-size:14px;line-height:20px;color:#555;background-color:#fff}a{color:#007fff;text-decoration:none}a:hover,a:focus{color:#06c;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#dfdfdf}a.muted:hover,a.muted:focus{color:#c6c6c6}.text-warning{color:#fff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-error{color:#fff}a.text-error:hover,a.text-error:focus{color:#e6e6e6}.text-info{color:#fff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-success{color:#fff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:300;line-height:20px;color:#080808;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#dfdfdf}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #dfdfdf}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#dfdfdf}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#999;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#dfdfdf}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Open Sans",Calibri,Candara,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#bbb;vertical-align:middle;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #bbb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #bbb}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#dfdfdf;cursor:not-allowed;background-color:#fcfcfc;border-color:#bbb;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#bbb}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#bbb}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#bbb}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#fff}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#fff}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#fff;background-color:#ff7518;border-color:#fff}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#fff}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#fff}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#fff;background-color:#ff0039;border-color:#fff}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#fff}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#fff}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#fff;background-color:#3fb618;border-color:#fff}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#fff}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#fff}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#fff;background-color:#9954bb;border-color:#fff}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#96ed7a;border-color:#3fb618}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#e8f8fd}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#3fb618}.table tbody tr.error>td{background-color:#ff0039}.table tbody tr.warning>td{background-color:#ff7518}.table tbody tr.info>td{background-color:#9954bb}.table-hover tbody tr.success:hover>td{background-color:#379f15}.table-hover tbody tr.error:hover>td{background-color:#e60033}.table-hover tbody tr.warning:hover>td{background-color:#fe6600}.table-hover tbody tr.info:hover>td{background-color:#8d46b0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#999;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#007af5;background-image:-moz-linear-gradient(top,#007fff,#0072e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#007fff),to(#0072e6));background-image:-webkit-linear-gradient(top,#007fff,#0072e6);background-image:-o-linear-gradient(top,#007fff,#0072e6);background-image:linear-gradient(to bottom,#007fff,#0072e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff007fff',endColorstr='#ff0072e6',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#007af5;background-image:-moz-linear-gradient(top,#007fff,#0072e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#007fff),to(#0072e6));background-image:-webkit-linear-gradient(top,#007fff,#0072e6);background-image:-o-linear-gradient(top,#007fff,#0072e6);background-image:linear-gradient(to bottom,#007fff,#0072e6);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff007fff',endColorstr='#ff0072e6',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#dfdfdf}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #dcdcdc;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well-small{padding:9px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#999;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#dfdfdf;*background-color:#c8c8c8;background-image:-moz-linear-gradient(top,#eee,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#eee,#c8c8c8);background-image:-o-linear-gradient(top,#eee,#c8c8c8);background-image:linear-gradient(to bottom,#eee,#c8c8c8);background-repeat:repeat-x;border:1px solid #bbb;*border:0;border-color:#c8c8c8 #c8c8c8 #a2a2a2;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#a2a2a2;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffc8c8c8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#999;background-color:#c8c8c8;*background-color:#bbb}.btn:active,.btn.active{background-color:#aeaeae \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#999;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:22px 30px;font-size:17.5px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:10.5px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0f82f5;*background-color:#0072e6;background-image:-moz-linear-gradient(top,#1a8cff,#0072e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a8cff),to(#0072e6));background-image:-webkit-linear-gradient(top,#1a8cff,#0072e6);background-image:-o-linear-gradient(top,#1a8cff,#0072e6);background-image:linear-gradient(to bottom,#1a8cff,#0072e6);background-repeat:repeat-x;border-color:#0072e6 #0072e6 #004c99;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a8cff',endColorstr='#ff0072e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#0072e6;*background-color:#06c}.btn-primary:active,.btn-primary.active{background-color:#0059b3 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#fe781e;*background-color:#fe6600;background-image:-moz-linear-gradient(top,#ff8432,#fe6600);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff8432),to(#fe6600));background-image:-webkit-linear-gradient(top,#ff8432,#fe6600);background-image:-o-linear-gradient(top,#ff8432,#fe6600);background-image:linear-gradient(to bottom,#ff8432,#fe6600);background-repeat:repeat-x;border-color:#fe6600 #fe6600 #b14700;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff8432',endColorstr='#fffe6600',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#fe6600;*background-color:#e45c00}.btn-warning:active,.btn-warning.active{background-color:#cb5200 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f50f43;*background-color:#e60033;background-image:-moz-linear-gradient(top,#ff1a4d,#e60033);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff1a4d),to(#e60033));background-image:-webkit-linear-gradient(top,#ff1a4d,#e60033);background-image:-o-linear-gradient(top,#ff1a4d,#e60033);background-image:linear-gradient(to bottom,#ff1a4d,#e60033);background-repeat:repeat-x;border-color:#e60033 #e60033 #902;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff1a4d',endColorstr='#ffe60033',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#e60033;*background-color:#cc002e}.btn-danger:active,.btn-danger.active{background-color:#b30028 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#41bb19;*background-color:#379f15;background-image:-moz-linear-gradient(top,#47cd1b,#379f15);background-image:-webkit-gradient(linear,0 0,0 100%,from(#47cd1b),to(#379f15));background-image:-webkit-linear-gradient(top,#47cd1b,#379f15);background-image:-o-linear-gradient(top,#47cd1b,#379f15);background-image:linear-gradient(to bottom,#47cd1b,#379f15);background-repeat:repeat-x;border-color:#379f15 #379f15 #205c0c;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff47cd1b',endColorstr='#ff379f15',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#379f15;*background-color:#2f8912}.btn-success:active,.btn-success.active{background-color:#28720f \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9b59bb;*background-color:#8d46b0;background-image:-moz-linear-gradient(top,#a466c2,#8d46b0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a466c2),to(#8d46b0));background-image:-webkit-linear-gradient(top,#a466c2,#8d46b0);background-image:-o-linear-gradient(top,#a466c2,#8d46b0);background-image:linear-gradient(to bottom,#a466c2,#8d46b0);background-repeat:repeat-x;border-color:#8d46b0 #8d46b0 #613079;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa466c2',endColorstr='#ff8d46b0',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#8d46b0;*background-color:#7e3f9d}.btn-info:active,.btn-info.active{background-color:#6f378b \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#080808;*background-color:#000;background-image:-moz-linear-gradient(top,#0d0d0d,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0d0d0d),to(#000));background-image:-webkit-linear-gradient(top,#0d0d0d,#000);background-image:-o-linear-gradient(top,#0d0d0d,#000);background-image:linear-gradient(to bottom,#0d0d0d,#000);background-repeat:repeat-x;border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0d0d0d',endColorstr='#ff000000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#007fff;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#06c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#999;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#c8c8c8}.btn-group.open .btn-primary.dropdown-toggle{background-color:#0072e6}.btn-group.open .btn-warning.dropdown-toggle{background-color:#fe6600}.btn-group.open .btn-danger.dropdown-toggle{background-color:#e60033}.btn-group.open .btn-success.dropdown-toggle{background-color:#379f15}.btn-group.open .btn-info.dropdown-toggle{background-color:#8d46b0}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#000}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#ff7518;border:1px solid transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert,.alert h4{color:#fff}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#fff;background-color:#3fb618;border-color:transparent}.alert-success h4{color:#fff}.alert-danger,.alert-error{color:#fff;background-color:#ff0039;border-color:transparent}.alert-danger h4,.alert-error h4{color:#fff}.alert-info{color:#fff;background-color:#9954bb;border-color:transparent}.alert-info h4{color:#fff}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#dfdfdf;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#007fff}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#bbb;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#007fff}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#007fff;border-bottom-color:#007fff}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#06c;border-bottom-color:#06c}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#dfdfdf;border-color:#dfdfdf}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#dfdfdf}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#dfdfdf}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#080808;background-image:-moz-linear-gradient(top,#080808,#080808);background-image:-webkit-gradient(linear,0 0,0 100%,from(#080808),to(#080808));background-image:-webkit-linear-gradient(top,#080808,#080808);background-image:-o-linear-gradient(top,#080808,#080808);background-image:linear-gradient(to bottom,#080808,#080808);background-repeat:repeat-x;border:1px solid transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808',endColorstr='#ff080808',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#fff;text-shadow:0 1px 0 #080808}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#fff}.navbar-link{color:#fff}.navbar-link:hover,.navbar-link:focus{color:#bbb}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #080808;border-left:1px solid #080808}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Open Sans",Calibri,Candara,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#fff;text-decoration:none;text-shadow:0 1px 0 #080808}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#bbb;text-decoration:none;background-color:rgba(0,0,0,0.05)}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:transparent;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#000;*background-color:#000;background-image:-moz-linear-gradient(top,#000,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#000),to(#000));background-image:-webkit-linear-gradient(top,#000,#000);background-image:-o-linear-gradient(top,#000,#000);background-image:linear-gradient(to bottom,#000,#000);background-repeat:repeat-x;border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff000000',endColorstr='#ff000000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#000;*background-color:#000}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#bbb;border-bottom-color:#bbb}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:transparent}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#007fff;background-image:-moz-linear-gradient(top,#007fff,#007fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#007fff),to(#007fff));background-image:-webkit-linear-gradient(top,#007fff,#007fff);background-image:-o-linear-gradient(top,#007fff,#007fff);background-image:linear-gradient(to bottom,#007fff,#007fff);background-repeat:repeat-x;border-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff007fff',endColorstr='#ff007fff',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:rgba(0,0,0,0.05)}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#007fff}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#007fff;border-left-color:#007fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#007fff}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#80bfff;border-color:#007fff;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#999;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0072e6;*background-color:#0072e6;background-image:-moz-linear-gradient(top,#0072e6,#0072e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0072e6),to(#0072e6));background-image:-webkit-linear-gradient(top,#0072e6,#0072e6);background-image:-o-linear-gradient(top,#0072e6,#0072e6);background-image:linear-gradient(to bottom,#0072e6,#0072e6);background-repeat:repeat-x;border-color:#0072e6 #0072e6 #004c99;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0072e6',endColorstr='#ff0072e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#0072e6;*background-color:#06c}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#0059b3 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#dfdfdf}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#dfdfdf;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#007fff}.pagination ul>.active>a,.pagination ul>.active>span{color:#dfdfdf;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#dfdfdf;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:22px 30px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:2px 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#dfdfdf;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#ff7518;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#ff7518;border-bottom:1px solid #fe6600;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:16px}.popover .arrow:after{border-width:15px;content:""}.popover.top .arrow{bottom:-16px;left:50%;margin-left:-16px;border-top-color:#999;border-top-color:transparent;border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-15px;border-top-color:#ff7518;border-bottom-width:0}.popover.right .arrow{top:50%;left:-16px;margin-top:-16px;border-right-color:#999;border-right-color:transparent;border-left-width:0}.popover.right .arrow:after{bottom:-15px;left:1px;border-right-color:#ff7518;border-left-width:0}.popover.bottom .arrow{top:-16px;left:50%;margin-left:-16px;border-bottom-color:#999;border-bottom-color:transparent;border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-15px;border-bottom-color:#ff7518;border-top-width:0}.popover.left .arrow{top:50%;right:-16px;margin-top:-16px;border-left-color:#999;border-left-color:transparent;border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-15px;border-left-color:#ff7518;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#007fff;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#bbb}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#dfdfdf}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#fff}.label-important[href],.badge-important[href]{background-color:#e6e6e6}.label-warning,.badge-warning{background-color:#ff7518}.label-warning[href],.badge-warning[href]{background-color:#e45c00}.label-success,.badge-success{background-color:#fff}.label-success[href],.badge-success[href]{background-color:#e6e6e6}.label-info,.badge-info{background-color:#fff}.label-info[href],.badge-info[href]{background-color:#e6e6e6}.label-inverse,.badge-inverse{background-color:#999}.label-inverse[href],.badge-inverse[href]{background-color:#808080}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9046;background-image:-moz-linear-gradient(top,#ffa365,#ff7518);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa365),to(#ff7518));background-image:-webkit-linear-gradient(top,#ffa365,#ff7518);background-image:-o-linear-gradient(top,#ffa365,#ff7518);background-image:linear-gradient(to bottom,#ffa365,#ff7518);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa365',endColorstr='#ffff7518',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffa365;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#080808;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#999;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}body{font-weight:300}h1{font-size:50px}h2,h3{font-size:26px}h4{font-size:14px}h5,h6{font-size:11px}blockquote{padding:10px 15px;background-color:#eee;border-left-color:#bbb}blockquote.pull-right{padding:10px 15px;border-right-color:#bbb}blockquote small{color:#bbb}.muted{color:#bbb}.text-warning{color:#ff7518}a.text-warning:hover{color:#e45c00}.text-error{color:#ff0039}a.text-error:hover{color:#cc002e}.text-info{color:#9954bb}a.text-info:hover{color:#7e3f9d}.text-success{color:#3fb618}a.text-success:hover{color:#2f8912}.navbar .navbar-inner{background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand:hover{color:#bbb}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{background-color:rgba(0,0,0,0.05);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle:hover,.navbar .nav li.dropdown.active>.dropdown-toggle:hover,.navbar .nav li.dropdown.open.active>.dropdown-toggle:hover{color:#eee}.navbar .navbar-search .search-query{line-height:normal}.navbar-inverse .brand,.navbar-inverse .nav>li>a{text-shadow:none}.navbar-inverse .brand:hover,.navbar-inverse .nav>.active>a,.navbar-inverse .nav>.active>a:hover,.navbar-inverse .nav>.active>a:focus{color:#fff;background-color:rgba(0,0,0,0.05);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar-inverse .navbar-search .search-query{color:#080808}div.subnav{margin:0 1px;background:#dfdfdf none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav .nav{background-color:transparent}div.subnav .nav>li>a{border-color:transparent}div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover{color:#fff;background-color:#000;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav-fixed{top:51px;margin:0}.nav .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{color:#007fff}.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li>a:hover{color:#fff;background-color:#007fff}.nav-tabs.nav-stacked>.active>a,.nav-tabs.nav-stacked>.active>a:hover{color:#bbb;background-color:#fff}.nav-tabs.nav-stacked>li:first-child>a,.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.tabs-below>.nav-tabs>li>a,.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-pills>li>a{color:#000;background-color:#dfdfdf;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-pills>li>a:hover{color:#fff;background-color:#000}.nav-pills>.disabled>a,.nav-pills>.disabled>a:hover{color:#999;background-color:#eee}.nav-list>li>a{color:#080808}.nav-list>li>a:hover{color:#fff;text-shadow:none;background-color:#007fff}.nav-list .nav-header{color:#080808}.nav-list .divider{background-color:#bbb;border-bottom:0}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a,.pagination ul>li>span{margin-right:6px;color:#080808}.pagination ul>li>a:hover,.pagination ul>li>span:hover{color:#fff;background-color:#080808}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{margin-right:0}.pagination ul>.active>a,.pagination ul>.active>span{color:#fff}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#999;background-color:#eee}.pager li>a,.pager li>span{color:#080808;background-color:#dfdfdf;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.pager li>a:hover,.pager li>span:hover{color:#fff;background-color:#080808}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>span{color:#999;background-color:#eee}.breadcrumb{background-color:#dfdfdf}.breadcrumb li{text-shadow:none}.breadcrumb .divider,.breadcrumb .active{color:#080808;text-shadow:none}.btn{padding:5px 12px;text-shadow:none;background-image:none;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn.disabled{box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-large{padding:22px 30px}.btn-small{padding:2px 10px}.btn-mini{padding:2px 6px}.btn-group>.btn:first-child,.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.table tbody tr.success td{color:#fff}.table tbody tr.error td{color:#fff}.table tbody tr.info td{color:#fff}.table-bordered{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child,.table-bordered tfoot:last-child tr:last-child td:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"]{color:#080808}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#ff7518}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#080808;border-color:#ff7518}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#ff0039}.control-group.error input,.control-group.error select,.control-group.error textarea{color:#080808;border-color:#ff0039}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#3fb618}.control-group.success input,.control-group.success select,.control-group.success textarea{color:#080808;border-color:#3fb618}legend{color:#080808;border-bottom:0}.form-actions{background-color:#eee;border-top:0}.dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert{text-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert-heading,.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#fff}.label{min-width:80px;min-height:80px;font-weight:300;text-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.label-success{background-color:#3fb618}.label-important{background-color:#ff0039}.label-info{background-color:#9954bb}.label-inverse{background-color:#000}.badge{font-weight:300;text-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.badge-success{background-color:#3fb618}.badge-important{background-color:#ff0039}.badge-info{background-color:#9954bb}.badge-inverse{background-color:#000}.hero-unit{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.well{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}[class^="icon-"],[class*=" icon-"]{margin:0 2px;vertical-align:-2px}a.thumbnail{background-color:#dfdfdf}a.thumbnail:hover{background-color:#bbb;border-color:transparent}.progress{height:6px;background-color:#eee;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress .bar{background-color:#007fff;background-image:none}.progress-info{background-color:#9954bb}.progress-success{background-color:#3fb618}.progress-warning{background-color:#ff7518}.progress-danger{background-color:#ff0039}.modal{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal-header{border-bottom:0}.modal-footer{background-color:transparent;border-top:0}.popover{color:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.popover-title{color:#fff;border-bottom:0}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css new file mode 100644 index 0000000..894f3aa --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/cyborg/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Droid+Sans:400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:'Droid Sans',sans-serif;font-size:14px;line-height:20px;color:#999;background-color:#060606}a{color:#33b5e5;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#adafae}a.muted:hover,a.muted:focus{color:#939695}.text-warning{color:#a47e3c}a.text-warning:hover,a.text-warning:focus{color:#7f612e}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#09c}a.text-info:hover,a.text-info:focus{color:#007399}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:normal;line-height:20px;color:#fff;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#adafae}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #222;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #adafae}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#adafae}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#222;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#222;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#adafae}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:'Droid Sans',sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#999;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#ccc;border:1px solid #bbb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#ccc;border:1px solid #bbb}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#adafae;cursor:not-allowed;background-color:#c9c9c9;border-color:#bbb;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#adafae}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#adafae}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#adafae}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#555}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#a47e3c}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#a47e3c}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#7f612e;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ceae78}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#a47e3c;background-color:#eee;border-color:#a47e3c}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#eee;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#eee;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#09c}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#09c}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#09c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#007399;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3cf}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#09c;background-color:#eee;border-color:#09c}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#bfbfbf}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#bf3;border-color:#690}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #222}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #222}.table .table{background-color:#060606}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #222;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #222}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:rgba(100,100,100,0.1)}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#222}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#eee}.table tbody tr.error>td{background-color:#eee}.table tbody tr.warning>td{background-color:#eee}.table tbody tr.info>td{background-color:#eee}.table-hover tbody tr.success:hover>td{background-color:#e1e1e1}.table-hover tbody tr.error:hover>td{background-color:#e1e1e1}.table-hover tbody tr.warning:hover>td{background-color:#e1e1e1}.table-hover tbody tr.info:hover>td{background-color:#e1e1e1}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#131517;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #222}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#999;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#2ab2e4;background-image:-moz-linear-gradient(top,#33b5e5,#1dade2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#33b5e5),to(#1dade2));background-image:-webkit-linear-gradient(top,#33b5e5,#1dade2);background-image:-o-linear-gradient(top,#33b5e5,#1dade2);background-image:linear-gradient(to bottom,#33b5e5,#1dade2);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff33b5e5',endColorstr='#ff1dade2',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#adafae}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#000;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#131517;border:1px solid #030303;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#222;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#616161;*background-color:#595959;background-image:-moz-linear-gradient(top,#666,#595959);background-image:-webkit-gradient(linear,0 0,0 100%,from(#666),to(#595959));background-image:-webkit-linear-gradient(top,#666,#595959);background-image:-o-linear-gradient(top,#666,#595959);background-image:linear-gradient(to bottom,#666,#595959);background-repeat:repeat-x;border:1px solid rgba(0,0,0,0);*border:0;border-color:#595959 #595959 #333;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:rgba(0,0,0,0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666666',endColorstr='#ff595959',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#222;background-color:#595959;*background-color:#4d4d4d}.btn:active,.btn.active{background-color:#404040 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#222;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#008ab8;*background-color:#007399;background-image:-moz-linear-gradient(top,#09c,#007399);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09c),to(#007399));background-image:-webkit-linear-gradient(top,#09c,#007399);background-image:-o-linear-gradient(top,#09c,#007399);background-image:linear-gradient(to bottom,#09c,#007399);background-repeat:repeat-x;border-color:#007399 #007399 #00394d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099cc',endColorstr='#ff007399',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#007399;*background-color:#006080}.btn-primary:active,.btn-primary.active{background-color:#004d66 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff9d2e;*background-color:#f80;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;border-color:#f80 #f80 #b35f00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f80;*background-color:#e67a00}.btn-warning:active,.btn-warning.active{background-color:#cc6d00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0000;*background-color:#c00;background-image:-moz-linear-gradient(top,#f00,#c00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f00),to(#c00));background-image:-webkit-linear-gradient(top,#f00,#c00);background-image:-o-linear-gradient(top,#f00,#c00);background-image:linear-gradient(to bottom,#f00,#c00);background-repeat:repeat-x;border-color:#c00 #c00 #800000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000',endColorstr='#ffcc0000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c00;*background-color:#b30000}.btn-danger:active,.btn-danger.active{background-color:#900 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7ab800;*background-color:#690;background-image:-moz-linear-gradient(top,#8c0,#690);background-image:-webkit-gradient(linear,0 0,0 100%,from(#8c0),to(#690));background-image:-webkit-linear-gradient(top,#8c0,#690);background-image:-o-linear-gradient(top,#8c0,#690);background-image:linear-gradient(to bottom,#8c0,#690);background-repeat:repeat-x;border-color:#690 #690 #334d00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff88cc00',endColorstr='#ff669900',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#690;*background-color:#558000}.btn-success:active,.btn-success.active{background-color:#460 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#292929;*background-color:#191919;background-image:-moz-linear-gradient(top,#333,#191919);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#191919));background-image:-webkit-linear-gradient(top,#333,#191919);background-image:-o-linear-gradient(top,#333,#191919);background-image:linear-gradient(to bottom,#333,#191919);background-repeat:repeat-x;border-color:#191919 #191919 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333',endColorstr='#ff191919',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#191919;*background-color:#0d0d0d}.btn-info:active,.btn-info.active{background-color:#000 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9f3fcf;*background-color:#93c;background-image:-moz-linear-gradient(top,#a347d1,#93c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#93c));background-image:-webkit-linear-gradient(top,#a347d1,#93c);background-image:-o-linear-gradient(top,#a347d1,#93c);background-image:linear-gradient(to bottom,#a347d1,#93c);background-repeat:repeat-x;border-color:#93c #93c #6b248f;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff9933cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#93c;*background-color:#8a2eb8}.btn-inverse:active,.btn-inverse.active{background-color:#7a29a3 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#33b5e5;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#222;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#595959}.btn-group.open .btn-primary.dropdown-toggle{background-color:#007399}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f80}.btn-group.open .btn-danger.dropdown-toggle{background-color:#c00}.btn-group.open .btn-success.dropdown-toggle{background-color:#690}.btn-group.open .btn-info.dropdown-toggle{background-color:#191919}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#93c}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#eee;border:1px solid transparent;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#a47e3c}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#eee;border-color:#e1e1e1}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#eee;border-color:#e6e6e6}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#09c;background-color:#eee;border-color:#dcdcdc}.alert-info h4{color:#09c}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#adafae;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#33b5e5}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#999;cursor:default;background-color:#060606;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#33b5e5}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#33b5e5;border-bottom-color:#33b5e5}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#adafae;border-color:#adafae}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#adafae}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#adafae}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#020202;background-image:-moz-linear-gradient(top,#020202,#020202);background-image:-webkit-gradient(linear,0 0,0 100%,from(#020202),to(#020202));background-image:-webkit-linear-gradient(top,#020202,#020202);background-image:-o-linear-gradient(top,#020202,#020202);background-image:linear-gradient(to bottom,#020202,#020202);background-repeat:repeat-x;border:1px solid #000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff020202',endColorstr='#ff020202',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:15px 20px 15px;margin-left:-20px;font-size:20px;font-weight:200;color:#adafae;text-shadow:0 1px 0 #020202}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#adafae}.navbar-link{color:#adafae}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #020202;border-left:1px solid #020202}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:'Droid Sans',sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:15px 15px 15px;color:#adafae;text-decoration:none;text-shadow:0 1px 0 #020202}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#020202;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#000;*background-color:#000;background-image:-moz-linear-gradient(top,#000,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#000),to(#000));background-image:-webkit-linear-gradient(top,#000,#000);background-image:-o-linear-gradient(top,#000,#000);background-image:linear-gradient(to bottom,#000,#000);background-repeat:repeat-x;border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff000000',endColorstr='#ff000000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#000;*background-color:#000}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #131517;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #131517;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#020202}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#252a30;background-image:-moz-linear-gradient(top,#252a30,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#252a30),to(#252a30));background-image:-webkit-linear-gradient(top,#252a30,#252a30);background-image:-o-linear-gradient(top,#252a30,#252a30);background-image:linear-gradient(to bottom,#252a30,#252a30);background-repeat:repeat-x;border-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff252a30',endColorstr='#ff252a30',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#adafae;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#adafae}.navbar-inverse .navbar-text{color:#adafae}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:#242a31}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#242a31}.navbar-inverse .navbar-link{color:#adafae}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#252a30;border-left-color:#252a30}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#242a31}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#adafae;border-bottom-color:#adafae}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#5d6978;border-color:#252a30;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#222;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1a1d22;*background-color:#1a1d22;background-image:-moz-linear-gradient(top,#1a1d22,#1a1d22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1a1d22),to(#1a1d22));background-image:-webkit-linear-gradient(top,#1a1d22,#1a1d22);background-image:-o-linear-gradient(top,#1a1d22,#1a1d22);background-image:linear-gradient(to bottom,#1a1d22,#1a1d22);background-repeat:repeat-x;border-color:#1a1d22 #1a1d22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1a1d22',endColorstr='#ff1a1d22',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#1a1d22;*background-color:#0f1113}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#040405 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#adafae}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#060606;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#33b5e5}.pagination ul>.active>a,.pagination ul>.active>span{color:#adafae;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#adafae;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#adafae;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#131517;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#131517;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#131517;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#131517;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#131517;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#131517;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#131517;border-bottom:1px solid #070809;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#131517;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#131517;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#131517;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#131517;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#33b5e5;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#999}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#adafae}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f80}.label-warning[href],.badge-warning[href]{background-color:#cc6d00}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#09c}.label-info[href],.badge-info[href]{background-color:#007399}.label-inverse,.badge-inverse{background-color:#222}.label-inverse[href],.badge-inverse[href]{background-color:#080808}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff9d2e;background-image:-moz-linear-gradient(top,#ffac4d,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffac4d),to(#f80));background-image:-webkit-linear-gradient(top,#ffac4d,#f80);background-image:-o-linear-gradient(top,#ffac4d,#f80);background-image:linear-gradient(to bottom,#ffac4d,#f80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffac4d',endColorstr='#ffff8800',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffac4d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#020202;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#222;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#131517;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}label,input,button,select,textarea,.navbar .search-query:-moz-placeholder,.navbar .search-query::-webkit-input-placeholder{font-family:'Droid Sans',sans-serif;color:#999}code,pre{background-color:#eee}blockquote{border-left:5px solid #222}blockquote.pull-right{border-right:5px solid #222}html{min-height:100%}body{min-height:100%;background-color:#121417;background-image:-moz-linear-gradient(top,#060606,#252a30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#060606),to(#252a30));background-image:-webkit-linear-gradient(top,#060606,#252a30);background-image:-o-linear-gradient(top,#060606,#252a30);background-image:linear-gradient(to bottom,#060606,#252a30);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff060606',endColorstr='#ff252a30',GradientType=0)}.page-header{border-bottom:1px solid #222}hr{border-bottom:0}.navbar .navbar-inner{border-bottom:1px solid #222;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:15px 20px 15px;font-weight:normal;color:#eee;text-shadow:none}.navbar .nav>li>a{padding:15px 15px 14px;border-bottom:1px solid transparent}.navbar .nav>li>a:hover,.navbar .nav>.active>a,.navbar .nav>.active>a:hover{border-bottom:1px solid #33b5e5}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{padding:15px 15px 14px;margin-bottom:1px;line-height:inherit}.navbar .divider-vertical{margin:0;border-left:1px solid #222;border-right-width:0}.navbar .search-query,.navbar .search-query:focus,.navbar .search-query.focused{line-height:normal;color:#adafae;text-shadow:none;background-color:#222;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.navbar .search-query:-moz-placeholder,.navbar .search-query:focus:-moz-placeholder,.navbar .search-query.focused:-moz-placeholder{color:#999}.navbar .search-query:-ms-input-placeholder,.navbar .search-query:focus:-ms-input-placeholder,.navbar .search-query.focused:-ms-input-placeholder{color:#999}.navbar .search-query::-webkit-input-placeholder,.navbar .search-query:focus::-webkit-input-placeholder,.navbar .search-query.focused::-webkit-input-placeholder{color:#999}@media(max-width:979px){.navbar .nav-collapse .nav li>a{font-weight:normal;color:#eee;text-shadow:none;border:0}.navbar .nav-collapse .nav li>a:hover{background-color:#33b5e5;border:0}.navbar .nav-collapse .nav .active>a{background-color:#33b5e5;border:0}.navbar .nav-collapse .dropdown-menu a:hover{background-color:#33b5e5}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar .nav-collapse .nav-header{color:rgba(128,128,128,0.6)}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111}.navbar-inverse .nav-collapse .nav .active>a{background-color:#111}.navbar-inverse .nav-collapse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav-collapse .nav li.dropdown.open.active>.dropdown-toggle{background-color:#111}}div.subnav{margin:0 1px;background-color:#020202;background-image:none;border:0;border-bottom:1px solid #222}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;color:#adafae;background-color:#020202;border:0}div.subnav .nav>li>a:hover,div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover,div.subnav .nav>li:first-child>a:hover{padding:11px 12px;color:#fff;background:transparent;border:0;border-bottom:1px solid #33b5e5}div.subnav .nav li.nav-header{text-shadow:none}div.subnav-fixed{top:50px;margin:0}.nav-tabs{border-bottom:1px solid #222}.nav-tabs li>a:hover,.nav-tabs li.active>a,.nav-tabs li.active>a:hover{color:#fff;background-color:#33b5e5;border-color:transparent}.nav-tabs li.disabled>a{color:#999}.nav-tabs .open .dropdown-toggle{background-color:#060606;border-color:transparent}.nav-pills li>a:hover{color:#fff;background-color:#33b5e5}.nav-pills li.disabled>a{color:#999}.nav-pills .open .dropdown-toggle{background-color:#060606}.nav-pills .dropdown-menu li>a:hover{border:0}.nav-list li>a{text-shadow:none}.nav-list li>a:hover{color:#fff;background-color:#33b5e5}.nav-list .nav-header{text-shadow:none}.nav-list .divider{background-color:transparent;border-bottom:1px solid #222}.nav-stacked li>a{border:1px solid #222!important}.nav-stacked li>a:hover,.nav-stacked li.active>a{color:#fff;background-color:#33b5e5}.tabbable .nav-tabs,.tabbable .nav-tabs li.active>a{border-color:#222}.breadcrumb{font-size:14px;background-color:transparent;background-image:none;border-width:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.breadcrumb li{text-shadow:none}.breadcrumb li>a{color:#33b5e5;text-shadow:none}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:rgba(0,0,0,0.2)}.pager li>a,.pager li>span{background-color:#060606;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#33b5e5}.pager .disabled a,.pager .disabled a:hover{background-color:#060606}.btn{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);text-shadow:none;background-color:#5c5c5c;*background-color:#4d4d4d;background-image:-moz-linear-gradient(top,#666,#4d4d4d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#666),to(#4d4d4d));background-image:-webkit-linear-gradient(top,#666,#4d4d4d);background-image:-o-linear-gradient(top,#666,#4d4d4d);background-image:linear-gradient(to bottom,#666,#4d4d4d);background-repeat:repeat-x;border-color:#4d4d4d #4d4d4d #262626;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666666',endColorstr='#ff4d4d4d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:1px 1px 2px #111;-moz-box-shadow:1px 1px 2px #111;box-shadow:1px 1px 2px #111}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#fff;background-color:#4d4d4d;*background-color:#404040}.btn:active,.btn.active{background-color:#333 \9}.btn:hover{color:#fff;text-shadow:none}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#008ab8;*background-color:#007399;background-image:-moz-linear-gradient(top,#09c,#007399);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09c),to(#007399));background-image:-webkit-linear-gradient(top,#09c,#007399);background-image:-o-linear-gradient(top,#09c,#007399);background-image:linear-gradient(to bottom,#09c,#007399);background-repeat:repeat-x;border-color:#007399 #007399 #00394d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099cc',endColorstr='#ff007399',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#007399;*background-color:#006080}.btn-primary:active,.btn-primary.active{background-color:#004d66 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff961f;*background-color:#f80;background-image:-moz-linear-gradient(top,#ffa033,#f80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa033),to(#f80));background-image:-webkit-linear-gradient(top,#ffa033,#f80);background-image:-o-linear-gradient(top,#ffa033,#f80);background-image:linear-gradient(to bottom,#ffa033,#f80);background-repeat:repeat-x;border-color:#f80 #f80 #b35f00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa033',endColorstr='#ffff8800',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f80;*background-color:#e67a00}.btn-warning:active,.btn-warning.active{background-color:#cc6d00 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0000;*background-color:#c00;background-image:-moz-linear-gradient(top,#f00,#c00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f00),to(#c00));background-image:-webkit-linear-gradient(top,#f00,#c00);background-image:-o-linear-gradient(top,#f00,#c00);background-image:linear-gradient(to bottom,#f00,#c00);background-repeat:repeat-x;border-color:#c00 #c00 #800000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000',endColorstr='#ffcc0000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c00;*background-color:#b30000}.btn-danger:active,.btn-danger.active{background-color:#900 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7ab800;*background-color:#690;background-image:-moz-linear-gradient(top,#8c0,#690);background-image:-webkit-gradient(linear,0 0,0 100%,from(#8c0),to(#690));background-image:-webkit-linear-gradient(top,#8c0,#690);background-image:-o-linear-gradient(top,#8c0,#690);background-image:linear-gradient(to bottom,#8c0,#690);background-repeat:repeat-x;border-color:#690 #690 #334d00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff88cc00',endColorstr='#ff669900',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#690;*background-color:#558000}.btn-success:active,.btn-success.active{background-color:#460 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#292929;*background-color:#191919;background-image:-moz-linear-gradient(top,#333,#191919);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#191919));background-image:-webkit-linear-gradient(top,#333,#191919);background-image:-o-linear-gradient(top,#333,#191919);background-image:linear-gradient(to bottom,#333,#191919);background-repeat:repeat-x;border-color:#191919 #191919 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333',endColorstr='#ff191919',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#191919;*background-color:#0d0d0d}.btn-info:active,.btn-info.active{background-color:#000 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#9f3fcf;*background-color:#93c;background-image:-moz-linear-gradient(top,#a347d1,#93c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#a347d1),to(#93c));background-image:-webkit-linear-gradient(top,#a347d1,#93c);background-image:-o-linear-gradient(top,#a347d1,#93c);background-image:linear-gradient(to bottom,#a347d1,#93c);background-repeat:repeat-x;border-color:#93c #93c #6b248f;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffa347d1',endColorstr='#ff9933cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#93c;*background-color:#8a2eb8}.btn-inverse:active,.btn-inverse.active{background-color:#7a29a3 \9}.btn .caret{border-top:4px solid black;opacity:.3}.btn-group>.dropdown-menu>li>a:hover{border-bottom:0}.btn.disabled,.btn[disabled]{background-color:#adafae}input,textarea,select{border-width:2px;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{color:#222}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly],.uneditable-input{border-color:#444}input:focus,textarea:focus,input.focused,textarea.focused{border-color:#52a8ec;outline:0;outline:thin dotted \9}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}legend,label{color:#999;border-bottom:0 solid #222}.form-actions{border-top:1px solid #222}.table{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.table tbody tr.success td{color:#fff;background-color:#690}.table tbody tr.error td{color:#fff;background-color:#c00}.table tbody tr.info td{color:#fff;background-color:#33b5e5}.dropdown-menu{-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.alert,.alert .alert-heading,.alert-success,.alert-success .alert-heading,.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading,.alert-info,.alert-info .alert-heading{color:#eee;text-shadow:none;border:0}.label{color:#eee}.label,.alert{background-color:#666}.label:hover{background-color:#4d4d4d}.label-important,.alert-danger,.alert-error{background-color:#c00}.label-important:hover{background-color:#900}.label-warning{background-color:#cc6d00}.label-warning:hover{background-color:#995200}.label-success,.alert-success{background-color:#5c8a00}.label-success:hover{background-color:#3a5700}.label-info,.alert-info{background-color:#007399}.label-info:hover{background-color:#004d66}.well,.hero-unit{-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.well,.hero-unit{border-top:solid 1px #2f2f2f;-webkit-box-shadow:0 2px 4px rgba(0,0,0,0.8);-moz-box-shadow:0 2px 4px rgba(0,0,0,0.8);box-shadow:0 2px 4px rgba(0,0,0,0.8)}.thumbnail{border-color:#222}.progress{background-color:#060606;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal{background-color:#222;border-top:solid 1px #2f2f2f;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.modal-header{border-bottom:1px solid #222}.modal-footer{background-color:#222;border-top:1px solid #222;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.footer{border-top:1px solid #222}@media(max-width:768px){div.subnav .nav>li+li>a,div.subnav .nav>li:first-child>a{border-top:1px solid #222;border-left:1px solid #222}.subnav .nav>li+li>a:hover,.subnav .nav>li:first-child>a:hover{background-color:#33b5e5;border-bottom:0}}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/flatly/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/flatly/bootstrap.min.css new file mode 100644 index 0000000..a8ba389 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/flatly/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url("http://fonts.googleapis.com/css?family=Lato:400,700,900,400italic");/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:31px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:21px;color:#2c3e50;background-color:#fff}a{color:#1abc9c;text-decoration:none}a:hover,a:focus{color:#1dd2af;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:31px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:22.5px;font-weight:200;line-height:31.5px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#b4bcc2}a.muted:hover,a.muted:focus{color:#98a3ab}.text-warning{color:#e6bb0d}a.text-warning:hover,a.text-warning:focus{color:#b6940a}.text-error{color:#e74c3c}a.text-error:hover,a.text-error:focus{color:#d62c1a}.text-info{color:#3498db}a.text-info:hover,a.text-info:focus{color:#217dbb}.text-success{color:#18bc9c}a.text-success:hover,a.text-success:focus{color:#128f76}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10.5px 0;font-family:inherit;font-weight:bold;line-height:21px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#b4bcc2}h1,h2,h3{line-height:42px}h1{font-size:41.25px}h2{font-size:33.75px}h3{font-size:26.25px}h4{font-size:18.75px}h5{font-size:15px}h6{font-size:12.75px}h1 small{font-size:26.25px}h2 small{font-size:18.75px}h3 small{font-size:15px}h4 small{font-size:15px}.page-header{padding-bottom:9.5px;margin:21px 0 31.5px;border-bottom:1px solid #ecf0f1}ul,ol{padding:0;margin:0 0 10.5px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:21px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:21px}dt,dd{line-height:21px}dt{font-weight:bold}dd{margin-left:10.5px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:21px 0;border:0;border-top:1px solid #ecf0f1;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #b4bcc2}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 21px;border-left:5px solid #ecf0f1}blockquote p{margin-bottom:0;font-size:18.75px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:21px;color:#b4bcc2}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #ecf0f1;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:21px;font-style:normal;line-height:21px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:13px;color:#7b8a8b;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:21px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}pre.prettyprint{margin-bottom:21px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 21px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:42px;color:#7b8a8b;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15.75px;color:#b4bcc2}label,input,button,select,textarea{font-size:15px;font-weight:normal;line-height:21px}input,button,select,textarea{font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:21px;padding:4px 6px;margin-bottom:10.5px;font-size:15px;line-height:21px;color:#95a5a6;vertical-align:middle;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #dce4ec;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:31px;*margin-top:4px;line-height:31px}select{width:220px;background-color:#fff;border:1px solid #dce4ec}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#b4bcc2;cursor:not-allowed;background-color:#fcfcfc;border-color:#dce4ec;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#b4bcc2}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#b4bcc2}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#b4bcc2}.radio,.checkbox{min-height:21px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eaeded}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#e6bb0d}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#e6bb0d}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#e6bb0d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#b6940a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f6d963;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f6d963;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f6d963}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#e6bb0d;background-color:#f7f3e1;border-color:#e6bb0d}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#e74c3c}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#e74c3c}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#e74c3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#d62c1a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f29f97;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f29f97;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f29f97}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#e74c3c;background-color:#fff;border-color:#e74c3c}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#18bc9c}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#18bc9c}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#18bc9c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#128f76;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #51e9cb;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #51e9cb;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #51e9cb}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#18bc9c;background-color:#cdede7;border-color:#18bc9c}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3498db}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3498db}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3498db;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#217dbb;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #8bc4ea;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #8bc4ea;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #8bc4ea}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3498db;background-color:#f1f6f9;border-color:#3498db}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:20px 20px 21px;margin-top:21px;margin-bottom:21px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#476481}.help-block{display:block;margin-bottom:10.5px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10.5px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:15px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 6px 6px 0;-moz-border-radius:0 6px 6px 0;border-radius:0 6px 6px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:21px;min-width:16px;padding:4px 5px;font-size:15px;font-weight:normal;line-height:21px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#ecf0f1;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#7eefd9;border-color:#18bc9c}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:6px 0 0 6px;-moz-border-radius:6px 0 0 6px;border-radius:6px 0 0 6px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:6px 0 0 6px;-moz-border-radius:6px 0 0 6px;border-radius:6px 0 0 6px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 6px 6px 0;-moz-border-radius:0 6px 6px 0;border-radius:0 6px 6px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 6px 6px 0;-moz-border-radius:0 6px 6px 0;border-radius:0 6px 6px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 6px 6px 0;-moz-border-radius:0 6px 6px 0;border-radius:0 6px 6px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:6px 0 0 6px;-moz-border-radius:6px 0 0 6px;border-radius:6px 0 0 6px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 6px 6px 0;-moz-border-radius:0 6px 6px 0;border-radius:0 6px 6px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10.5px}legend+.control-group{margin-top:21px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:21px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10.5px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:21px}.table th,.table td{padding:8px;line-height:21px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-topleft:6px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-topright:6px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-topleft:6px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-moz-border-radius-topright:6px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#cdede7}.table tbody tr.error>td{background-color:#fff}.table tbody tr.warning>td{background-color:#f7f3e1}.table tbody tr.info>td{background-color:#f1f6f9}.table-hover tbody tr.success:hover>td{background-color:#bae6de}.table-hover tbody tr.error:hover>td{background-color:#f2f2f2}.table-hover tbody tr.warning:hover>td{background-color:#f2ebcd}.table-hover tbody tr.info:hover>td{background-color:#dfeaf1}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#2c3e50;border:1px solid #ccc;border:1px solid rgba(0,0,0,0);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:rgba(0,0,0,0.2);border-bottom:1px solid rgba(0,0,0,0.2)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:21px;color:#fff;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#17b394;background-image:-moz-linear-gradient(top,#18bc9c,#15a589);background-image:-webkit-gradient(linear,0 0,0 100%,from(#18bc9c),to(#15a589));background-image:-webkit-linear-gradient(top,#18bc9c,#15a589);background-image:-o-linear-gradient(top,#18bc9c,#15a589);background-image:linear-gradient(to bottom,#18bc9c,#15a589);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff18bc9c',endColorstr='#ff15a589',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#17b394;background-image:-moz-linear-gradient(top,#18bc9c,#15a589);background-image:-webkit-gradient(linear,0 0,0 100%,from(#18bc9c),to(#15a589));background-image:-webkit-linear-gradient(top,#18bc9c,#15a589);background-image:-o-linear-gradient(top,#18bc9c,#15a589);background-image:linear-gradient(to bottom,#18bc9c,#15a589);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff18bc9c',endColorstr='#ff15a589',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#b4bcc2}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#080b0e;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#ecf0f1;border:1px solid #d7e0e2;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:21px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:15px;line-height:21px;color:#7b8a8b;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#bfc6cb;*background-color:#d0d5d9;background-image:-moz-linear-gradient(top,#b4bcc2,#d0d5d9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b4bcc2),to(#d0d5d9));background-image:-webkit-linear-gradient(top,#b4bcc2,#d0d5d9);background-image:-o-linear-gradient(top,#b4bcc2,#d0d5d9);background-image:linear-gradient(to bottom,#b4bcc2,#d0d5d9);background-repeat:repeat-x;border:1px solid #ddd;*border:0;border-color:#d0d5d9 #d0d5d9 #a6afb7;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#c4c4c4;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb4bcc2',endColorstr='#ffd0d5d9',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#7b8a8b;background-color:#d0d5d9;*background-color:#c2c9cd}.btn:active,.btn.active{background-color:#b4bcc2 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#7b8a8b;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:18px 36px;font-size:18.75px;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 12px;font-size:12.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:1px 8px;font-size:11.25px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#33485d;*background-color:#3e5771;background-image:-moz-linear-gradient(top,#2c3e50,#3e5771);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2c3e50),to(#3e5771));background-image:-webkit-linear-gradient(top,#2c3e50,#3e5771);background-image:-o-linear-gradient(top,#2c3e50,#3e5771);background-image:linear-gradient(to bottom,#2c3e50,#3e5771);background-repeat:repeat-x;border-color:#3e5771 #3e5771 #233140;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2c3e50',endColorstr='#ff3e5771',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#3e5771;*background-color:#354b60}.btn-primary:active,.btn-primary.active{background-color:#2c3e50 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f4a425;*background-color:#f5b043;background-image:-moz-linear-gradient(top,#f39c12,#f5b043);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f39c12),to(#f5b043));background-image:-webkit-linear-gradient(top,#f39c12,#f5b043);background-image:-o-linear-gradient(top,#f39c12,#f5b043);background-image:linear-gradient(to bottom,#f39c12,#f5b043);background-repeat:repeat-x;border-color:#f5b043 #f5b043 #e08e0b;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff39c12',endColorstr='#fff5b043',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f5b043;*background-color:#f4a62a}.btn-warning:active,.btn-warning.active{background-color:#f39c12 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e95d4e;*background-color:#ed7669;background-image:-moz-linear-gradient(top,#e74c3c,#ed7669);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e74c3c),to(#ed7669));background-image:-webkit-linear-gradient(top,#e74c3c,#ed7669);background-image:-o-linear-gradient(top,#e74c3c,#ed7669);background-image:linear-gradient(to bottom,#e74c3c,#ed7669);background-repeat:repeat-x;border-color:#ed7669 #ed7669 #e43725;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe74c3c',endColorstr='#ffed7669',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#ed7669;*background-color:#ea6153}.btn-danger:active,.btn-danger.active{background-color:#e74c3c \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1dccaa;*background-color:#24e3be;background-image:-moz-linear-gradient(top,#18bc9c,#24e3be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#18bc9c),to(#24e3be));background-image:-webkit-linear-gradient(top,#18bc9c,#24e3be);background-image:-o-linear-gradient(top,#18bc9c,#24e3be);background-image:linear-gradient(to bottom,#18bc9c,#24e3be);background-repeat:repeat-x;border-color:#24e3be #24e3be #15a589;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff18bc9c',endColorstr='#ff24e3be',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#24e3be;*background-color:#1bd3af}.btn-success:active,.btn-success.active{background-color:#18bc9c \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#45a1de;*background-color:#5faee3;background-image:-moz-linear-gradient(top,#3498db,#5faee3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#3498db),to(#5faee3));background-image:-webkit-linear-gradient(top,#3498db,#5faee3);background-image:-o-linear-gradient(top,#3498db,#5faee3);background-image:linear-gradient(to bottom,#3498db,#5faee3);background-repeat:repeat-x;border-color:#5faee3 #5faee3 #258cd1;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3498db',endColorstr='#ff5faee3',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#5faee3;*background-color:#4aa3df}.btn-info:active,.btn-info.active{background-color:#3498db \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#2c2c2c;*background-color:#3c3c3c;background-image:-moz-linear-gradient(top,#222,#3c3c3c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#3c3c3c));background-image:-webkit-linear-gradient(top,#222,#3c3c3c);background-image:-o-linear-gradient(top,#222,#3c3c3c);background-image:linear-gradient(to bottom,#222,#3c3c3c);background-repeat:repeat-x;border-color:#3c3c3c #3c3c3c #151515;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff3c3c3c',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#3c3c3c;*background-color:#2f2f2f}.btn-inverse:active,.btn-inverse.active{background-color:#222 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#1abc9c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#1dd2af;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#7b8a8b;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10.5px;margin-bottom:10.5px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:15px}.btn-group>.btn-mini{font-size:11.25px}.btn-group>.btn-small{font-size:12.75px}.btn-group>.btn-large{font-size:18.75px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:10px;border-bottom-left-radius:10px;-webkit-border-top-left-radius:10px;border-top-left-radius:10px;-moz-border-radius-bottomleft:10px;-moz-border-radius-topleft:10px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:10px;border-top-right-radius:10px;-webkit-border-bottom-right-radius:10px;border-bottom-right-radius:10px;-moz-border-radius-topright:10px;-moz-border-radius-bottomright:10px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#d0d5d9}.btn-group.open .btn-primary.dropdown-toggle{background-color:#3e5771}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f5b043}.btn-group.open .btn-danger.dropdown-toggle{background-color:#ed7669}.btn-group.open .btn-success.dropdown-toggle{background-color:#24e3be}.btn-group.open .btn-info.dropdown-toggle{background-color:#5faee3}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#3c3c3c}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:10px 10px 0 0;-moz-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 10px 10px;-moz-border-radius:0 0 10px 10px;border-radius:0 0 10px 10px}.alert{padding:8px 35px 8px 14px;margin-bottom:21px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#f7f3e1;border:1px solid transparent;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.alert,.alert h4{color:#e6bb0d}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:21px}.alert-success{color:#18bc9c;background-color:#cdede7;border-color:transparent}.alert-success h4{color:#18bc9c}.alert-danger,.alert-error{color:#e74c3c;background-color:#fff;border-color:transparent}.alert-danger h4,.alert-error h4{color:#e74c3c}.alert-info{color:#3498db;background-color:#f1f6f9;border-color:transparent}.alert-info h4{color:#3498db}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:21px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#ecf0f1}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:21px;color:#b4bcc2;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#1abc9c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:21px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#ecf0f1 #ecf0f1 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#95a5a6;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#1abc9c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#1abc9c;border-bottom-color:#1abc9c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#1dd2af;border-bottom-color:#1dd2af}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#95a5a6;border-bottom-color:#95a5a6}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#b4bcc2;border-color:#b4bcc2}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#b4bcc2}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#ecf0f1 #ddd #ecf0f1 #ecf0f1}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#ecf0f1 #ecf0f1 #ecf0f1 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#b4bcc2}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:21px;overflow:visible}.navbar-inner{min-height:50px;padding-right:20px;padding-left:20px;background-color:#2c3e50;background-image:-moz-linear-gradient(top,#2c3e50,#2c3e50);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2c3e50),to(#2c3e50));background-image:-webkit-linear-gradient(top,#2c3e50,#2c3e50);background-image:-o-linear-gradient(top,#2c3e50,#2c3e50);background-image:linear-gradient(to bottom,#2c3e50,#2c3e50);background-repeat:repeat-x;border:1px solid #233140;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2c3e50',endColorstr='#ff2c3e50',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:14.5px 20px 14.5px;margin-left:-20px;font-size:20px;font-weight:200;color:#fff;text-shadow:0 1px 0 #2c3e50}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:50px;color:#fff}.navbar-link{color:#fff}.navbar-link:hover,.navbar-link:focus{color:#1abc9c}.navbar .divider-vertical{height:50px;margin:0 9px;border-right:1px solid #2c3e50;border-left:1px solid #2c3e50}.navbar .btn,.navbar .btn-group{margin-top:10px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:10px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:10px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Lato","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:14.5px 15px 14.5px;color:#fff;text-decoration:none;text-shadow:0 1px 0 #2c3e50}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#1abc9c;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#1abc9c;text-decoration:none;background-color:#233140;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#233140;*background-color:#233140;background-image:-moz-linear-gradient(top,#233140,#233140);background-image:-webkit-gradient(linear,0 0,0 100%,from(#233140),to(#233140));background-image:-webkit-linear-gradient(top,#233140,#233140);background-image:-o-linear-gradient(top,#233140,#233140);background-image:linear-gradient(to bottom,#233140,#233140);background-repeat:repeat-x;border-color:#233140 #233140 #080b0e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff233140',endColorstr='#ff233140',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#233140;*background-color:#1a242f}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#11181f \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #2c3e50;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #2c3e50;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#1abc9c;background-color:#233140}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#1abc9c;border-bottom-color:#1abc9c}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#18bc9c;background-image:-moz-linear-gradient(top,#18bc9c,#18bc9c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#18bc9c),to(#18bc9c));background-image:-webkit-linear-gradient(top,#18bc9c,#18bc9c);background-image:-o-linear-gradient(top,#18bc9c,#18bc9c);background-image:linear-gradient(to bottom,#18bc9c,#18bc9c);background-repeat:repeat-x;border-color:#15a589;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff18bc9c',endColorstr='#ff18bc9c',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#2c3e50}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#2c3e50;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#2c3e50;background-color:#15a589}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#2c3e50}.navbar-inverse .divider-vertical{border-right-color:#18bc9c;border-left-color:#18bc9c}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#2c3e50;background-color:#15a589}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#2c3e50;border-bottom-color:#2c3e50}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#2c3e50;border-bottom-color:#2c3e50}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#fff;border-color:#b4bcc2;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#95a5a6}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#95a5a6}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#95a5a6}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#7b8a8b;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#15a589;*background-color:#15a589;background-image:-moz-linear-gradient(top,#15a589,#15a589);background-image:-webkit-gradient(linear,0 0,0 100%,from(#15a589),to(#15a589));background-image:-webkit-linear-gradient(top,#15a589,#15a589);background-image:-o-linear-gradient(top,#15a589,#15a589);background-image:linear-gradient(to bottom,#15a589,#15a589);background-repeat:repeat-x;border-color:#15a589 #15a589 #0c6251;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff15a589',endColorstr='#ff15a589',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#15a589;*background-color:#128f76}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#0f7864 \9}.breadcrumb{padding:8px 15px;margin:0 0 21px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#b4bcc2}.pagination{margin:21px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:21px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#ecf0f1}.pagination ul>.active>a,.pagination ul>.active>span{color:#b4bcc2;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#b4bcc2;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:18px 36px;font-size:18.75px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:10px;border-bottom-left-radius:10px;-webkit-border-top-left-radius:10px;border-top-left-radius:10px;-moz-border-radius-bottomleft:10px;-moz-border-radius-topleft:10px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:10px;border-top-right-radius:10px;-webkit-border-bottom-right-radius:10px;border-bottom-right-radius:10px;-moz-border-radius-topright:10px;-moz-border-radius-bottomright:10px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 12px;font-size:12.75px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:1px 8px;font-size:11.25px}.pager{margin:21px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#b4bcc2;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#2c3e50;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#2c3e50;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#2c3e50;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#2c3e50;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#2c3e50;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#2c3e50;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#2c3e50;border-bottom:1px solid #233140;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#2c3e50;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#2c3e50;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#2c3e50;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#2c3e50;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:21px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:21px;border:1px solid #ddd;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#1abc9c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#95a5a6}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:12.69px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#b4bcc2}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#e74c3c}.label-important[href],.badge-important[href]{background-color:#d62c1a}.label-warning,.badge-warning{background-color:#f39c12}.label-warning[href],.badge-warning[href]{background-color:#c87f0a}.label-success,.badge-success{background-color:#18bc9c}.label-success[href],.badge-success[href]{background-color:#128f76}.label-info,.badge-info{background-color:#3498db}.label-info[href],.badge-info[href]{background-color:#217dbb}.label-inverse,.badge-inverse{background-color:#7b8a8b}.label-inverse[href],.badge-inverse[href]{background-color:#636f70}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:21px;margin-bottom:21px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#f5ae3e;background-image:-moz-linear-gradient(top,#f7ba5b,#f39c12);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f7ba5b),to(#f39c12));background-image:-webkit-linear-gradient(top,#f7ba5b,#f39c12);background-image:-o-linear-gradient(top,#f7ba5b,#f39c12);background-image:linear-gradient(to bottom,#f7ba5b,#f39c12);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff7ba5b',endColorstr='#fff39c12',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#f7ba5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:21px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:21px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#7b8a8b;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:21px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:31.5px;color:inherit;background-color:#ecf0f1;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:31.5px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1{font-size:48px;font-weight:900}h2{font-size:36px;font-weight:700}h3{font-size:28px;font-weight:700}h4{font-size:24px;font-weight:500}h5{font-size:16px;font-weight:500}h6{font-size:13px;font-weight:500;text-transform:none}p{margin-bottom:1em}.page-header{border-bottom:0}.navbar .brand{text-shadow:none}.navbar .brand:hover{color:#1dd2af}.navbar .navbar-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav>li>a{text-shadow:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-search .search-query{line-height:normal;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .btn-navbar{background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar-inverse .brand:hover{color:#2c3e50}.navbar-inverse .navbar-search .search-query{line-height:normal;color:#2c3e50;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar-inverse .navbar-search .search-query:focus{padding:4px 14px;color:#2c3e50}div.subnav{background-color:#ecf0f1;background-image:none;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav-fixed{top:50px}div.subnav .nav>li>a{color:#2c3e50;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover{color:#2c3e50;background-color:#cfd9db;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-list>li>a,.nav-list>.active>a,.nav-list .nav-header{text-shadow:none}.nav-list .divider{background:0;border-bottom:2px solid rgba(0,0,0,0.2)}.nav-pills .open .dropdown-toggle{background-color:#2c3e50}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a{color:#fff;background-color:#18bc9c;border-color:transparent}.pagination ul>li>a:hover{background-color:#24e3be}.pagination ul>.active>a,.pagination ul>.active>a:hover{color:#2c3e50;background-color:#ecf0f1}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover{color:#fff;background-color:#24e3be}.pager li>a,.pager li>span{color:#fff;background-color:#18bc9c;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#24e3be}.pager .disabled>a,.pager .disabled>span,.pager .disabled>a:hover,.pager .disabled>span:hover{color:#fff;background-color:#24e3be}.breadcrumb>li{text-shadow:none}.btn{padding:8px 20px;color:#fff;text-decoration:none;text-shadow:none;background-image:none;border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-transition:.25s;-moz-transition:.25s;transition:.25s}.btn:hover,.btn:focus{color:white;-webkit-transition:.25s;-moz-transition:.25s;transition:.25s}.btn:active,.btn.active{color:rgba(255,255,255,0.75);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn.disabled,.btn[disabled]{color:white}.btn-large{padding:18px 36px}.btn-small{padding:2px 12px}.btn-mini{padding:1px 8px}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{padding:7px 6px;text-indent:1px;border:2px solid #dce4ec;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}textarea:-moz-placeholder,input[type="text"]:-moz-placeholder,input[type="password"]:-moz-placeholder,input[type="datetime"]:-moz-placeholder,input[type="datetime-local"]:-moz-placeholder,input[type="date"]:-moz-placeholder,input[type="month"]:-moz-placeholder,input[type="time"]:-moz-placeholder,input[type="week"]:-moz-placeholder,input[type="number"]:-moz-placeholder,input[type="email"]:-moz-placeholder,input[type="url"]:-moz-placeholder,input[type="search"]:-moz-placeholder,input[type="tel"]:-moz-placeholder,input[type="color"]:-moz-placeholder,.uneditable-input:-moz-placeholder{color:#acb6c0}textarea:-ms-input-placeholder,input[type="text"]:-ms-input-placeholder,input[type="password"]:-ms-input-placeholder,input[type="datetime"]:-ms-input-placeholder,input[type="datetime-local"]:-ms-input-placeholder,input[type="date"]:-ms-input-placeholder,input[type="month"]:-ms-input-placeholder,input[type="time"]:-ms-input-placeholder,input[type="week"]:-ms-input-placeholder,input[type="number"]:-ms-input-placeholder,input[type="email"]:-ms-input-placeholder,input[type="url"]:-ms-input-placeholder,input[type="search"]:-ms-input-placeholder,input[type="tel"]:-ms-input-placeholder,input[type="color"]:-ms-input-placeholder,.uneditable-input:-ms-input-placeholder{color:#acb6c0}textarea::-webkit-input-placeholder,input[type="text"]::-webkit-input-placeholder,input[type="password"]::-webkit-input-placeholder,input[type="datetime"]::-webkit-input-placeholder,input[type="datetime-local"]::-webkit-input-placeholder,input[type="date"]::-webkit-input-placeholder,input[type="month"]::-webkit-input-placeholder,input[type="time"]::-webkit-input-placeholder,input[type="week"]::-webkit-input-placeholder,input[type="number"]::-webkit-input-placeholder,input[type="email"]::-webkit-input-placeholder,input[type="url"]::-webkit-input-placeholder,input[type="search"]::-webkit-input-placeholder,input[type="tel"]::-webkit-input-placeholder,input[type="color"]::-webkit-input-placeholder,.uneditable-input::-webkit-input-placeholder{color:#acb6c0}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:#1abc9c;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.control-group.error,.control-group.error input:focus,.control-group.error textarea:focus{border-color:#e74c3c;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.control-group.success,.control-group.success input:focus,.control-group.success textarea:focus{border-color:#2ecc71;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.control-group.warning,.control-group.warning input:focus,.control-group.warning textarea:focus{border-color:#f1c40f;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.control-group.info,.control-group.info input:focus,.control-group.info textarea:focus{border-color:#3498db;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[disabled],input[readonly],textarea[disabled],textarea[readonly]{color:#cad2d3;cursor:default;background-color:#eaeded;border-color:transparent}input[type="file"]{line-height:16px}.input-append .add-on,.input-prepend .add-on{background:0;border:0}legend{color:#2c3e50;border-bottom:0}.form-actions{background-color:#dde4e6;border-top:0;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.alert{color:#fff;text-shadow:none;background-color:#f39c12}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{color:#fff}.alert-error{background-color:#e74c3c}.alert-success{background-color:#18bc9c}.alert-info{background-color:#3498db}.label{padding:6px 10px;text-shadow:none}.badge{padding:6px 10px;text-shadow:none;-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px}.well{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress{height:12px;background:#ecf0f1;border-radius:32px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress .bar{background:#2c3e50;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.progress-success .bar,.progress-success.progress-striped .bar{background-color:#18bc9c}.progress-warning .bar,.progress-warning.progress-striped .bar{background-color:#e6bb0d}.progress-danger .bar,.progress-danger.progress-striped .bar{background-color:#e74c3c}.progress-info .bar,.progress-info.progress-striped .bar{background-color:#3498db}.tooltip.in{opacity:1}.popover{color:#fff}.popover-title{border-bottom:2px solid rgba(0,0,0,0.2)}.modal-header{color:#fff;background-color:#2c3e50;border-bottom:0}.modal-footer{background-color:#ecf0f1;border-top:2px solid rgba(0,0,0,0.2);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.close{text-shadow:none}@media(max-width:767px){div.subnav .nav>li:first-child>a,div.subnav .nav>li+li>a{border-color:transparent}div.subnav .nav>li:first-child>a:hover,div.subnav .nav>li+li>a:hover{background-color:#cfd9db}div.subnav .nav>li:last-child>a{border-radius:0 0 4px 4px}}@media(max-width:979px){.navbar .nav-collapse .nav>li>a{color:#fff}.navbar .nav-collapse .nav>li>a:hover{background-color:#18bc9c}}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png b/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png new file mode 100644 index 0000000..3bf6484 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings-white.png Binary files differ
diff --git a/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings.png b/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings.png new file mode 100644 index 0000000..a996999 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/img/glyphicons-halflings.png Binary files differ
diff --git a/doc/_static/bootswatch-2.3.2/journal/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/journal/bootstrap.min.css new file mode 100644 index 0000000..f310a55 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/journal/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=News+Cycle:400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:Georgia,"Times New Roman",Times,serif;font-size:14px;line-height:20px;color:#777;background-color:#fff}a{color:#777;text-decoration:none}a:hover,a:focus{color:#777;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#bbb}a.muted:hover,a.muted:focus{color:#a2a2a2}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:"News Cycle","Arial Narrow Bold",sans-serif;font-weight:bold;line-height:20px;color:#000;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#bbb}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #bbb}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#bbb}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#777;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#bbb}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:Georgia,"Times New Roman",Times,serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#999;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#bbb;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#bbb}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#bbb}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#bbb}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#eee;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#9d9d9d}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#85e8a2;border-color:#22b24c}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f5f5f5}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#eee}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#eee;border-bottom:1px solid #eee}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#000;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#000;text-decoration:none;background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#eee,#e1e1e1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#eee,#e1e1e1);background-image:-o-linear-gradient(top,#eee,#e1e1e1);background-image:linear-gradient(to bottom,#eee,#e1e1e1);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffe1e1e1',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#000;text-decoration:none;background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#eee,#e1e1e1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#eee,#e1e1e1);background-image:-o-linear-gradient(top,#eee,#e1e1e1);background-image:linear-gradient(to bottom,#eee,#e1e1e1);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffe1e1e1',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#bbb}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#000}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #dcdcdc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#777;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #d9d9d9;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#bfbfbf;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#777;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#777;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7f7f7f;*background-color:#777;background-image:-moz-linear-gradient(top,#848484,#777);background-image:-webkit-gradient(linear,0 0,0 100%,from(#848484),to(#777));background-image:-webkit-linear-gradient(top,#848484,#777);background-image:-o-linear-gradient(top,#848484,#777);background-image:linear-gradient(to bottom,#848484,#777);background-repeat:repeat-x;border-color:#777 #777 #515151;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff848484',endColorstr='#ff777777',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#777;*background-color:#6a6a6a}.btn-primary:active,.btn-primary.active{background-color:#5e5e5e \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ff8e1f;*background-color:#ff7f00;background-image:-moz-linear-gradient(top,#f93,#ff7f00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f93),to(#ff7f00));background-image:-webkit-linear-gradient(top,#f93,#ff7f00);background-image:-o-linear-gradient(top,#f93,#ff7f00);background-image:linear-gradient(to bottom,#f93,#ff7f00);background-repeat:repeat-x;border-color:#ff7f00 #ff7f00 #b35900;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff9933',endColorstr='#ffff7f00',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#ff7f00;*background-color:#e67200}.btn-warning:active,.btn-warning.active{background-color:#c60 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0000;*background-color:#c00;background-image:-moz-linear-gradient(top,#f00,#c00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f00),to(#c00));background-image:-webkit-linear-gradient(top,#f00,#c00);background-image:-o-linear-gradient(top,#f00,#c00);background-image:linear-gradient(to bottom,#f00,#c00);background-repeat:repeat-x;border-color:#c00 #c00 #800000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0000',endColorstr='#ffcc0000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#c00;*background-color:#b30000}.btn-danger:active,.btn-danger.active{background-color:#900 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#24bf51;*background-color:#22b24c;background-image:-moz-linear-gradient(top,#26c755,#22b24c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#26c755),to(#22b24c));background-image:-webkit-linear-gradient(top,#26c755,#22b24c);background-image:-o-linear-gradient(top,#26c755,#22b24c);background-image:linear-gradient(to bottom,#26c755,#22b24c);background-repeat:repeat-x;border-color:#22b24c #22b24c #167231;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff26c755',endColorstr='#ff22b24c',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#22b24c;*background-color:#1e9d43}.btn-success:active,.btn-success.active{background-color:#1a873a \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#376ea4;*background-color:#369;background-image:-moz-linear-gradient(top,#3973ac,#369);background-image:-webkit-gradient(linear,0 0,0 100%,from(#3973ac),to(#369));background-image:-webkit-linear-gradient(top,#3973ac,#369);background-image:-o-linear-gradient(top,#3973ac,#369);background-image:linear-gradient(to bottom,#3973ac,#369);background-repeat:repeat-x;border-color:#369 #369 #204060;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3973ac',endColorstr='#ff336699',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#369;*background-color:#2d5986}.btn-info:active,.btn-info.active{background-color:#264c73 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#7f7f7f;*background-color:#777;background-image:-moz-linear-gradient(top,#848484,#777);background-image:-webkit-gradient(linear,0 0,0 100%,from(#848484),to(#777));background-image:-webkit-linear-gradient(top,#848484,#777);background-image:-o-linear-gradient(top,#848484,#777);background-image:linear-gradient(to bottom,#848484,#777);background-repeat:repeat-x;border-color:#777 #777 #515151;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff848484',endColorstr='#ff777777',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#777;*background-color:#6a6a6a}.btn-inverse:active,.btn-inverse.active{background-color:#5e5e5e \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#777;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#777;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#777;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#777}.btn-group.open .btn-warning.dropdown-toggle{background-color:#ff7f00}.btn-group.open .btn-danger.dropdown-toggle{background-color:#c00}.btn-group.open .btn-success.dropdown-toggle{background-color:#22b24c}.btn-group.open .btn-info.dropdown-toggle{background-color:#369}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#777}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#bbb;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#777}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#999;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#777}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#777;border-bottom-color:#777}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#777;border-bottom-color:#777}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#bbb;border-color:#bbb}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#bbb}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#bbb}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:60px;padding-right:20px;padding-left:20px;background-color:#fff;background-image:-moz-linear-gradient(top,#fff,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#fff));background-image:-webkit-linear-gradient(top,#fff,#fff);background-image:-o-linear-gradient(top,#fff,#fff);background-image:linear-gradient(to bottom,#fff,#fff);background-repeat:repeat-x;border:1px solid #e0e0e0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffffffff',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:20px 20px 20px;margin-left:-20px;font-size:20px;font-weight:200;color:#000;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:60px;color:#777}.navbar-link{color:#000}.navbar-link:hover,.navbar-link:focus{color:#000}.navbar .divider-vertical{height:60px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #fff}.navbar .btn,.navbar .btn-group{margin-top:15px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:15px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:15px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"News Cycle","Arial Narrow Bold",sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:20px 15px 20px;color:#000;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#000;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#000;text-decoration:none;background-color:transparent;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f2f2f2;*background-color:#f2f2f2;background-image:-moz-linear-gradient(top,#f2f2f2,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#f2f2f2,#f2f2f2);background-image:-o-linear-gradient(top,#f2f2f2,#f2f2f2);background-image:linear-gradient(to bottom,#f2f2f2,#f2f2f2);background-repeat:repeat-x;border-color:#f2f2f2 #f2f2f2 #ccc;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#fff2f2f2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#f2f2f2;*background-color:#e5e5e5}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#d9d9d9 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#000;border-bottom-color:#000}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#000;background-color:transparent}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#000;border-bottom-color:#000}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#000;border-bottom-color:#000}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#bbb;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#bbb}.navbar-inverse .navbar-text{color:#bbb}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#bbb}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#bbb;border-bottom-color:#bbb}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#777;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#bbb}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#eee}.pagination ul>.active>a,.pagination ul>.active>span{color:#bbb;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#bbb;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#bbb;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1020;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#777;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#999}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#bbb}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#ff7f00}.label-warning[href],.badge-warning[href]{background-color:#c60}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#777}.label-inverse[href],.badge-inverse[href]{background-color:#5e5e5e}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ff962e;background-image:-moz-linear-gradient(top,#ffa54d,#ff7f00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffa54d),to(#ff7f00));background-image:-webkit-linear-gradient(top,#ffa54d,#ff7f00);background-image:-o-linear-gradient(top,#ffa54d,#ff7f00);background-image:linear-gradient(to bottom,#ffa54d,#ff7f00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffa54d',endColorstr='#ffff7f00',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ffa54d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#777;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:#000}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1,h2,h3,h4,h5,h6{margin:0 0 10px;line-height:1.2}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#000}h1{font-size:48px}h2{font-size:36px}h3{font-size:28px}h4{font-size:20px}h5{font-size:13px}p>a,address>a,.breadcrumb a,abbr[title]{text-decoration:none;border-bottom:1px dotted}p>a:hover,address>a:hover,.breadcrumb a:hover,abbr[title]:hover{text-decoration:none;border-bottom:1px solid}code,pre{background-color:#eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.page-header{border-bottom:2px solid #eee}hr{border-bottom:1px solid #eee}.navbar{font-family:"News Cycle","Arial Narrow Bold",sans-serif;font-weight:bold}.navbar .navbar-inner{border-bottom:2px solid #eee;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:19px 20px 21px;font-size:24px;font-weight:bold;text-shadow:none;text-transform:uppercase}.navbar .nav>li>a{padding:20px 10px 20px;font-size:18px;text-shadow:none;text-transform:uppercase}.navbar .nav>.active>a{background-color:transparent}.navbar .navbar-text{padding-right:10px;padding-left:10px;margin-top:20px;font-size:18px;line-height:20px}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .divider-vertical{border-right-color:#eee;border-left-color:#eee}.navbar .dropdown-menu{top:85%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar .dropdown-menu a{font-size:15px;font-weight:bold}.navbar .navbar-search .search-query,.navbar .navbar-search .search-query:hover{color:#777;border:2px solid #eee}.navbar .navbar-search .search-query:-moz-placeholder,.navbar .navbar-search .search-query:hover:-moz-placeholder{color:#999}.navbar .navbar-search .search-query:-ms-input-placeholder,.navbar .navbar-search .search-query:hover:-ms-input-placeholder{color:#999}.navbar .navbar-search .search-query::-webkit-input-placeholder,.navbar .navbar-search .search-query:hover::-webkit-input-placeholder{color:#999}@media(max-width:979px){.nav-collapse .navbar-form,.nav-collapse .navbar-search{margin-bottom:0;border-top:2px solid #eee;border-bottom:2px solid #eee}.navbar .nav-collapse .nav li>a{color:#000}.navbar .nav-collapse .nav li>a:hover{background-color:#eee}.navbar .nav-collapse .navbar-text{margin-top:0}.navbar-inverse .nav-collapse .nav li>a{color:#bbb}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#111;background-image:none}}div.subnav{height:54px;margin:0 1px;background:#fff none;border:2px solid #eee;border-right:0;border-left:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav.subnav-fixed{top:61px;margin:0;border-top:0}div.subnav .nav>li>a,div.subnav .nav>li:first-child>a,div.subnav .nav>li.active>a{padding:20px 15px;font-family:"News Cycle","Arial Narrow Bold",sans-serif;font-size:15px;font-weight:bold;color:#000;background-color:transparent;border-right:0;border-left:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav .nav>li>a:hover,div.subnav .nav>li:first-child>a:hover,div.subnav .nav>li.active>a:hover{padding:20px 15px;color:#000;background-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav li.dropdown>.dropdown-toggle .caret,div.subnav li.dropdown>.dropdown-toggle:hover .caret,div.subnav li.dropdown.open>.dropdown-toggle .caret{border-top-color:#000;border-bottom-color:#000;opacity:1}div.subnav li.dropdown.open .dropdown-toggle,div.subnav li.dropdown.open .dropdown-toggle:hover{color:#000;background-color:#fff}[class^="icon-"],[class*=" icon-"]{vertical-align:baseline}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#141414;*background-color:#000;background-image:-moz-linear-gradient(top,#222,#000);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#000));background-image:-webkit-linear-gradient(top,#222,#000);background-image:-o-linear-gradient(top,#222,#000);background-image:linear-gradient(to bottom,#222,#000);background-repeat:repeat-x;border-color:#000 #000 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff000000',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#000;*background-color:#000}.btn-inverse:active,.btn-inverse.active{background-color:#000 \9}.table-bordered{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}legend{font-family:"News Cycle","Arial Narrow Bold",sans-serif;font-weight:bold;color:#000;border-bottom:2px solid #eee}.well{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.hero-unit{padding:30px 60px;border:1px solid rgba(0,0,0,0.05);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.hero-unit h1{margin:0 0 10px;line-height:1.2}.modal{background:#fff;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.modal-header{border-bottom:0}.modal-footer{background:transparent;border-top:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.close,.close:hover{border-bottom:0}@media(max-width:768px){div.subnav{height:auto}div.subnav .nav>li.active>a{border-top:0}div.subnav .nav>li:hover>a,div.subnav .nav>li:first-child:hover>a,div.subnav .nav>li.active:hover>a,div.subnav .nav>li.dropdown.open .dropdown-toggle,div.subnav .nav>li.dropdown.open .dropdown-toggle:hover{background-color:#eee}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover{border-color:#e5e5e5}}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/readable/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/readable/bootstrap.min.css new file mode 100644 index 0000000..0efc48f --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/readable/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:36px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Lora",Georgia,"Times New Roman",Times,serif;font-size:17px;line-height:26px;color:#333;background-color:#f6f6f6}a{color:#e78b24;text-decoration:none}a:hover,a:focus{color:#da7e18;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:36px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 13px}.lead{margin-bottom:26px;font-size:25.5px;font-weight:200;line-height:39px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#e78b24}a.text-warning:hover,a.text-warning:focus{color:#c37115}.text-error{color:#9c0001}a.text-error:hover,a.text-error:focus{color:#690001}.text-info{color:#0063ac}a.text-info:hover,a.text-info:focus{color:#004679}.text-success{color:#1c9b47}a.text-success:hover,a.text-success:focus{color:#147033}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:13px 0;font-family:inherit;font-weight:bold;line-height:26px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:52px}h1{font-size:46.75px}h2{font-size:38.25px}h3{font-size:29.75px}h4{font-size:21.25px}h5{font-size:17px}h6{font-size:14.45px}h1 small{font-size:29.75px}h2 small{font-size:21.25px}h3 small{font-size:17px}h4 small{font-size:17px}.page-header{padding-bottom:12px;margin:26px 0 39px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 13px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:26px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:26px}dt,dd{line-height:26px}dt{font-weight:bold}dd{margin-left:13px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:26px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 26px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:21.25px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:26px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:26px;font-style:normal;line-height:26px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:15px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:12.5px;margin:0 0 13px;font-size:16px;line-height:26px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:26px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 26px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:26px;font-size:25.5px;line-height:52px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:19.5px;color:#999}label,input,button,select,textarea{font-size:17px;font-weight:normal;line-height:26px}input,button,select,textarea{font-family:"Lora",Georgia,"Times New Roman",Times,serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:26px;padding:4px 6px;margin-bottom:13px;font-size:17px;line-height:26px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:36px;*margin-top:4px;line-height:36px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:26px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#e78b24}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#e78b24}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#e78b24;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#c37115;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f1bc80;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f1bc80;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f1bc80}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#e78b24;background-color:#fcf8e3;border-color:#e78b24}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#9c0001}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#9c0001}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#9c0001;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#690001;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff0305;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff0305;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ff0305}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#9c0001;background-color:#f2dede;border-color:#9c0001}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#1c9b47}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#1c9b47}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#1c9b47;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#147033;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #40dd75;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #40dd75;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #40dd75}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#1c9b47;background-color:#dff0d8;border-color:#1c9b47}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#0063ac}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#0063ac}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#0063ac;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#004679;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #139bff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #139bff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #139bff}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#0063ac;background-color:#d9edf7;border-color:#0063ac}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:25px 20px 26px;margin-top:26px;margin-bottom:26px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:13px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:13px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:17px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:26px;min-width:16px;padding:4px 5px;font-size:17px;font-weight:normal;line-height:26px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#6ce495;border-color:#1c9b47}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:13px}legend+.control-group{margin-top:26px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:26px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:13px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:26px}.table th,.table td{padding:8px;line-height:26px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#f6f6f6}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#f6f6f6;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:12px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:26px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#e2861f;background-image:-moz-linear-gradient(top,#e78b24,#da7e18);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e78b24),to(#da7e18));background-image:-webkit-linear-gradient(top,#e78b24,#da7e18);background-image:-o-linear-gradient(top,#e78b24,#da7e18);background-image:linear-gradient(to bottom,#e78b24,#da7e18);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe78b24',endColorstr='#ffda7e18',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#e2861f;background-image:-moz-linear-gradient(top,#e78b24,#da7e18);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e78b24),to(#da7e18));background-image:-webkit-linear-gradient(top,#e78b24,#da7e18);background-image:-o-linear-gradient(top,#e78b24,#da7e18);background-image:linear-gradient(to bottom,#e78b24,#da7e18);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe78b24',endColorstr='#ffda7e18',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#c3c3c3;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fefefe;border:1px solid #ececec;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:26px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:17px;line-height:26px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#e9e9e9;*background-color:#e1e1e1;background-image:-moz-linear-gradient(top,#eee,#e1e1e1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#eee,#e1e1e1);background-image:-o-linear-gradient(top,#eee,#e1e1e1);background-image:linear-gradient(to bottom,#eee,#e1e1e1);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e1e1e1 #e1e1e1 #bbb;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffe1e1e1',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e1e1e1;*background-color:#d4d4d4}.btn:active,.btn.active{background-color:#c8c8c8 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:21.25px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:14.45px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:12.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e99232;*background-color:#e78b24;background-image:-moz-linear-gradient(top,#ea973b,#e78b24);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ea973b),to(#e78b24));background-image:-webkit-linear-gradient(top,#ea973b,#e78b24);background-image:-o-linear-gradient(top,#ea973b,#e78b24);background-image:linear-gradient(to bottom,#ea973b,#e78b24);background-repeat:repeat-x;border-color:#e78b24 #e78b24 #ac6413;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffea973b',endColorstr='#ffe78b24',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#e78b24;*background-color:#da7e18}.btn-primary:active,.btn-primary.active{background-color:#c37115 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f8d91c;*background-color:#f8d60d;background-image:-moz-linear-gradient(top,#f9da26,#f8d60d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9da26),to(#f8d60d));background-image:-webkit-linear-gradient(top,#f9da26,#f8d60d);background-image:-o-linear-gradient(top,#f9da26,#f8d60d);background-image:linear-gradient(to bottom,#f9da26,#f8d60d);background-repeat:repeat-x;border-color:#f8d60d #f8d60d #b39a05;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9da26',endColorstr='#fff8d60d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f8d60d;*background-color:#e5c507}.btn-warning:active,.btn-warning.active{background-color:#ccaf06 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ab0001;*background-color:#9c0001;background-image:-moz-linear-gradient(top,#b60001,#9c0001);background-image:-webkit-gradient(linear,0 0,0 100%,from(#b60001),to(#9c0001));background-image:-webkit-linear-gradient(top,#b60001,#9c0001);background-image:-o-linear-gradient(top,#b60001,#9c0001);background-image:linear-gradient(to bottom,#b60001,#9c0001);background-repeat:repeat-x;border-color:#9c0001 #9c0001 #500001;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb60001',endColorstr='#ff9c0001',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#9c0001;*background-color:#830001}.btn-danger:active,.btn-danger.active{background-color:#690001 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#1ea84d;*background-color:#1c9b47;background-image:-moz-linear-gradient(top,#20b151,#1c9b47);background-image:-webkit-gradient(linear,0 0,0 100%,from(#20b151),to(#1c9b47));background-image:-webkit-linear-gradient(top,#20b151,#1c9b47);background-image:-o-linear-gradient(top,#20b151,#1c9b47);background-image:linear-gradient(to bottom,#20b151,#1c9b47);background-repeat:repeat-x;border-color:#1c9b47 #1c9b47 #105a29;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20b151',endColorstr='#ff1c9b47',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#1c9b47;*background-color:#18853d}.btn-success:active,.btn-success.active{background-color:#147033 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006cbb;*background-color:#0063ac;background-image:-moz-linear-gradient(top,#0072c6,#0063ac);background-image:-webkit-gradient(linear,0 0,0 100%,from(#0072c6),to(#0063ac));background-image:-webkit-linear-gradient(top,#0072c6,#0063ac);background-image:-o-linear-gradient(top,#0072c6,#0063ac);background-image:linear-gradient(to bottom,#0072c6,#0063ac);background-repeat:repeat-x;border-color:#0063ac #0063ac #003760;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0072c6',endColorstr='#ff0063ac',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#0063ac;*background-color:#005493}.btn-info:active,.btn-info.active{background-color:#004679 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#3b3b3b;*background-color:#333;background-image:-moz-linear-gradient(top,#404040,#333);background-image:-webkit-gradient(linear,0 0,0 100%,from(#404040),to(#333));background-image:-webkit-linear-gradient(top,#404040,#333);background-image:-o-linear-gradient(top,#404040,#333);background-image:linear-gradient(to bottom,#404040,#333);background-repeat:repeat-x;border-color:#333 #333 #0d0d0d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff404040',endColorstr='#ff333333',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#333;*background-color:#262626}.btn-inverse:active,.btn-inverse.active{background-color:#1a1a1a \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#e78b24;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#da7e18;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:13px;margin-bottom:13px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:17px}.btn-group>.btn-mini{font-size:12.75px}.btn-group>.btn-small{font-size:14.45px}.btn-group>.btn-large{font-size:21.25px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e1e1e1}.btn-group.open .btn-primary.dropdown-toggle{background-color:#e78b24}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f8d60d}.btn-group.open .btn-danger.dropdown-toggle{background-color:#9c0001}.btn-group.open .btn-success.dropdown-toggle{background-color:#1c9b47}.btn-group.open .btn-info.dropdown-toggle{background-color:#0063ac}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#333}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:26px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#e78b24}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:26px}.alert-success{color:#1c9b47;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#1c9b47}.alert-danger,.alert-error{color:#9c0001;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#9c0001}.alert-info{color:#0063ac;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#0063ac}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:26px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:26px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#e78b24}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:12px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:26px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#f6f6f6;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#e78b24}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#e78b24;border-bottom-color:#e78b24}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#da7e18;border-bottom-color:#da7e18}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:26px;overflow:visible}.navbar-inner{min-height:60px;padding-right:20px;padding-left:20px;background-color:#f6f6f6;background-image:-moz-linear-gradient(top,#f6f6f6,#f6f6f6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f6f6f6),to(#f6f6f6));background-image:-webkit-linear-gradient(top,#f6f6f6,#f6f6f6);background-image:-o-linear-gradient(top,#f6f6f6,#f6f6f6);background-image:linear-gradient(to bottom,#f6f6f6,#f6f6f6);background-repeat:repeat-x;border:1px solid #d7d7d7;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6f6f6',endColorstr='#fff6f6f6',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:17px 20px 17px;margin-left:-20px;font-size:20px;font-weight:200;color:#333;text-shadow:0 1px 0 #f6f6f6}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:60px;color:#333}.navbar-link{color:#333}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:60px;margin:0 9px;border-right:1px solid #f6f6f6;border-left:1px solid #f6f6f6}.navbar .btn,.navbar .btn-group{margin-top:15px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:15px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:15px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:17px 15px 17px;color:#333;text-decoration:none;text-shadow:0 1px 0 #f6f6f6}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#333;text-decoration:none;background-color:#e9e9e9;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e9e9e9;*background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#e9e9e9,#e9e9e9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e9e9e9),to(#e9e9e9));background-image:-webkit-linear-gradient(top,#e9e9e9,#e9e9e9);background-image:-o-linear-gradient(top,#e9e9e9,#e9e9e9);background-image:linear-gradient(to bottom,#e9e9e9,#e9e9e9);background-repeat:repeat-x;border-color:#e9e9e9 #e9e9e9 #c3c3c3;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe9e9e9',endColorstr='#ffe9e9e9',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e9e9e9;*background-color:#dcdcdc}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#d0d0d0 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #f6f6f6;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #f6f6f6;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#333;background-color:#e9e9e9}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#333;background-image:-moz-linear-gradient(top,#333,#333);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#333));background-image:-webkit-linear-gradient(top,#333,#333);background-image:-o-linear-gradient(top,#333,#333);background-image:linear-gradient(to bottom,#333,#333);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff333333',endColorstr='#ff333333',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#333}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#333;border-left-color:#333}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#333}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#737373;border-color:#333;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#262626;*background-color:#262626;background-image:-moz-linear-gradient(top,#262626,#262626);background-image:-webkit-gradient(linear,0 0,0 100%,from(#262626),to(#262626));background-image:-webkit-linear-gradient(top,#262626,#262626);background-image:-o-linear-gradient(top,#262626,#262626);background-image:linear-gradient(to bottom,#262626,#262626);background-repeat:repeat-x;border-color:#262626 #262626 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff262626',endColorstr='#ff262626',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#262626;*background-color:#1a1a1a}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#0d0d0d \9}.breadcrumb{padding:8px 15px;margin:0 0 26px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:26px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:26px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:21.25px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:14.45px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:12.75px}.pager{margin:26px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:26px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:26px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#e78b24;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:14.382px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#9c0001}.label-important[href],.badge-important[href]{background-color:#690001}.label-warning,.badge-warning{background-color:#e78b24}.label-warning[href],.badge-warning[href]{background-color:#c37115}.label-success,.badge-success{background-color:#1c9b47}.label-success[href],.badge-success[href]{background-color:#147033}.label-info,.badge-info{background-color:#0063ac}.label-info[href],.badge-info[href]{background-color:#004679}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:26px;margin-bottom:26px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#eca14d;background-image:-moz-linear-gradient(top,#efb069,#e78b24);background-image:-webkit-gradient(linear,0 0,0 100%,from(#efb069),to(#e78b24));background-image:-webkit-linear-gradient(top,#efb069,#e78b24);background-image:-o-linear-gradient(top,#efb069,#e78b24);background-image:linear-gradient(to bottom,#efb069,#e78b24);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffefb069',endColorstr='#ffe78b24',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#efb069;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:26px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:26px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:26px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:39px;color:inherit;background-color:#fefefe;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:39px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}div.subnav .nav>li>a,div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover{color:#333}div.subnav-fixed{top:61px}.hero-unit h1,.hero-unit h2,.hero-unit h3,.hero-unit h4,.hero-unit h5,.hero-unit h6{margin:13px 0}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/simplex/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/simplex/bootstrap.min.css new file mode 100644 index 0000000..a3e828f --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/simplex/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Josefin+Sans:300,400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#555;background-color:#f7f7f7}a{color:#d9230f;text-decoration:none}a:hover,a:focus{color:#d9230f;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#d9831f}a.text-warning:hover,a.text-warning:focus{color:#ac6819}.text-error{color:#d9230f}a.text-error:hover,a.text-error:focus{color:#a91b0c}.text-info{color:#029acf}a.text-info:hover,a.text-info:focus{color:#02749c}.text-success{color:#3d9400}a.text-success:hover,a.text-success:focus{color:#286100}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#d9831f}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#d9831f}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#d9831f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#ac6819;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ebb473;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ebb473;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ebb473}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#d9831f;background-color:#fcf8e3;border-color:#d9831f}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#d9230f}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#d9230f}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#d9230f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#a91b0c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f46a5a;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f46a5a;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f46a5a}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#d9230f;background-color:#f2dede;border-color:#d9230f}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#3d9400}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#3d9400}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#3d9400;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#286100;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67fa00;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67fa00;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67fa00}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#3d9400;background-color:#dff0d8;border-color:#3d9400}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#029acf}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#029acf}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#029acf;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#02749c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3acbfd;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3acbfd;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #3acbfd}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#029acf;background-color:#d9edf7;border-color:#029acf}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#84ff2e;border-color:#3d9400}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#f7f7f7}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topleft:0}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-topright:0}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#555;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#555;text-decoration:none;background-color:#f9e3e0;background-image:-moz-linear-gradient(top,#fbebe9,#f7d7d3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbebe9),to(#f7d7d3));background-image:-webkit-linear-gradient(top,#fbebe9,#f7d7d3);background-image:-o-linear-gradient(top,#fbebe9,#f7d7d3);background-image:linear-gradient(to bottom,#fbebe9,#f7d7d3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbebe9',endColorstr='#fff7d7d3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#555;text-decoration:none;background-color:#cf210e;background-image:-moz-linear-gradient(top,#d9230f,#c11f0d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#d9230f),to(#c11f0d));background-image:-webkit-linear-gradient(top,#d9230f,#c11f0d);background-image:-o-linear-gradient(top,#d9230f,#c11f0d);background-image:linear-gradient(to bottom,#d9230f,#c11f0d);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9230f',endColorstr='#ffc11f0d',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#555}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#fff;border:1px solid #ededed;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e62611;*background-color:#d9230f;background-image:-moz-linear-gradient(top,#ef2913,#d9230f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ef2913),to(#d9230f));background-image:-webkit-linear-gradient(top,#ef2913,#d9230f);background-image:-o-linear-gradient(top,#ef2913,#d9230f);background-image:linear-gradient(to bottom,#ef2913,#d9230f);background-repeat:repeat-x;border-color:#d9230f #d9230f #91170a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffef2913',endColorstr='#ffd9230f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#d9230f;*background-color:#c11f0d}.btn-primary:active,.btn-primary.active{background-color:#a91b0c \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ffce36;*background-color:#ffca27;background-image:-moz-linear-gradient(top,#ffd041,#ffca27);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ffd041),to(#ffca27));background-image:-webkit-linear-gradient(top,#ffd041,#ffca27);background-image:-o-linear-gradient(top,#ffd041,#ffca27);background-image:linear-gradient(to bottom,#ffd041,#ffca27);background-repeat:repeat-x;border-color:#ffca27 #ffca27 #d9a400;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffd041',endColorstr='#ffffca27',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#ffca27;*background-color:#ffc40d}.btn-warning:active,.btn-warning.active{background-color:#f3b700 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e62611;*background-color:#d9230f;background-image:-moz-linear-gradient(top,#ef2913,#d9230f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ef2913),to(#d9230f));background-image:-webkit-linear-gradient(top,#ef2913,#d9230f);background-image:-o-linear-gradient(top,#ef2913,#d9230f);background-image:linear-gradient(to bottom,#ef2913,#d9230f);background-repeat:repeat-x;border-color:#d9230f #d9230f #91170a;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffef2913',endColorstr='#ffd9230f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#d9230f;*background-color:#c11f0d}.btn-danger:active,.btn-danger.active{background-color:#a91b0c \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#43a300;*background-color:#3d9400;background-image:-moz-linear-gradient(top,#48ae00,#3d9400);background-image:-webkit-gradient(linear,0 0,0 100%,from(#48ae00),to(#3d9400));background-image:-webkit-linear-gradient(top,#48ae00,#3d9400);background-image:-o-linear-gradient(top,#48ae00,#3d9400);background-image:linear-gradient(to bottom,#48ae00,#3d9400);background-repeat:repeat-x;border-color:#3d9400 #3d9400 #1d4800;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff48ae00',endColorstr='#ff3d9400',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#3d9400;*background-color:#327b00}.btn-success:active,.btn-success.active{background-color:#286100 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#68c5e1;*background-color:#5bc0de;background-image:-moz-linear-gradient(top,#70c8e2,#5bc0de);background-image:-webkit-gradient(linear,0 0,0 100%,from(#70c8e2),to(#5bc0de));background-image:-webkit-linear-gradient(top,#70c8e2,#5bc0de);background-image:-o-linear-gradient(top,#70c8e2,#5bc0de);background-image:linear-gradient(to bottom,#70c8e2,#5bc0de);background-repeat:repeat-x;border-color:#5bc0de #5bc0de #28a1c5;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff70c8e2',endColorstr='#ff5bc0de',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#5bc0de;*background-color:#46b8da}.btn-info:active,.btn-info.active{background-color:#31b0d5 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#454545;*background-color:#2c2c2c;background-image:-moz-linear-gradient(top,#555,#2c2c2c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#2c2c2c));background-image:-webkit-linear-gradient(top,#555,#2c2c2c);background-image:-o-linear-gradient(top,#555,#2c2c2c);background-image:linear-gradient(to bottom,#555,#2c2c2c);background-repeat:repeat-x;border-color:#2c2c2c #2c2c2c #060606;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff555555',endColorstr='#ff2c2c2c',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#2c2c2c;*background-color:#1f1f1f}.btn-inverse:active,.btn-inverse.active{background-color:#121212 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#d9230f;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#d9230f;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#d9230f}.btn-group.open .btn-warning.dropdown-toggle{background-color:#ffca27}.btn-group.open .btn-danger.dropdown-toggle{background-color:#d9230f}.btn-group.open .btn-success.dropdown-toggle{background-color:#3d9400}.btn-group.open .btn-info.dropdown-toggle{background-color:#5bc0de}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#2c2c2c}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.alert,.alert h4{color:#d9831f}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#3d9400;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#3d9400}.alert-danger,.alert-error{color:#d9230f;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#d9230f}.alert-info{color:#029acf;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#029acf}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#d9230f}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#f7f7f7;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#d9230f}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#d9230f;border-bottom-color:#d9230f}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fefefe;background-image:-moz-linear-gradient(top,#fefefe,#fefefe);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fefefe),to(#fefefe));background-image:-webkit-linear-gradient(top,#fefefe,#fefefe);background-image:-o-linear-gradient(top,#fefefe,#fefefe);background-image:linear-gradient(to bottom,#fefefe,#fefefe);background-repeat:repeat-x;border:1px solid #dfdfdf;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffefefe',endColorstr='#fffefefe',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:inherit;text-shadow:0 1px 0 #fefefe}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#555}.navbar-link{color:#555}.navbar-link:hover,.navbar-link:focus{color:#d9230f}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fefefe;border-left:1px solid #fefefe}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#555;text-decoration:none;text-shadow:0 1px 0 #fefefe}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#d9230f;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#d9230f;text-decoration:none;background-color:#fefefe;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f1f1f1;*background-color:#f1f1f1;background-image:-moz-linear-gradient(top,#f1f1f1,#f1f1f1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f1f1f1),to(#f1f1f1));background-image:-webkit-linear-gradient(top,#f1f1f1,#f1f1f1);background-image:-o-linear-gradient(top,#f1f1f1,#f1f1f1);background-image:linear-gradient(to bottom,#f1f1f1,#f1f1f1);background-repeat:repeat-x;border-color:#f1f1f1 #f1f1f1 #cbcbcb;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff1f1f1',endColorstr='#fff1f1f1',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#f1f1f1;*background-color:#e4e4e4}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#d8d8d8 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#d9230f;background-color:#fefefe}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#e62914;background-image:-moz-linear-gradient(top,#ef2d18,#d9230f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ef2d18),to(#d9230f));background-image:-webkit-linear-gradient(top,#ef2d18,#d9230f);background-image:-o-linear-gradient(top,#ef2d18,#d9230f);background-image:linear-gradient(to bottom,#ef2d18,#d9230f);background-repeat:repeat-x;border-color:#f03621;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffef2d18',endColorstr='#ffd9230f',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#fff}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#d9230f}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#ef2d18;border-left-color:#d9230f}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#d9230f}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#f57f72;border-color:#d9230f;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#fff}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d2220f;*background-color:#c11f0d;background-image:-moz-linear-gradient(top,#de240f,#c11f0d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#de240f),to(#c11f0d));background-image:-webkit-linear-gradient(top,#de240f,#c11f0d);background-image:-o-linear-gradient(top,#de240f,#c11f0d);background-image:linear-gradient(to bottom,#de240f,#c11f0d);background-repeat:repeat-x;border-color:#c11f0d #c11f0d #7a1408;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffde240f',endColorstr='#ffc11f0d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#c11f0d;*background-color:#a91b0c}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#91170a \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#fbebe9}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-bottomleft:0;-moz-border-radius-topleft:0}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:0;border-top-right-radius:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-topright:0;-moz-border-radius-bottomright:0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#d9230f;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#d9230f}.label-important[href],.badge-important[href]{background-color:#a91b0c}.label-warning,.badge-warning{background-color:#d9831f}.label-warning[href],.badge-warning[href]{background-color:#ac6819}.label-success,.badge-success{background-color:#3d9400}.label-success[href],.badge-success[href]{background-color:#286100}.label-info,.badge-info{background-color:#029acf}.label-info[href],.badge-info[href]{background-color:#02749c}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#e29944;background-image:-moz-linear-gradient(top,#e8a75d,#d9831f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e8a75d),to(#d9831f));background-image:-webkit-linear-gradient(top,#e8a75d,#d9831f);background-image:-o-linear-gradient(top,#e8a75d,#d9831f);background-image:linear-gradient(to bottom,#e8a75d,#d9831f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8a75d',endColorstr='#ffd9831f',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#e8a75d;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#2c2c2c;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}hr{border-bottom:0}.navbar .navbar-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:12px 20px 8px;font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold}.navbar .brand:hover{color:#d9230f}.navbar .nav>li>a{padding:13px 15px 6px;font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold;text-shadow:none}.navbar .nav>li>a:hover{text-decoration:none}.navbar .nav .active>a,.navbar .nav .active>a:hover{background-color:transparent}.navbar .navbar-text{padding:13px 15px 7px;font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;line-height:19px;color:#999}.navbar .divider-vertical{height:39px;background-color:#eee}.navbar .navbar-search{margin-top:5px}.navbar .navbar-search input[type="text"]{margin-bottom:5px}.navbar .dropdown-menu a{font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif}.navbar-inverse .navbar-inner{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar-inverse .brand:hover{color:#fff}@media(max-width:979px){.navbar .nav-collapse .nav li>a{color:#555}.navbar .nav-collapse .nav li>a:hover{background-color:#fbebe9;background-image:none}.navbar .nav-collapse .nav .active>a{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-top:1px solid rgba(128,128,128,0.3);border-bottom:1px solid rgba(128,128,128,0.3)}.navbar-inverse .nav-collapse .nav li>a{color:#fff}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:rgba(255,255,255,0.1)!important}.navbar-inverse .nav-collapse .nav-header{color:rgba(255,255,255,0.7)}}div.subnav{font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;background-color:#fefefe;background-image:none;border-bottom:1px solid transparent;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2)}div.subnav.subnav-fixed{top:41px;-webkit-box-shadow:inset 0 5px #fff,1px 1px 1px rgba(0,0,0,0.2);-moz-box-shadow:inset 0 5px #fff,1px 1px 1px rgba(0,0,0,0.2);box-shadow:inset 0 5px #fff,1px 1px 1px rgba(0,0,0,0.2)}div.subnav .nav>li>a{padding:14px 12px 10px;font-weight:bold;color:#555;border-right-color:transparent;border-left-color:transparent}div.subnav .nav>li>a:hover{color:#d9230f;background-color:transparent}div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover{color:#d9230f;background-color:transparent;border-right-color:transparent;border-left-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav .nav-header{font-size:13px;font-weight:normal;text-transform:none}.nav-tabs>li>a{color:#555;background-color:#efefef;border:1px solid #ccc}.nav-tabs>li>a:hover{color:#d9230f;background-color:#fbebe9;border:1px solid #ccc}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover{background-color:#f7f7f7}.nav-tabs>li.disabled>a:hover{color:#999;background-color:#efefef}.nav-tabs .dropdown .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555;opacity:1}.nav-tabs .dropdown:hover .dropdown-toggle .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.nav-tabs .dropdown.open .dropdown-toggle{color:#d9230f;background-color:#fbebe9;border-color:#ccc}.nav-tabs .dropdown.open .dropdown-toggle .caret,.nav-tabs .dropdown.open .dropdown-toggle:hover .caret{border-top-color:#d9230f;border-bottom-color:#d9230f;opacity:1}.nav-tabs .dropdown-menu{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs .dropdown-menu a{padding:8px 15px 3px}.tabbable .nav-tabs>li>a,.tabbable .nav-tabs>li>a:hover{border:1px solid #ccc}.tabbable .nav-tabs>li.active>a{border-bottom:1px solid transparent}.tabbable.tabs-below>.nav-tabs>li.active>a,.tabbable.tabs-left>.nav-tabs>li.active>a,.tabbable.tabs-right>.nav-tabs>li.active>a{border-bottom:1px solid #ccc}.nav-pills li>a{color:#555}.nav-pills li>a:hover{color:#d9230f;background-color:#fbebe9}.nav-pills li.active>a,.nav-pills li.active>a:hover{color:#d9230f;background-color:#fbebe9}.nav-pills>li.disabled>a:hover{color:#999}.nav-pills .dropdown .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555;opacity:1}.nav-pills .dropdown .dropdown-toggle:hover .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.nav-pills .dropdown.open .dropdown-toggle,.nav-pills .dropdown.open:hover .dropdown-toggle{color:#d9230f;background-color:#fbebe9}.nav-pills .dropdown.open .dropdown-toggle .caret,.nav-pills .dropdown.open:hover .dropdown-toggle .caret{border-top-color:#d9230f;border-bottom-color:#d9230f}.nav-list li>a{color:#555}.nav-list li>a:hover{color:#d9230f;background-color:#fbebe9}.nav-list li.active>a,.nav-list li.active>a:hover{color:#d9230f;background-color:#fbebe9}.breadcrumb{background-color:#fff;border:0 solid transparent;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1)}.breadcrumb li{padding-top:2px;text-shadow:none}.breadcrumb .active{color:#555}.breadcrumb a{text-shadow:none}.breadcrumb a:hover{text-decoration:none}.pagination ul>li>a,.pagination ul>li>span{padding:2px 14px 0;color:#555}.pagination ul>li>a:hover,.pagination ul>li>span:hover{color:#d9230f;background-color:#fbebe9}.pagination ul>.active>a,.pagination ul>.active>span{color:#d9230f;background-color:#fbebe9}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{color:#555;background-color:transparent}.btn{padding-top:.6em;font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:bold}legend{font-family:"Josefin Sans","Helvetica Neue",Helvetica,Arial,sans-serif;border-bottom:1px solid #ddd}.navbar-search .search-query{color:#555;background-color:#f7f7f7;border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.help-inline,.help-block{font-size:13px}.input-append .btn,.input-prepend .btn{line-height:16px}.label{padding:6px 12px;margin-right:1px;margin-left:1px}i[class^="icon-"]{vertical-align:-2px;opacity:.5}.well{border:0;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1)}.hero-unit{background-color:#fefefe;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1);box-shadow:1px 1px 1px rgba(0,0,0,0.2),-1px -1px 0 rgba(0,0,0,0.1)}.thumbnail{padding:10px;background-color:#fff}.progress{background-color:#e3e3e3;background-image:-moz-linear-gradient(top,#e0e0e0,#e8e8e8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e0e0e0),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#e0e0e0,#e8e8e8);background-image:-o-linear-gradient(top,#e0e0e0,#e8e8e8);background-image:linear-gradient(to bottom,#e0e0e0,#e8e8e8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe0e0e0',endColorstr='#ffe8e8e8',GradientType=0)}.modal-header{border-bottom:0}.modal-header,.modal-body{background-color:#fefefe}.modal-footer{background-color:#f7f7f7}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/slate/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/slate/bootstrap.min.css new file mode 100644 index 0000000..40746a2 --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/slate/bootstrap.min.css
@@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:31px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:21px;color:#c8c8c8;background-color:#272b30}a{color:#fff;text-decoration:none}a:hover,a:focus{color:#fff;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:31px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:21px;font-weight:200;line-height:31.5px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#7a8288}a.muted:hover,a.muted:focus{color:#62686d}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10.5px 0;font-family:inherit;font-weight:bold;line-height:21px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#7a8288}h1,h2,h3{line-height:42px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9.5px;margin:21px 0 31.5px;border-bottom:1px solid #bbbfc2}ul,ol{padding:0;margin:0 0 10.5px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:21px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:21px}dt,dd{line-height:21px}dt{font-weight:bold}dd{margin-left:10.5px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:21px 0;border:0;border-top:1px solid #1c1e22;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #7a8288}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 21px;border-left:5px solid #bbbfc2}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:21px;color:#7a8288}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #bbbfc2;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:21px;font-style:normal;line-height:21px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:12px;color:#3a3f44;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:13px;line-height:21px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:21px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 21px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:21px;line-height:42px;color:#3a3f44;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15.75px;color:#7a8288}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:21px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:21px;padding:4px 6px;margin-bottom:10.5px;font-size:14px;line-height:21px;color:#52575c;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:31px;*margin-top:4px;line-height:31px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#7a8288;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#7a8288}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#7a8288}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#7a8288}.radio,.checkbox{min-height:21px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#bbbfc2}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:20px 20px 21px;margin-top:21px;margin-bottom:21px;background-color:#202328;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#eee}.help-block{display:block;margin-bottom:10.5px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10.5px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:21px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:21px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#bbbfc2;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#d1eed1;border-color:#62c462}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10.5px}legend+.control-group{margin-top:21px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:21px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10.5px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:21px}.table th,.table td{padding:8px;line-height:21px;text-align:left;vertical-align:top;border-top:1px solid #1c1e22}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #1c1e22}.table .table{background-color:#272b30}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #1c1e22;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #1c1e22}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#2e3236}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#3a3f44}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#3a3f44;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #1c1e22}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:21px;color:#7a8288;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#22262a;background-image:-moz-linear-gradient(top,#272b30,#1c1e22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#272b30),to(#1c1e22));background-image:-webkit-linear-gradient(top,#272b30,#1c1e22);background-image:-o-linear-gradient(top,#272b30,#1c1e22);background-image:linear-gradient(to bottom,#272b30,#1c1e22);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff272b30',endColorstr='#ff1c1e22',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#22262a;background-image:-moz-linear-gradient(top,#272b30,#1c1e22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#272b30),to(#1c1e22));background-image:-webkit-linear-gradient(top,#272b30,#1c1e22);background-image:-o-linear-gradient(top,#272b30,#1c1e22);background-image:linear-gradient(to bottom,#272b30,#1c1e22);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff272b30',endColorstr='#ff1c1e22',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#7a8288}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#0b0c0d;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#202328;border:1px solid #101214;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:21px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:21px;color:#3a3f44;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#3a3f44;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#3a3f44;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#bbbec2;*background-color:#bbbdc2;background-image:-moz-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#bbbfc2),to(#bbbdc2));background-image:-webkit-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:-o-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:linear-gradient(to bottom,#bbbfc2,#bbbdc2);background-repeat:repeat-x;border-color:#bbbdc2 #bbbdc2 #93969e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbbbfc2',endColorstr='#ffbbbdc2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#bbbdc2;*background-color:#aeb0b6}.btn-primary:active,.btn-primary.active{background-color:#a0a3aa \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#41454a;*background-color:#272b30;background-image:-moz-linear-gradient(top,#52575c,#272b30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),to(#272b30));background-image:-webkit-linear-gradient(top,#52575c,#272b30);background-image:-o-linear-gradient(top,#52575c,#272b30);background-image:linear-gradient(to bottom,#52575c,#272b30);background-repeat:repeat-x;border-color:#272b30 #272b30 #050506;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff272b30',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#272b30;*background-color:#1c1e22}.btn-inverse:active,.btn-inverse.active{background-color:#101214 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#fff;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#fff;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#3a3f44;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10.5px;margin-bottom:10.5px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#bbbdc2}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#272b30}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:21px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:21px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:21px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#bbbfc2}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:21px;color:#7a8288;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#fff}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:21px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#52575c;cursor:default;background-color:#272b30;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#fff}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#fff;border-bottom-color:#fff}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#52575c;border-bottom-color:#52575c}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#7a8288;border-color:#7a8288}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#7a8288}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#bbbfc2 #ddd #bbbfc2 #bbbfc2}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#bbbfc2 #bbbfc2 #bbbfc2 #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#7a8288}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:21px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#32373c;background-image:-moz-linear-gradient(top,#3a3f44,#272b30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#3a3f44),to(#272b30));background-image:-webkit-linear-gradient(top,#3a3f44,#272b30);background-image:-o-linear-gradient(top,#3a3f44,#272b30);background-image:linear-gradient(to bottom,#3a3f44,#272b30);background-repeat:repeat-x;border:1px solid #0c0d0e;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3a3f44',endColorstr='#ff272b30',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:9.5px 20px 9.5px;margin-left:-20px;font-size:20px;font-weight:200;color:#bbbfc2;text-shadow:0 1px 0 #3a3f44}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#c8c8c8}.navbar-link{color:#c8c8c8}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #3a3f44;border-left:1px solid #272b30}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:9.5px 15px 9.5px;color:#c8c8c8;text-decoration:none;text-shadow:0 1px 0 #3a3f44}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:#3a3f44}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#272b30;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#272a2e;*background-color:#1c1e22;background-image:-moz-linear-gradient(top,#2e3236,#1c1e22);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2e3236),to(#1c1e22));background-image:-webkit-linear-gradient(top,#2e3236,#1c1e22);background-image:-o-linear-gradient(top,#2e3236,#1c1e22);background-image:linear-gradient(to bottom,#2e3236,#1c1e22);background-repeat:repeat-x;border-color:#1c1e22 #1c1e22 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2e3236',endColorstr='#ff1c1e22',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#1c1e22;*background-color:#101214}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#050506 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #3a3f44;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #3a3f44;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#272b30}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#c8c8c8;border-bottom-color:#c8c8c8}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1e2125;background-image:-moz-linear-gradient(top,#272b30,#101214);background-image:-webkit-gradient(linear,0 0,0 100%,from(#272b30),to(#101214));background-image:-webkit-linear-gradient(top,#272b30,#101214);background-image:-o-linear-gradient(top,#272b30,#101214);background-image:linear-gradient(to bottom,#272b30,#101214);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff272b30',endColorstr='#ff101214',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#7a8288;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#7a8288}.navbar-inverse .navbar-text{color:#7a8288}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#101214}.navbar-inverse .navbar-link{color:#7a8288}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#272b30;border-left-color:#101214}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#101214}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#7a8288;border-bottom-color:#7a8288}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#49515a;border-color:#101214;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#3a3f44;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#121417;*background-color:#050506;background-image:-moz-linear-gradient(top,#1c1e22,#050506);background-image:-webkit-gradient(linear,0 0,0 100%,from(#1c1e22),to(#050506));background-image:-webkit-linear-gradient(top,#1c1e22,#050506);background-image:-o-linear-gradient(top,#1c1e22,#050506);background-image:linear-gradient(to bottom,#1c1e22,#050506);background-repeat:repeat-x;border-color:#050506 #050506 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff1c1e22',endColorstr='#ff050506',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#050506;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 21px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#7a8288}.pagination{margin:21px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:21px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#7a8288;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#7a8288;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:21px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#7a8288;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#3a3f44;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#3a3f44;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#3a3f44;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#3a3f44;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#3a3f44;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#3a3f44;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#41474c;border-bottom:1px solid #353a3e;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#3a3f44;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#3a3f44;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#3a3f44;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#3a3f44;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:21px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:21px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#fff;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#52575c}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#7a8288}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#3a3f44}.label-inverse[href],.badge-inverse[href]{background-color:#232628}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:21px;margin-bottom:21px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:21px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:21px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#272b30;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#3a3f44;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:21px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:31.5px;color:inherit;background-color:#202328;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:31.5px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1,h2,h3,h4,h5,h6{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}code,pre{text-shadow:none;background-color:#f7f7f7;border:1px solid #1c1e22}legend,.page-header{border-bottom:1px solid #1c1e22}hr{border-bottom:0}.navbar .navbar-inner{background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0)}.navbar .brand{font-weight:bold;text-shadow:1px 1px 1px rgba(0,0,0,0.3);border-right:1px solid #2e3134}.navbar .navbar-text{padding:0 15px;font-weight:bold}.navbar .nav>li>a{text-shadow:1px 1px 1px rgba(0,0,0,0.3);border-right:1px solid rgba(0,0,0,0.2);border-left:1px solid rgba(255,255,255,0.1)}.navbar .nav>li>a:hover{background-color:#3a3f44;background-image:-moz-linear-gradient(280deg,#272b30,#3a3f44);background-image:-webkit-linear-gradient(280deg,#272b30,#3a3f44);background-image:-o-linear-gradient(280deg,#272b30,#3a3f44);background-image:linear-gradient(280deg,#272b30,#3a3f44);background-repeat:repeat-x;border-right:1px solid transparent;border-left:1px solid transparent}.navbar .nav>li.active>a,.navbar .nav>li.active>a:hover{color:#bbbfc2;background-color:#3a3f44;background-color:#43494f;background-image:-moz-linear-gradient(280deg,#30353b,#43494f);background-image:-webkit-linear-gradient(280deg,#30353b,#43494f);background-image:-o-linear-gradient(280deg,#30353b,#43494f);background-image:linear-gradient(280deg,#30353b,#43494f);background-repeat:repeat-x;border-right:1px solid #2e3134}.navbar .navbar-search .search-query{border:1px solid #2e3134}.navbar .btn,.navbar .btn-group{margin:4px 0}.navbar .divider-vertical{background-color:transparent;border-right:0}.navbar .dropdown-menu::after{border-bottom:6px solid #3a3f44}.navbar-inverse .navbar-inner{background-color:#151719;background-image:-webkit-gradient(linear,0 0,0 100%,from(#202328),color-stop(70%,#151719),to(#151719));background-image:-webkit-linear-gradient(#202328,#151719 70%,#151719);background-image:-moz-linear-gradient(top,#202328,#151719 70%,#151719);background-image:-o-linear-gradient(#202328,#151719 70%,#151719);background-image:linear-gradient(#202328,#151719 70%,#151719);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff202328',endColorstr='#ff151719',GradientType=0)}.navbar-inverse .nav li>a{background-color:transparent;background-image:none}.navbar-inverse .nav li>a:hover,.navbar-inverse .nav li.active>a,.navbar-inverse .nav li.active>a:hover{background-color:#1c1e22;background-image:-moz-linear-gradient(280deg,#101214,#1c1e22);background-image:-webkit-linear-gradient(280deg,#101214,#1c1e22);background-image:-o-linear-gradient(280deg,#101214,#1c1e22);background-image:linear-gradient(280deg,#101214,#1c1e22);background-repeat:repeat-x}@media(max-width:979px){.navbar .nav-collapse .nav li>a,.navbar .nav-collapse .nav li>a:hover,.navbar .nav-collapse .nav .active>a,.navbar .nav-collapse .nav .active>a:hover{color:#bbbfc2;background-color:transparent;background-image:none;border:1px solid transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav-collapse .nav li>a:hover,.navbar .nav-collapse .nav .active>a:hover{background-color:#272b30}.navbar .nav-collapse .navbar-form,.navbar .nav-collapse .navbar-search{border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .nav-collapse .nav-header{color:#7a8288}.navbar-inverse .nav-collapse .nav li>a:hover,.navbar-inverse .nav-collapse .nav .active>a:hover{background-color:#272b30!important}}div.subnav{margin:0 1px;background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;border:1px solid transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0);-webkit-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';-moz-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)'}div.subnav .nav>li>a{color:#bbbfc2;text-shadow:1px 1px 1px rgba(0,0,0,0.3);border-right:1px solid #2e3134;border-left:1px solid #52575c}div.subnav .nav>li>a:hover{color:#bbbfc2;background-color:#3a3f44;background-image:-moz-linear-gradient(280deg,#272b30,#3a3f44);background-image:-webkit-linear-gradient(280deg,#272b30,#3a3f44);background-image:-o-linear-gradient(280deg,#272b30,#3a3f44);background-image:linear-gradient(280deg,#272b30,#3a3f44);background-repeat:repeat-x;border-right:1px solid transparent;border-left:1px solid transparent}div.subnav .nav>li.active>a,div.subnav .nav>li.active>a:hover{color:#bbbfc2;background-color:#3a3f44;background-color:#43494f;background-image:-moz-linear-gradient(280deg,#30353b,#43494f);background-image:-webkit-linear-gradient(280deg,#30353b,#43494f);background-image:-o-linear-gradient(280deg,#30353b,#43494f);background-image:linear-gradient(280deg,#30353b,#43494f);background-repeat:repeat-x;border-right:1px solid #2e3134}div.subnav .nav>li:first-child>a,div.subnav .nav>li:first-child>a:hover{border-left:1px solid transparent}div.subnav .nav>li.active:last-child>a,div.subnav .nav>li:last-child>a:hover{border-right:1px solid #2e3134}div.subnav .open .dropdown-toggle{border-right:1px solid #2e3134;border-left:1px solid #52575c}div.subnav.subnav-fixed{top:40px;margin:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav.subnav-fixed .nav>li.active:first-child>a,div.subnav.subnav-fixed .nav>li:first-child>a:hover{border-left:1px solid #2e3134}.nav .nav-header{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.nav>li>a{font-weight:bold;color:#7a8288;text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;border:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0);-webkit-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';-moz-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)'}.nav li.active>a,.nav li.active>a:hover{color:#fff;background-color:transparent;border:0}.nav>li.disabled>a,.nav>li.disabled>a:hover{color:#52575c}.nav li>a:hover{color:#bbbfc2;background-color:transparent}.nav-list{background-color:#3a3f44;-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.4);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.4);box-shadow:1px 1px 1px rgba(0,0,0,0.4)}.nav-list li>a{text-shadow:-1px -1px 0 rgba(0,0,0,0.3);background-image:none}.nav-list .nav-header{color:#52575c;text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.nav-list .divider{background-color:transparent;border-bottom:1px solid #1c1e22}.nav-tabs{border-bottom:0}.tabs-below .nav-tabs{border-top:0}.tabs-left .nav-tabs{border-right:0}.tabs-right .nav-tabs{border-left:none}.nav-tabs.nav-stacked li>a,.nav-tabs.nav-stacked li>a:hover{background-image:none;border:1px solid #1c1e22}.nav-tabs.nav-stacked li>a:hover,.nav-tabs.nav-stacked .active>a,.nav-tabs.nav-stacked .active>a:hover{color:#fff;background-color:#202328}.breadcrumb{background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;border:1px solid transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0);-webkit-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';-moz-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)'}.breadcrumb a{font-weight:bold;color:#bbbfc2}.breadcrumb li{font-weight:bold;color:#7a8288;text-shadow:1px 1px 1px rgba(0,0,0,0.3)}.pagination ul{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a,.pagination ul>li>span{font-weight:bold;color:#bbbfc2;text-shadow:1px 1px 1px rgba(0,0,0,0.3);background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;border-top:0;border-right:1px solid #2e3134;border-bottom:0;border-left:1px solid #52575c;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0);-webkit-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';-moz-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)'}.pagination ul>li>a:hover,.pagination ul>li>span:hover{background-color:#3a3f44;background-image:-moz-linear-gradient(280deg,#272b30,#3a3f44);background-image:-webkit-linear-gradient(280deg,#272b30,#3a3f44);background-image:-o-linear-gradient(280deg,#272b30,#3a3f44);background-image:linear-gradient(280deg,#272b30,#3a3f44);background-repeat:repeat-x;border-left:1px solid transparent}.pagination ul>.active>a,.pagination ul>.active>a:hover,.pagination ul>.active>span,.pagination ul>.active>span:hover{color:#bbbfc2;background-color:#3a3f44;background-color:#43494f;background-image:-moz-linear-gradient(280deg,#30353b,#43494f);background-image:-webkit-linear-gradient(280deg,#30353b,#43494f);background-image:-o-linear-gradient(280deg,#30353b,#43494f);background-image:linear-gradient(280deg,#30353b,#43494f);background-repeat:repeat-x;border-left:1px solid transparent}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{background-color:#52575c;background-image:-webkit-gradient(linear,0 0,0 100%,from(#7a8288),color-stop(70%,#52575c),to(#52575c));background-image:-webkit-linear-gradient(#7a8288,#52575c 70%,#52575c);background-image:-moz-linear-gradient(top,#7a8288,#52575c 70%,#52575c);background-image:-o-linear-gradient(#7a8288,#52575c 70%,#52575c);background-image:linear-gradient(#7a8288,#52575c 70%,#52575c);background-repeat:no-repeat;border-top:0;border-right:1px solid #2e3134;border-bottom:0;border-left:1px solid #52575c;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7a8288',endColorstr='#ff52575c',GradientType=0)}.pager li>a,.pager li>span{background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;border:1px solid transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0);-webkit-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';-moz-box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)';box-shadow:'0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1)'}.pager li>a:hover,.pager li>span:hover{background-color:#3a3f44;background-image:-moz-linear-gradient(280deg,#272b30,#3a3f44);background-image:-webkit-linear-gradient(280deg,#272b30,#3a3f44);background-image:-o-linear-gradient(280deg,#272b30,#3a3f44);background-image:linear-gradient(280deg,#272b30,#3a3f44);background-repeat:repeat-x;border:1px solid transparent}.pager .disabled a,.pager .disabled a:hover{background-color:transparent;background-color:#3a3f44;background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),color-stop(70%,#3a3f44),to(#3a3f44));background-image:-webkit-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:-moz-linear-gradient(top,#52575c,#3a3f44 70%,#3a3f44);background-image:-o-linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-image:linear-gradient(#52575c,#3a3f44 70%,#3a3f44);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3f44',GradientType=0)}.btn{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#484d51;*background-color:#3a3e41;background-image:-moz-linear-gradient(top,#52575c,#3a3e41);background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),to(#3a3e41));background-image:-webkit-linear-gradient(top,#52575c,#3a3e41);background-image:-o-linear-gradient(top,#52575c,#3a3e41);background-image:linear-gradient(to bottom,#52575c,#3a3e41);background-repeat:repeat-x;border:1px solid #272b30;border-color:#3a3e41 #3a3e41 #161719;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff3a3e41',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#fff;background-color:#3a3e41;*background-color:#2e3134}.btn:active,.btn.active{background-color:#222426 \9}.btn,.btn:hover{font-weight:bold;color:#fff;text-shadow:-1px -1px 1px rgba(0,0,0,0.3)}.btn-primary{color:#fff;color:#3a3f44;text-shadow:0 -1px 0 rgba(0,0,0,0.25);text-shadow:1px 1px 1px rgba(255,255,255,0.3);background-color:#bbbec2;*background-color:#bbbdc2;background-image:-moz-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#bbbfc2),to(#bbbdc2));background-image:-webkit-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:-o-linear-gradient(top,#bbbfc2,#bbbdc2);background-image:linear-gradient(to bottom,#bbbfc2,#bbbdc2);background-repeat:repeat-x;border-color:#bbbdc2 #bbbdc2 #93959e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffbbbfc2',endColorstr='#ffbbbdc2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#bbbdc2;*background-color:#aeb0b6}.btn-primary:active,.btn-primary.active{background-color:#a0a2aa \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#41454a;*background-color:#272b30;background-image:-moz-linear-gradient(top,#52575c,#272b30);background-image:-webkit-gradient(linear,0 0,0 100%,from(#52575c),to(#272b30));background-image:-webkit-linear-gradient(top,#52575c,#272b30);background-image:-o-linear-gradient(top,#52575c,#272b30);background-image:linear-gradient(to bottom,#52575c,#272b30);background-repeat:repeat-x;border-color:#272b30 #272b30 #050506;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff52575c',endColorstr='#ff272b30',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#272b30;*background-color:#1c1e22}.btn-inverse:active,.btn-inverse.active{background-color:#101214 \9}.caret{border-top-color:#fff}.table tbody tr.success td{background-color:#468847}.table tbody tr.error td{background-color:#b94a48}.table tbody tr.info td{background-color:#3a87ad}label,input,button,select,textarea,legend{color:#c8c8c8}legend,label{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.input-prepend .add-on,.input-append .add-on{text-shadow:none;vertical-align:top;background-color:#52575c;border-top:1px solid #7a8288;border-right:1px solid #3a3f44;border-bottom:1px solid #3a3f44;border-left:1px solid #7a8288}.input-append .btn,.input-prepend .btn{padding:5px 14px;margin-top:-1px}.uneditable-input,input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{color:#bbbfc2}.form-actions{border-top:0}.dropdown-menu{-webkit-box-shadow:0 5px 5px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 5px rgba(0,0,0,0.2);box-shadow:0 5px 5px rgba(0,0,0,0.2)}.dropdown.open .dropdown-toggle{color:#bbbfc2;background-color:#3a3f44}.dropdown-submenu>a::after{border-left-color:#fff}.label,.alert{color:rgba(255,255,255,0.9);text-shadow:-1px -1px 0 rgba(0,0,0,0.3);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.3);-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.3);box-shadow:1px 1px 1px rgba(0,0,0,0.3)}.alert{background-color:#f89406;border-color:#f89406}.alert .alert-heading{color:rgba(255,255,255,0.9);text-shadow:-1px -1px 0 rgba(0,0,0,0.4)}.alert-success{background-color:#468847;border-color:#468847}.alert-error{background-color:#b94a48;border-color:#b94a48}.alert-info{background-color:#3a87ad;border-color:#3a87ad}.well,.hero-unit{-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5);-moz-box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5);box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5)}.thumbnail,a.thumbnail:hover{border:1px solid #1c1e22}.progress{background-color:#202328;background-image:-moz-linear-gradient(top,#202328,#202328);background-image:-webkit-gradient(linear,0 0,0 100%,from(#202328),to(#202328));background-image:-webkit-linear-gradient(top,#202328,#202328);background-image:-o-linear-gradient(top,#202328,#202328);background-image:linear-gradient(to bottom,#202328,#202328);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff202328',endColorstr='#ff202328',GradientType=0);-webkit-box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5);-moz-box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5);box-shadow:inset 1px 1px 1px rgba(0,0,0,0.5)}.footer{border-top:1px solid #1c1e22}.footer p{color:#c8c8c8}.modal{background-color:#2e3236}.modal-header{border-bottom:0}.modal-body{border-bottom:1px solid #1c1e22}.modal-footer{background-color:#272b30;border-top:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}@media(max-width:979px){.navbar .brand{border-right:0}}@media(max-width:768px){div.subnav .nav>li+li>a{border-top:1px solid transparent}}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css new file mode 100644 index 0000000..7b7b4bb --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/spacelab/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:31px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:21px;color:#666;background-color:#fff}a{color:#09d;text-decoration:none}a:hover,a:focus{color:#09d;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:31px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:22.5px;font-weight:200;line-height:31.5px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#ccc}a.muted:hover,a.muted:focus{color:#b3b3b3}.text-warning{color:#fff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-error{color:#fff}a.text-error:hover,a.text-error:focus{color:#e6e6e6}.text-info{color:#fff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-success{color:#fff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10.5px 0;font-family:inherit;font-weight:normal;line-height:21px;color:#2d2d2d;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#ccc}h1,h2,h3{line-height:42px}h1{font-size:41.25px}h2{font-size:33.75px}h3{font-size:26.25px}h4{font-size:18.75px}h5{font-size:15px}h6{font-size:12.75px}h1 small{font-size:26.25px}h2 small{font-size:18.75px}h3 small{font-size:15px}h4 small{font-size:15px}.page-header{padding-bottom:9.5px;margin:21px 0 31.5px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10.5px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:21px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:21px}dt,dd{line-height:21px}dt{font-weight:bold}dd{margin-left:10.5px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:21px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #ccc}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 21px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:18.75px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:21px;color:#ccc}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:21px;font-style:normal;line-height:21px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:13px;color:#434848;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:21px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:21px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 21px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:42px;color:#434848;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15.75px;color:#ccc}label,input,button,select,textarea{font-size:15px;font-weight:normal;line-height:21px}input,button,select,textarea{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:21px;padding:4px 6px;margin-bottom:10.5px;font-size:15px;line-height:21px;color:#666;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:31px;*margin-top:4px;line-height:31px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#ccc;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#ccc}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#ccc}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc}.radio,.checkbox{min-height:21px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#fff}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#fff}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#fff;background-color:#d47500;border-color:#fff}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#fff}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#fff}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#fff;background-color:#cd0200;border-color:#fff}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#fff}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#fff}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#fff;background-color:#3cb521;border-color:#fff}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#fff}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#fff}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#fff;background-color:#3399f3;border-color:#fff}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:20px 20px 21px;margin-top:21px;margin-bottom:21px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#8c8c8c}.help-block{display:block;margin-bottom:10.5px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10.5px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:15px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:21px;min-width:16px;padding:4px 5px;font-size:15px;font-weight:normal;line-height:21px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#98e986;border-color:#3cb521}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10.5px}legend+.control-group{margin-top:21px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:21px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10.5px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:21px}.table th,.table td{padding:8px;line-height:21px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.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 th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#3cb521}.table tbody tr.error>td{background-color:#cd0200}.table tbody tr.warning>td{background-color:#d47500}.table tbody tr.info>td{background-color:#3399f3}.table-hover tbody tr.success:hover>td{background-color:#359f1d}.table-hover tbody tr.error:hover>td{background-color:#b40200}.table-hover tbody tr.warning:hover>td{background-color:#bb6700}.table-hover tbody tr.info:hover>td{background-color:#1b8df2}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:rgba(0,0,0,0.1);border-bottom:1px solid rgba(255,255,255,0.5)}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:21px;color:#666;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0092d3;background-image:-moz-linear-gradient(top,#09d,#0087c4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09d),to(#0087c4));background-image:-webkit-linear-gradient(top,#09d,#0087c4);background-image:-o-linear-gradient(top,#09d,#0087c4);background-image:linear-gradient(to bottom,#09d,#0087c4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099dd',endColorstr='#ff0087c4',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0092d3;background-image:-moz-linear-gradient(top,#09d,#0087c4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#09d),to(#0087c4));background-image:-webkit-linear-gradient(top,#09d,#0087c4);background-image:-o-linear-gradient(top,#09d,#0087c4);background-image:linear-gradient(to bottom,#09d,#0087c4);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0099dd',endColorstr='#ff0087c4',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#ccc}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#eee;border:1px solid #dcdcdc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:21px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:15px;line-height:21px;color:#434848;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f8f8f8;*background-color:#eee;background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:linear-gradient(to bottom,#fff,#eee);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#eee #eee #c8c8c8;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffeeeeee',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#434848;background-color:#eee;*background-color:#e1e1e1}.btn:active,.btn.active{background-color:#d5d5d5 \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#434848;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:18.75px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:12.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:11.25px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0aaaf1;*background-color:#09d;background-image:-moz-linear-gradient(top,#11b6ff,#09d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#11b6ff),to(#09d));background-image:-webkit-linear-gradient(top,#11b6ff,#09d);background-image:-o-linear-gradient(top,#11b6ff,#09d);background-image:linear-gradient(to bottom,#11b6ff,#09d);background-repeat:repeat-x;border-color:#09d #09d #006491;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff11b6ff',endColorstr='#ff0099dd',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#09d;*background-color:#0087c4}.btn-primary:active,.btn-primary.active{background-color:#0076aa \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ee8505;*background-color:#d47500;background-image:-moz-linear-gradient(top,#ff9008,#d47500);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff9008),to(#d47500));background-image:-webkit-linear-gradient(top,#ff9008,#d47500);background-image:-o-linear-gradient(top,#ff9008,#d47500);background-image:linear-gradient(to bottom,#ff9008,#d47500);background-repeat:repeat-x;border-color:#d47500 #d47500 #884b00;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff9008',endColorstr='#ffd47500',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#d47500;*background-color:#bb6700}.btn-warning:active,.btn-warning.active{background-color:#a15900 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#eb0301;*background-color:#cd0200;background-image:-moz-linear-gradient(top,#ff0301,#cd0200);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff0301),to(#cd0200));background-image:-webkit-linear-gradient(top,#ff0301,#cd0200);background-image:-o-linear-gradient(top,#ff0301,#cd0200);background-image:linear-gradient(to bottom,#ff0301,#cd0200);background-repeat:repeat-x;border-color:#cd0200 #cd0200 #810100;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff0301',endColorstr='#ffcd0200',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#cd0200;*background-color:#b40200}.btn-danger:active,.btn-danger.active{background-color:#9a0200 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#47cb2a;*background-color:#3cb521;background-image:-moz-linear-gradient(top,#4fd930,#3cb521);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4fd930),to(#3cb521));background-image:-webkit-linear-gradient(top,#4fd930,#3cb521);background-image:-o-linear-gradient(top,#4fd930,#3cb521);background-image:linear-gradient(to bottom,#4fd930,#3cb521);background-repeat:repeat-x;border-color:#3cb521 #3cb521 #277415;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4fd930',endColorstr='#ff3cb521',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#3cb521;*background-color:#359f1d}.btn-success:active,.btn-success.active{background-color:#2e8a19 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#436c98;*background-color:#3a5d83;background-image:-moz-linear-gradient(top,#4a76a6,#3a5d83);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4a76a6),to(#3a5d83));background-image:-webkit-linear-gradient(top,#4a76a6,#3a5d83);background-image:-o-linear-gradient(top,#4a76a6,#3a5d83);background-image:linear-gradient(to bottom,#4a76a6,#3a5d83);background-repeat:repeat-x;border-color:#3a5d83 #3a5d83 #23374e;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4a76a6',endColorstr='#ff3a5d83',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#3a5d83;*background-color:#325071}.btn-info:active,.btn-info.active{background-color:#2a4460 \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#848a94;*background-color:#6c737e;background-image:-moz-linear-gradient(top,#949aa3,#6c737e);background-image:-webkit-gradient(linear,0 0,0 100%,from(#949aa3),to(#6c737e));background-image:-webkit-linear-gradient(top,#949aa3,#6c737e);background-image:-o-linear-gradient(top,#949aa3,#6c737e);background-image:linear-gradient(to bottom,#949aa3,#6c737e);background-repeat:repeat-x;border-color:#6c737e #6c737e #494d55;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff949aa3',endColorstr='#ff6c737e',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#6c737e;*background-color:#606670}.btn-inverse:active,.btn-inverse.active{background-color:#545a63 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#09d;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#09d;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#434848;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10.5px;margin-bottom:10.5px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:15px}.btn-group>.btn-mini{font-size:11.25px}.btn-group>.btn-small{font-size:12.75px}.btn-group>.btn-large{font-size:18.75px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#eee}.btn-group.open .btn-primary.dropdown-toggle{background-color:#09d}.btn-group.open .btn-warning.dropdown-toggle{background-color:#d47500}.btn-group.open .btn-danger.dropdown-toggle{background-color:#cd0200}.btn-group.open .btn-success.dropdown-toggle{background-color:#3cb521}.btn-group.open .btn-info.dropdown-toggle{background-color:#3a5d83}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#6c737e}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:21px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#d47500;border:1px solid #c54c00;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#fff}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:21px}.alert-success{color:#fff;background-color:#3cb521;border-color:#4b9f1d}.alert-success h4{color:#fff}.alert-danger,.alert-error{color:#fff;background-color:#cd0200;border-color:#be001e}.alert-danger h4,.alert-error h4{color:#fff}.alert-info{color:#fff;background-color:#3399f3;border-color:#11adf1}.alert-info h4{color:#fff}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:21px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:21px;color:#ccc;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#09d}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:21px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#666;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#09d}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#09d;border-bottom-color:#09d}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#09d;border-bottom-color:#09d}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#666;border-bottom-color:#666}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#ccc;border-color:#ccc}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#ccc}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#ccc}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:21px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#eee,#e1e1e1);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eee),to(#e1e1e1));background-image:-webkit-linear-gradient(top,#eee,#e1e1e1);background-image:-o-linear-gradient(top,#eee,#e1e1e1);background-image:linear-gradient(to bottom,#eee,#e1e1e1);background-repeat:repeat-x;border:1px solid #ccc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeeeeee',endColorstr='#ffe1e1e1',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:9.5px 20px 9.5px;margin-left:-20px;font-size:20px;font-weight:200;color:#666;text-shadow:0 1px 0 #eee}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#666}.navbar-link{color:#666}.navbar-link:hover,.navbar-link:focus{color:#09d}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #eee;border-left:1px solid #e1e1e1}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:9.5px 15px 9.5px;color:#666;text-decoration:none;text-shadow:0 1px 0 #eee}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#09d;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#09d;text-decoration:none;background-color:transparent;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#dcdcdc;*background-color:#d4d4d4;background-image:-moz-linear-gradient(top,#e1e1e1,#d4d4d4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e1e1e1),to(#d4d4d4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d4d4d4);background-image:-o-linear-gradient(top,#e1e1e1,#d4d4d4);background-image:linear-gradient(to bottom,#e1e1e1,#d4d4d4);background-repeat:repeat-x;border-color:#d4d4d4 #d4d4d4 #aeaeae;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe1e1e1',endColorstr='#ffd4d4d4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#d4d4d4;*background-color:#c8c8c8}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#bbb \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#09d;border-bottom-color:#09d}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#09d;background-color:transparent}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#666;border-bottom-color:#666}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#09d;border-bottom-color:#09d}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#7c828d;background-image:-moz-linear-gradient(top,#868d97,#6c737e);background-image:-webkit-gradient(linear,0 0,0 100%,from(#868d97),to(#6c737e));background-image:-webkit-linear-gradient(top,#868d97,#6c737e);background-image:-o-linear-gradient(top,#868d97,#6c737e);background-image:linear-gradient(to bottom,#868d97,#6c737e);background-repeat:repeat-x;border-color:#656b76;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff868d97',endColorstr='#ff6c737e',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#ccc;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#ccc}.navbar-inverse .navbar-text{color:#ccc}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#6c737e}.navbar-inverse .navbar-link{color:#ccc}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#868d97;border-left-color:#6c737e}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#6c737e}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#ccc;border-bottom-color:#ccc}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#afb3ba;border-color:#6c737e;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#eee}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#eee}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#eee}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#434848;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#6f7681;*background-color:#606670;background-image:-moz-linear-gradient(top,#78808b,#606670);background-image:-webkit-gradient(linear,0 0,0 100%,from(#78808b),to(#606670));background-image:-webkit-linear-gradient(top,#78808b,#606670);background-image:-o-linear-gradient(top,#78808b,#606670);background-image:linear-gradient(to bottom,#78808b,#606670);background-repeat:repeat-x;border-color:#606670 #606670 #3d4147;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff78808b',endColorstr='#ff606670',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#606670;*background-color:#545a63}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#494d55 \9}.breadcrumb{padding:8px 15px;margin:0 0 21px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#ccc}.pagination{margin:21px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:21px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#ccc;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#ccc;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:18.75px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:12.75px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:11.25px}.pager{margin:21px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#ccc;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:21px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:21px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#09d;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#666}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:12.69px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#ccc}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#fff}.label-important[href],.badge-important[href]{background-color:#e6e6e6}.label-warning,.badge-warning{background-color:#d47500}.label-warning[href],.badge-warning[href]{background-color:#a15900}.label-success,.badge-success{background-color:#fff}.label-success[href],.badge-success[href]{background-color:#e6e6e6}.label-info,.badge-info{background-color:#fff}.label-info[href],.badge-info[href]{background-color:#e6e6e6}.label-inverse,.badge-inverse{background-color:#434848}.label-inverse[href],.badge-inverse[href]{background-color:#2a2e2e}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:21px;margin-bottom:21px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#ee8c14;background-image:-moz-linear-gradient(top,#ff9c21,#d47500);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ff9c21),to(#d47500));background-image:-webkit-linear-gradient(top,#ff9c21,#d47500);background-image:-o-linear-gradient(top,#ff9c21,#d47500);background-image:linear-gradient(to bottom,#ff9c21,#d47500);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff9c21',endColorstr='#ffd47500',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#ff9c21;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:21px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:21px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#2d2d2d;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#434848;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:21px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:31.5px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:#2d2d2d}.hero-unit li{line-height:31.5px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}.navbar .brand{text-shadow:0 1px 0 rgba(255,255,255,0.3);-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}.navbar .brand:hover{color:#09d;-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}.navbar .nav>li>a{padding:11px 10px 8px;text-shadow:0 1px 0 rgba(255,255,255,0.3);-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}.navbar .nav>li>a:hover{-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}.navbar .navbar-text{padding:11px 10px 8px;line-height:inherit}.navbar .navbar-search .search-query,.navbar .navbar-search .search-query:hover{margin-bottom:0;line-height:normal;color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.5);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.5);box-shadow:inset 0 1px 2px rgba(0,0,0,0.5)}.navbar .navbar-search .search-query:-moz-placeholder,.navbar .navbar-search .search-query:hover:-moz-placeholder{color:#ccc}.navbar .navbar-search .search-query:-ms-input-placeholder,.navbar .navbar-search .search-query:hover:-ms-input-placeholder{color:#ccc}.navbar .navbar-search .search-query::-webkit-input-placeholder,.navbar .navbar-search .search-query:hover::-webkit-input-placeholder{color:#ccc}.navbar .navbar-search .search-query:focus,.navbar .navbar-search .search-query:hover:focus,.navbar .navbar-search .search-query.focused,.navbar .navbar-search .search-query:hover.focused{color:#666;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.5);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.5);box-shadow:inset 0 1px 2px rgba(0,0,0,0.5)}.navbar-inverse .brand{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.navbar-inverse .brand:hover{color:#fff}.navbar-inverse .nav>li>a{text-shadow:-1px -1px 0 rgba(0,0,0,0.3)}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown:hover>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open:hover>.dropdown-toggle .caret{border-top-color:#fff}.navbar-inverse .navbar-search .search-query,.navbar-inverse .navbar-search .search-query:hover{color:#fff}.navbar-inverse .navbar-search .search-query:-moz-placeholder,.navbar-inverse .navbar-search .search-query:hover:-moz-placeholder{color:#eee}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder,.navbar-inverse .navbar-search .search-query:hover:-ms-input-placeholder{color:#eee}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder,.navbar-inverse .navbar-search .search-query:hover::-webkit-input-placeholder{color:#eee}@media(max-width:979px){.navbar .nav-collapse .nav li>a:hover{color:#fff;text-shadow:none;background-color:#09d}.navbar .nav-collapse .navbar-search{border-top:0;border-bottom:0}.navbar-inverse .nav-collapse .nav li>a{color:#ccc!important}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:#09d!important}.navbar-inverse .nav-collapse .nav-header{color:#eee}}div.subnav .nav>li>a{color:#666;-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}div.subnav .nav>li>a:hover{color:#09d;border-left-color:#ccc;-webkit-transition:color ease-in-out .2s;-moz-transition:color ease-in-out .2s;-o-transition:color ease-in-out .2s;transition:color ease-in-out .2s}div.subnav .nav>li.active>a{color:#666}div.subnav .nav>li.active>a:hover{color:#666}div.subnav .nav>li.dropdown>.dropdown-toggle{background-color:transparent}div.subnav .nav>li.dropdown.open>.dropdown-toggle{color:#666;border-right:1px solid #e5e5e5;border-left:1px solid whiteSmoke}div.subnav .nav>li.dropdown.open>.dropdown-toggle:hover{color:#09d}div.subnav-fixed{top:41px}.nav>li>a:hover,.nav>li>a:focus{background-color:rgba(0,0,0,0.05)}.nav>li.dropdown>.dropdown-toggle .caret,.nav>li.dropdown.active>.dropdown-toggle .caret,.nav>li.dropdown.open>.dropdown-toggle .caret,.nav>li.dropdown.open.active>.dropdown-toggle .caret{border-top:4px solid #666;border-top-color:#666;opacity:1}.nav>li.dropdown>.dropdown-toggle:hover .caret,.nav>li.dropdown.active>.dropdown-toggle:hover .caret,.nav>li.dropdown.open>.dropdown-toggle:hover .caret,.nav>li.dropdown.open.active>.dropdown-toggle:hover .caret{border-top:4px solid #09d;border-top-color:#09d}.nav-list .divider{background-color:rgba(0,0,0,0.1);border-bottom-color:rgba(255,255,255,0.5)}.table tbody tr.success>td,.table tbody tr.error>td,.table tbody tr.info>td{color:#fff}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#e29235}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#e29235}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#e29235;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#c7781d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #efc28e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #efc28e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #efc28e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#e29235;background-color:#d47500;border-color:#e29235}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#c00}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#c00}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#c00;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#900;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f33;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f33;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #f33}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#c00;background-color:#cd0200;border-color:#c00}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#2ba949}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#2ba949}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#2ba949;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#218037;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #63d77e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #63d77e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #63d77e}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#2ba949;background-color:#3cb521;border-color:#2ba949}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3399f3}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3399f3}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3399f3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#0e80e5;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #93c9f9;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #93c9f9;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #93c9f9}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3399f3;background-color:#3399f3;border-color:#3399f3}.alert{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{font-weight:bold;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.label-important,.badge-important{background-color:#cd0200}.label-warning,.badge-warning{background-color:#d47500}.label-success,.badge-success{background-color:#3cb521}.label-info,.badge-info{background-color:#3399f3}.hero-unit{border:1px solid rgba(0,0,0,0.1)}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/spruce/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/spruce/bootstrap.min.css new file mode 100644 index 0000000..6d5279c --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/spruce/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url(//fonts.googleapis.com/css?family=Crete+Round);/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:31px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:Georgia,"Times New Roman",Times,serif;font-size:15px;line-height:21px;color:#555;background-color:#fff}a{color:#028d79;text-decoration:none}a:hover,a:focus{color:#028d79;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:31px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10.5px}.lead{margin-bottom:21px;font-size:22.5px;font-weight:200;line-height:31.5px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#fff}a.text-warning:hover,a.text-warning:focus{color:#e6e6e6}.text-error{color:#fff}a.text-error:hover,a.text-error:focus{color:#e6e6e6}.text-info{color:#fff}a.text-info:hover,a.text-info:focus{color:#e6e6e6}.text-success{color:#fff}a.text-success:hover,a.text-success:focus{color:#e6e6e6}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10.5px 0;font-family:'Crete Round',serif;font-weight:normal;line-height:21px;color:#333;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:42px}h1{font-size:41.25px}h2{font-size:33.75px}h3{font-size:26.25px}h4{font-size:18.75px}h5{font-size:15px}h6{font-size:12.75px}h1 small{font-size:26.25px}h2 small{font-size:18.75px}h3 small{font-size:15px}h4 small{font-size:15px}.page-header{padding-bottom:9.5px;margin:21px 0 31.5px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10.5px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:21px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:21px}dt,dd{line-height:21px}dt{font-weight:bold}dd{margin-left:10.5px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:21px 0;border:0;border-top:1px solid #999;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 21px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:18.75px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:21px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:21px;font-style:normal;line-height:21px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:13px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:10px;margin:0 0 10.5px;font-size:14px;line-height:21px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:21px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 21px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:21px;font-size:22.5px;line-height:42px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15.75px;color:#999}label,input,button,select,textarea{font-size:15px;font-weight:normal;line-height:21px}input,button,select,textarea{font-family:Georgia,"Times New Roman",Times,serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:21px;padding:4px 6px;margin-bottom:10.5px;font-size:15px;line-height:21px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:31px;*margin-top:4px;line-height:31px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#ccc}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#ccc}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc}.radio,.checkbox{min-height:21px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#fff}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#fff}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#fff;background-color:#f26522;border-color:#fff}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#fff}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#fff}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#fff;background-color:#d14432;border-color:#fff}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#fff}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#fff}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#fff;background-color:#24c00b;border-color:#fff}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#fff}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#fff}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#fff;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#e6e6e6;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fff}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#fff;background-color:#185af9;border-color:#fff}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:20px 20px 21px;margin-top:21px;margin-bottom:21px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#7b7b7b}.help-block{display:block;margin-bottom:10.5px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10.5px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:15px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:21px;min-width:16px;padding:4px 5px;font-size:15px;font-weight:normal;line-height:21px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#03f2d0;border-color:#015b4e}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10.5px}legend+.control-group{margin-top:21px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:21px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10.5px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:#f7f7f7;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:21px}.table th,.table td{padding:8px;line-height:21px;text-align:left;vertical-align:top;border-top:1px solid #999}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #999}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #999;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #999}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#eaeaea}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#ddd}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#24c00b}.table tbody tr.error>td{background-color:#d14432}.table tbody tr.warning>td{background-color:#f26522}.table tbody tr.info>td{background-color:#185af9}.table-hover tbody tr.success:hover>td{background-color:#1fa80a}.table-hover tbody tr.error:hover>td{background-color:#bf3c2b}.table-hover tbody tr.warning:hover>td{background-color:#ed560e}.table-hover tbody tr.info:hover>td{background-color:#064bf1}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#002425;border:1px solid #ccc;border:1px solid transparent;*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #999}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:21px;color:#fff;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#015145;background-image:-moz-linear-gradient(top,#015b4e,#014238);background-image:-webkit-gradient(linear,0 0,0 100%,from(#015b4e),to(#014238));background-image:-webkit-linear-gradient(top,#015b4e,#014238);background-image:-o-linear-gradient(top,#015b4e,#014238);background-image:linear-gradient(to bottom,#015b4e,#014238);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff015b4e',endColorstr='#ff014238',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#015145;background-image:-moz-linear-gradient(top,#015b4e,#014238);background-image:-webkit-gradient(linear,0 0,0 100%,from(#015b4e),to(#014238));background-image:-webkit-linear-gradient(top,#015b4e,#014238);background-image:-o-linear-gradient(top,#015b4e,#014238);background-image:linear-gradient(to bottom,#015b4e,#014238);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff015b4e',endColorstr='#ff014238',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#000;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#ddd;border:1px solid #cbcbcb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:21px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:15px;line-height:21px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #d9d9d9;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#bfbfbf;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:18.75px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:12.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:11.25px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#016a5b;*background-color:#015b4e;background-image:-moz-linear-gradient(top,#017464,#015b4e);background-image:-webkit-gradient(linear,0 0,0 100%,from(#017464),to(#015b4e));background-image:-webkit-linear-gradient(top,#017464,#015b4e);background-image:-o-linear-gradient(top,#017464,#015b4e);background-image:linear-gradient(to bottom,#017464,#015b4e);background-repeat:repeat-x;border-color:#015b4e #015b4e #000f0d;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff017464',endColorstr='#ff015b4e',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#015b4e;*background-color:#014238}.btn-primary:active,.btn-primary.active{background-color:#002923 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#f36f30;*background-color:#f26522;background-image:-moz-linear-gradient(top,#f3763a,#f26522);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f3763a),to(#f26522));background-image:-webkit-linear-gradient(top,#f3763a,#f26522);background-image:-o-linear-gradient(top,#f3763a,#f26522);background-image:linear-gradient(to bottom,#f3763a,#f26522);background-repeat:repeat-x;border-color:#f26522 #f26522 #bc440b;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff3763a',endColorstr='#fff26522',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f26522;*background-color:#ed560e}.btn-warning:active,.btn-warning.active{background-color:#d44d0d \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d44f3e;*background-color:#d14432;background-image:-moz-linear-gradient(top,#d65747,#d14432);background-image:-webkit-gradient(linear,0 0,0 100%,from(#d65747),to(#d14432));background-image:-webkit-linear-gradient(top,#d65747,#d14432);background-image:-o-linear-gradient(top,#d65747,#d14432);background-image:linear-gradient(to bottom,#d65747,#d14432);background-repeat:repeat-x;border-color:#d14432 #d14432 #952f21;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd65747',endColorstr='#ffd14432',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#d14432;*background-color:#bf3c2b}.btn-danger:active,.btn-danger.active{background-color:#aa3526 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0065b4;*background-color:#005ca4;background-image:-moz-linear-gradient(top,#006bbe,#005ca4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#006bbe),to(#005ca4));background-image:-webkit-linear-gradient(top,#006bbe,#005ca4);background-image:-o-linear-gradient(top,#006bbe,#005ca4);background-image:linear-gradient(to bottom,#006bbe,#005ca4);background-repeat:repeat-x;border-color:#005ca4 #005ca4 #003158;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff006bbe',endColorstr='#ff005ca4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#005ca4;*background-color:#004e8b}.btn-success:active,.btn-success.active{background-color:#004071 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#32a0c0;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#34a7c8,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#34a7c8),to(#2f96b4));background-image:-webkit-linear-gradient(top,#34a7c8,#2f96b4);background-image:-o-linear-gradient(top,#34a7c8,#2f96b4);background-image:linear-gradient(to bottom,#34a7c8,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff34a7c8',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#505050;*background-color:#484848;background-image:-moz-linear-gradient(top,#555,#484848);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#484848));background-image:-webkit-linear-gradient(top,#555,#484848);background-image:-o-linear-gradient(top,#555,#484848);background-image:linear-gradient(to bottom,#555,#484848);background-repeat:repeat-x;border-color:#484848 #484848 #222;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff555555',endColorstr='#ff484848',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#484848;*background-color:#3c3c3c}.btn-inverse:active,.btn-inverse.active{background-color:#2f2f2f \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#028d79;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#028d79;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10.5px;margin-bottom:10.5px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:15px}.btn-group>.btn-mini{font-size:11.25px}.btn-group>.btn-small{font-size:12.75px}.btn-group>.btn-large{font-size:18.75px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#015b4e}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f26522}.btn-group.open .btn-danger.dropdown-toggle{background-color:#d14432}.btn-group.open .btn-success.dropdown-toggle{background-color:#005ca4}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#484848}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:21px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#f26522;border:1px solid #f13614;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#fff}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:21px}.alert-success{color:#fff;background-color:#24c00b;border-color:#3aa80a}.alert-success h4{color:#fff}.alert-danger,.alert-error{color:#fff;background-color:#d14432;border-color:#c72d35}.alert-danger h4,.alert-error h4{color:#fff}.alert-info{color:#fff;background-color:#185af9;border-color:#066ee7}.alert-info h4{color:#fff}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:21px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:21px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#028d79}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9.5px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:21px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#028d79}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#028d79;border-bottom-color:#028d79}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#028d79;border-bottom-color:#028d79}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:21px;overflow:visible}.navbar-inner{min-height:55px;padding-right:20px;padding-left:20px;background-color:#013435;background-image:-moz-linear-gradient(top,#013435,#013435);background-image:-webkit-gradient(linear,0 0,0 100%,from(#013435),to(#013435));background-image:-webkit-linear-gradient(top,#013435,#013435);background-image:-o-linear-gradient(top,#013435,#013435);background-image:linear-gradient(to bottom,#013435,#013435);background-repeat:repeat-x;border:1px solid #011b1c;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff013435',endColorstr='#ff013435',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:17px 20px 17px;margin-left:-20px;font-size:20px;font-weight:200;color:#fff;text-shadow:0 1px 0 #013435}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:55px;color:#999}.navbar-link{color:#fff}.navbar-link:hover,.navbar-link:focus{color:#fff}.navbar .divider-vertical{height:55px;margin:0 9px;border-right:1px solid #013435;border-left:1px solid #013435}.navbar .btn,.navbar .btn-group{margin-top:12.5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:12.5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:12.5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:17px 15px 17px;color:#fff;text-decoration:none;text-shadow:0 1px 0 #013435}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:#002425}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#fff;text-decoration:none;background-color:#002425;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#011b1c;*background-color:#011b1c;background-image:-moz-linear-gradient(top,#011b1c,#011b1c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#011b1c),to(#011b1c));background-image:-webkit-linear-gradient(top,#011b1c,#011b1c);background-image:-o-linear-gradient(top,#011b1c,#011b1c);background-image:linear-gradient(to bottom,#011b1c,#011b1c);background-repeat:repeat-x;border-color:#011b1c #011b1c #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff011b1c',endColorstr='#ff011b1c',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#011b1c;*background-color:#000303}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#000 \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:transparent;content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #002425;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:transparent}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #002425;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#002425}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#eaeaea,#ddd);background-image:-webkit-gradient(linear,0 0,0 100%,from(#eaeaea),to(#ddd));background-image:-webkit-linear-gradient(top,#eaeaea,#ddd);background-image:-o-linear-gradient(top,#eaeaea,#ddd);background-image:linear-gradient(to bottom,#eaeaea,#ddd);background-repeat:repeat-x;border-color:#d0d0d0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffeaeaea',endColorstr='#ffdddddd',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#333;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#333}.navbar-inverse .brand{color:#333}.navbar-inverse .navbar-text{color:#555}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#333;background-color:#cbcbcb}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#333;background-color:#cbcbcb}.navbar-inverse .navbar-link{color:#333}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#333}.navbar-inverse .divider-vertical{border-right-color:#eaeaea;border-left-color:#ddd}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#333;background-color:#cbcbcb}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#fff;border-color:#ddd;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#555}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#555}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#555}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#d8d8d8;*background-color:#d0d0d0;background-image:-moz-linear-gradient(top,#ddd,#d0d0d0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ddd),to(#d0d0d0));background-image:-webkit-linear-gradient(top,#ddd,#d0d0d0);background-image:-o-linear-gradient(top,#ddd,#d0d0d0);background-image:linear-gradient(to bottom,#ddd,#d0d0d0);background-repeat:repeat-x;border-color:#d0d0d0 #d0d0d0 #aaa;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdddddd',endColorstr='#ffd0d0d0',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#d0d0d0;*background-color:#c3c3c3}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#b7b7b7 \9}.breadcrumb{padding:8px 15px;margin:0 0 21px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:21px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:21px;text-decoration:none;background-color:#e6e6e6;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#a2cdb5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:18.75px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:12.75px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:11.25px}.pager{margin:21px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#015b4e;border-bottom:1px solid #014238;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:21px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:21px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#028d79;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:12.69px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#fff}.label-important[href],.badge-important[href]{background-color:#e6e6e6}.label-warning,.badge-warning{background-color:#f26522}.label-warning[href],.badge-warning[href]{background-color:#d44d0d}.label-success,.badge-success{background-color:#fff}.label-success[href],.badge-success[href]{background-color:#e6e6e6}.label-info,.badge-info{background-color:#fff}.label-info[href],.badge-info[href]{background-color:#e6e6e6}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:21px;margin-bottom:21px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#f5834d;background-image:-moz-linear-gradient(top,#f6976a,#f26522);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f6976a),to(#f26522));background-image:-webkit-linear-gradient(top,#f6976a,#f26522);background-image:-o-linear-gradient(top,#f6976a,#f26522);background-image:linear-gradient(to bottom,#f6976a,#f26522);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff6976a',endColorstr='#fff26522',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#f6976a;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:21px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:21px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:21px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:31.5px;color:inherit;background-color:#ddd;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:#333}.hero-unit li{line-height:31.5px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-family:Georgia,"Times New Roman",Times,serif;color:#333}.muted{color:#999}.jumbotron h1{font-weight:normal!important}.page-header{padding-bottom:5px;border-bottom:0}.page-header h1{margin-bottom:0}hr{border-bottom:0}blockquote{border-left:2px solid #333}blockquote.pull-right{border-right:2px solid #333}blockquote small{color:#013435}.navbar .navbar-inner{background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .brand{padding:18px 20px 16px;font-family:'Crete Round',serif;font-size:26px;font-weight:normal}.navbar .brand:hover{background-color:#002425}.navbar .nav>li>a{padding:20px 20px 14px;font-family:'Crete Round',serif;font-size:20px;font-weight:normal;text-shadow:none}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-text{margin:19px 20px 0;font-family:'Crete Round',serif;font-size:20px;font-weight:normal;line-height:inherit}.navbar .divider-vertical{border-color:rgba(0,0,0,0.2)}.navbar .btn-navbar{margin-top:14px}.navbar .navbar-form,.navbar .navbar-search{margin-top:12px;line-height:normal;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.navbar .navbar-search .search-query{line-height:normal;color:#fff;background-color:rgba(255,255,255,0.4);border-color:transparent}.navbar .dropdown-menu li>a{font-family:'Crete Round',serif;font-weight:normal}.navbar .nav>li>.dropdown-menu::before,.navbar .nav>li>.dropdown-menu::after{border-bottom:0}.navbar-inverse .navbar-search .search-query{color:#555}.navbar-inverse .dropdown-menu{background-color:#cbcbcb}.navbar-inverse .dropdown-menu li>a{color:#333}.navbar-inverse .dropdown-menu li>a:hover{background-color:#ddd}.navbar-inverse .dropdown-menu .divider{border-bottom:1px solid rgba(0,0,0,0.2)}.navbar-inverse .dropdown-menu .nav-header{color:#555}@media(max-width:979px){.navbar .nav-collapse .nav li>a{color:#fff}.navbar .nav-collapse .nav li>a:hover{background-color:#002425}.navbar-inverse .nav-collapse .nav li>a:hover{background-color:rgba(0,0,0,0.06)!important}.nav-collapse .navbar-form,.nav-collapse .navbar-search{border:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}}div.subnav{background:#015b4e none;border-color:transparent}div.subnav .nav>li>a{padding:12px 12px 10px;font-family:'Crete Round',serif;font-weight:normal;color:#fff;background-color:transparent;border-color:transparent}div.subnav .nav>li>a:hover,div.subnav .nav>.active>a,div.subnav .nav>.active>a:hover,div.subnav .dropdown.open .dropdown-toggle,div.subnav .dropdown.open.active .dropdown-toggle:hover{color:#fff;background-color:#002425;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}div.subnav.subnav-fixed{top:55px}.nav .nav-header{color:#333}.nav .disabled>a,.nav .disabled>a:hover{color:#fff;background-color:#028d79}.nav-tabs{border-color:transparent}.nav-tabs>li>a{color:#fff;background-color:#015b4e}.nav-tabs>li>a:hover{background-color:#013435;border-color:transparent}.nav-tabs .active>a,.nav-tabs .active>a:hover{color:#fff;background-color:#013435;border-color:transparent}.nav-tabs.nav-stacked>li>a{border-color:transparent}.nav-tabs.nav-stacked>li>a:hover{border-color:transparent}.nav-tabs .open .dropdown-toggle,.nav-tabs .active.open .dropdown-toggle{background-color:#013435}.nav-pills>li>a{color:#fff;background-color:#015b4e}.nav-pills>li>a:hover{background-color:#013435;border-color:transparent}.nav-pills .active>a,.nav-pills .active>a:hover{color:#fff;background-color:#013435;border-color:transparent}.nav-pills .open .dropdown-toggle,.nav-pills .active.open .dropdown-toggle{background-color:#013435}.tabbable .nav-tabs,.tabbable .nav-tabs>li>a,.tabbable .nav-tabs>li>a:hover,.tabbable .nav-tabs>li.active>a,.tabbable .nav-tabs>li.active>a:hover{border-color:transparent}.nav-list .nav-header,.nav-list li>a{text-shadow:none}.nav-list li>a:hover{color:#fff;background-color:#015b4e}.nav-list li.active>a,.nav-list li.active>a:hover{text-shadow:none;background-color:#013435}.nav-list .divider{background-color:transparent;border-bottom:1px solid #999}.breadcrumb{background-color:#015b4e;background-image:none;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.breadcrumb li{color:#fff;text-shadow:none}.breadcrumb li a{color:#fff;text-decoration:underline}.breadcrumb li a:hover{color:#fff}.breadcrumb li .divider{color:#fff}.breadcrumb .active{color:#fff}.pagination ul{background-color:#015b4e;background-image:none;border-color:transparent;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.pagination ul>li>a,.pagination ul>li>span{color:#fff;background-color:#015b4e;border-color:transparent}.pagination ul>li>a:hover,.pagination ul>li>span:hover{color:#fff;background-color:#013435}.pagination ul>.active>a,.pagination ul>.active>span{color:#fff;background-color:#013435}.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>span,.pagination ul>.disabled>span:hover{color:#fff;background-color:#028d79}.pager li>a,.pager li>span{color:#fff;background-color:#015b4e;border:0}.pager li>a:hover,.pager li>span:hover{background-color:#013435}.pager .disabled a,.pager .disabled a:hover{color:#fff;background-color:#028d79}.btn{font-family:'Crete Round',serif;font-weight:normal;text-shadow:none}.btn-large{font-size:18px}.btn-group .dropdown-toggle{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.table th,.table-striped tbody tr:nth-child(odd) th{color:#fff;background-color:#015b4e}.table tbody tr.success td{background-color:#b5eeaa}.table tbody tr.error td{background-color:#eeb8b8}.table tbody tr.info td{background-color:#aee2ee}legend{font-family:'Crete Round',serif;font-weight:normal;color:#333;border-bottom:0}label,.help-block,input[type="file"]{color:#333}input,textarea,select{color:#555}.uneditable-input{color:#555}.form-actions{border-top:0}.control-group.warning .control-label,.control-group.error .control-label,.control-group.success .control-label{color:#555}.control-group.error .help-block,.control-group.error .help-inline{color:#d14432}.control-group.error input,.control-group.error select,.control-group.error textarea{color:#555;border:1px solid #d14432}.control-group.success .help-block,.control-group.success .help-inline{color:#015b4e}.control-group.success input,.control-group.success select,.control-group.success textarea{color:#555;border:1px solid #015b4e}.control-group.warning .help-block,.control-group.warning .help-inline{color:#f26522}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#555;border:1px solid #f26522}.alert{text-shadow:none;border:0}.alert h1,.alert h2,.alert h3,.alert h4,.alert h5,.alert h6{font-weight:bold;color:#fff}.alert-heading{font-family:Georgia,"Times New Roman",Times,serif;color:inherit}.badge,.label{text-shadow:none;background-color:#015b4e}.badge-success,.label-success{background-color:#006bbe}.badge-warning,.label-warning{background-color:#f3763a}.badge-important,.label-important{background-color:#d65747}.badge-info,.label-info{background-color:#34a7c8}.badge-inverse,.label-inverse{background-color:#555}.well{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.hero-unit{border:0}.thumbnail{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.dropdown-menu .nav-header{color:#fff;text-shadow:none}.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a{background-image:none}.progress{background-color:#d5d5d5;background-image:none}[class^="icon-"],[class*=" icon-"]{vertical-align:baseline}.modal-header{padding:12px 15px 6px;color:#fff;background-color:#015b4e}.modal-header h1,.modal-header h2,.modal-header h3,.modal-header h4,.modal-header h5,.modal-header h6{color:#fff}.modal-body,.modal-footer{border:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.modal-body label,.modal-footer label{color:#555}.modal-footer{background-color:#ddd}.popover-title{color:#fff}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}
diff --git a/doc/_static/bootswatch-2.3.2/superhero/bootstrap.min.css b/doc/_static/bootswatch-2.3.2/superhero/bootstrap.min.css new file mode 100644 index 0000000..6635d7d --- /dev/null +++ b/doc/_static/bootswatch-2.3.2/superhero/bootstrap.min.css
@@ -0,0 +1,9 @@ +@import url('//fonts.googleapis.com/css?family=Oswald|Noticia+Text');/*! + * Bootstrap v2.3.2 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:Georgia,Utopia,Palatino,'Palatino Linotype',serif;font-size:15px;line-height:20px;color:#ece9d7;background-color:#2a333c}a{color:#e36b23;text-decoration:none}a:hover,a:focus{color:#e36b23;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:22.5px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:'Oswald',sans-serif;font-weight:bold;line-height:20px;color:#e36b23;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:41.25px}h2{font-size:33.75px}h3{font-size:26.25px}h4{font-size:18.75px}h5{font-size:15px}h6{font-size:12.75px}h1 small{font-size:26.25px}h2 small{font-size:18.75px}h3 small{font-size:15px}h4 small{font-size:15px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid transparent;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:18.75px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:13px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:14px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:22.5px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:15px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:Georgia,Utopia,Palatino,'Palatino Linotype',serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:15px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-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 linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:transparent;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#fff}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:15px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:15px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#abe081;border-color:#5da028}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:#3f4956;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid transparent}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid transparent}.table .table{background-color:#2a333c}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid transparent;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid transparent}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#45515f}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#505e6e}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#5a6a7d;border:1px solid #ccc;border:1px solid transparent;*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:transparent;border-bottom:1px solid #45515f}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#ece9d7;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#dc6620;background-image:-moz-linear-gradient(top,#e36b23,#d25f1b);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e36b23),to(#d25f1b));background-image:-webkit-linear-gradient(top,#e36b23,#d25f1b);background-image:-o-linear-gradient(top,#e36b23,#d25f1b);background-image:linear-gradient(to bottom,#e36b23,#d25f1b);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe36b23',endColorstr='#ffd25f1b',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#dc6620;background-image:-moz-linear-gradient(top,#e36b23,#d25f1b);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e36b23),to(#d25f1b));background-image:-webkit-linear-gradient(top,#e36b23,#d25f1b);background-image:-o-linear-gradient(top,#e36b23,#d25f1b);background-image:linear-gradient(to bottom,#e36b23,#d25f1b);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe36b23',endColorstr='#ffd25f1b',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#303841;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#45515f;border:1px solid #363f4a;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;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:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:15px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:18.75px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:12.75px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:11.25px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.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-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e37e23;*background-color:#e39b23;background-image:-moz-linear-gradient(top,#e36b23,#e39b23);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e36b23),to(#e39b23));background-image:-webkit-linear-gradient(top,#e36b23,#e39b23);background-image:-o-linear-gradient(top,#e36b23,#e39b23);background-image:linear-gradient(to bottom,#e36b23,#e39b23);background-repeat:repeat-x;border-color:#e39b23 #e39b23 #a56f15;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe36b23',endColorstr='#ffe39b23',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#e39b23;*background-color:#d28d1b}.btn-primary:active,.btn-primary.active{background-color:#bb7e18 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#e8864c;*background-color:#e36b23;background-image:-moz-linear-gradient(top,#ec9967,#e36b23);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ec9967),to(#e36b23));background-image:-webkit-linear-gradient(top,#ec9967,#e36b23);background-image:-o-linear-gradient(top,#ec9967,#e36b23);background-image:linear-gradient(to bottom,#ec9967,#e36b23);background-repeat:repeat-x;border-color:#e36b23 #e36b23 #a54b15;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffec9967',endColorstr='#ffe36b23',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#e36b23;*background-color:#d25f1b}.btn-warning:active,.btn-warning.active{background-color:#bb5518 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#414141;*background-color:#222;background-image:-moz-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:linear-gradient(to bottom,#555,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff555555',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#e36b23;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#e36b23;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:15px}.btn-group>.btn-mini{font-size:11.25px}.btn-group>.btn-small{font-size:12.75px}.btn-group>.btn-large{font-size:18.75px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#e39b23}.btn-group.open .btn-warning.dropdown-toggle{background-color:#e36b23}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#e36b23}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#2a333c;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#e36b23}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#e36b23;border-bottom-color:#e36b23}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:70px;padding-right:20px;padding-left:20px;background-color:#2a333c;background-image:-moz-linear-gradient(top,#2a333c,#2a333c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#2a333c),to(#2a333c));background-image:-webkit-linear-gradient(top,#2a333c,#2a333c);background-image:-o-linear-gradient(top,#2a333c,#2a333c);background-image:linear-gradient(to bottom,#2a333c,#2a333c);background-repeat:repeat-x;border:1px solid #20262d;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a333c',endColorstr='#ff2a333c',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:25px 20px 25px;margin-left:-20px;font-size:20px;font-weight:200;color:#e36b23;text-shadow:0 1px 0 #2a333c}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:70px;color:#999}.navbar-link{color:#e36b23}.navbar-link:hover,.navbar-link:focus{color:#e36b23}.navbar .divider-vertical{height:70px;margin:0 9px;border-right:1px solid #2a333c;border-left:1px solid #2a333c}.navbar .btn,.navbar .btn-group{margin-top:20px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:20px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:20px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:25px 15px 25px;color:#e36b23;text-decoration:none;text-shadow:0 1px 0 #2a333c}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#e36b23;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#e36b23;text-decoration:none;background-color:#2a333c;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#20262d;*background-color:#20262d;background-image:-moz-linear-gradient(top,#20262d,#20262d);background-image:-webkit-gradient(linear,0 0,0 100%,from(#20262d),to(#20262d));background-image:-webkit-linear-gradient(top,#20262d,#20262d);background-image:-o-linear-gradient(top,#20262d,#20262d);background-image:linear-gradient(to bottom,#20262d,#20262d);background-repeat:repeat-x;border-color:#20262d #20262d #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff20262d',endColorstr='#ff20262d',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#20262d;*background-color:#151a1e}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#0b0d0f \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:transparent;content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #5a6a7d;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:transparent}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #5a6a7d;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#e36b23;background-color:#2a333c}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#45515f;background-image:-moz-linear-gradient(top,#45515f,#45515f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#45515f),to(#45515f));background-image:-webkit-linear-gradient(top,#45515f,#45515f);background-image:-o-linear-gradient(top,#45515f,#45515f);background-image:linear-gradient(to bottom,#45515f,#45515f);background-repeat:repeat-x;border-color:#20262d;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff45515f',endColorstr='#ff45515f',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#e36b23;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#e36b23}.navbar-inverse .brand{color:#e36b23}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#e36b23;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#e36b23;background-color:#45515f}.navbar-inverse .navbar-link{color:#e36b23}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#e36b23}.navbar-inverse .divider-vertical{border-right-color:#45515f;border-left-color:#45515f}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#e36b23;background-color:#45515f}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#e36b23;border-bottom-color:#e36b23}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#fff;border-color:#45515f;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#999}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#3a4450;*background-color:#3a4450;background-image:-moz-linear-gradient(top,#3a4450,#3a4450);background-image:-webkit-gradient(linear,0 0,0 100%,from(#3a4450),to(#3a4450));background-image:-webkit-linear-gradient(top,#3a4450,#3a4450);background-image:-o-linear-gradient(top,#3a4450,#3a4450);background-image:linear-gradient(to bottom,#3a4450,#3a4450);background-repeat:repeat-x;border-color:#3a4450 #3a4450 #1a1f24;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3a4450',endColorstr='#ff3a4450',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#3a4450;*background-color:#303841}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#252b33 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#45515f;border:1px solid transparent;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#e36b23}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:18.75px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:12.75px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:11.25px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#45515f;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#3f4956;border-bottom:1px solid #343d47;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#45515f;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#45515f;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#45515f;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#45515f;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#e36b23;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:12.69px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#e36b23}.label-warning[href],.badge-warning[href]{background-color:#bb5518}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-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;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,tr