diff --git a/.classpath b/.classpath
deleted file mode 100644
index 2491ec3..0000000
--- a/.classpath
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final int |
+BUTTON_BACKSPACE |
+14 |
+
+
+public static final int |
+BUTTON_DOWN |
+108 |
+
+
+public static final int |
+BUTTON_ENTER |
+28 |
+
+
+public static final int |
+BUTTON_LEFT |
+105 |
+
+
+public static final int |
+BUTTON_RIGHT |
+106 |
+
+
+public static final int |
+BUTTON_UP |
+103 |
+
+
+public static final java.lang.String |
+SYSTEM_EVENT_PATH |
+"/dev/input/by-path/platform-gpio-keys.0-event" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"leds" |
+
+
+public static final int |
+GREEN |
+0 |
+
+
+public static final int |
+LEFT |
+0 |
+
+
+public static final int |
+RED |
+1 |
+
+
+public static final int |
+RIGHT |
+1 |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_BRIGHTNESS |
+"brightness" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DELAY_OFF |
+"delay_off" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DELAY_ON |
+"delay_on" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_MAX_BRIGHTNESS |
+"max_brightness" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_TRIGGER |
+"trigger" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+POWER_SUPPLY_CLASS_NAME |
+"power_supply" |
+
+
+public static final java.lang.String |
+SYSFS_MAX_VOLTAGE |
+"max_voltage" |
+
+
+public static final java.lang.String |
+SYSFS_MEASURED_CURRENT |
+"measured_current" |
+
+
+public static final java.lang.String |
+SYSFS_MEASURED_VOLTAGE |
+"measured_voltage" |
+
+
+public static final java.lang.String |
+SYSFS_MIN_VOLTAGE |
+"min_voltage" |
+
+
+public static final java.lang.String |
+SYSFS_TECHNOLOGY |
+"technology" |
+
+
+public static final java.lang.String |
+SYSFS_TYPE |
+"type" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"dc-motor" |
+
+
+public static final java.lang.String |
+CLASS_NAME_PREFIX |
+"motor" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_DIRECT |
+"run-direct" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_FOREVER |
+"run-forever" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_TIMED |
+"run-timed" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_STOP |
+"stop" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_ADDRESS |
+"address" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMAND |
+"command" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMANDS |
+"commands" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME |
+"driver_name" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE |
+"duty_cycle" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE_SP |
+"duty_cycle_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POLARITY |
+"polarity" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_RAMP_DOWN_SP |
+"ramp_down_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_RAMP_UP_SP |
+"ramp_up_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STATE |
+"state" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STOP_ACTION |
+"stop_action" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STOP_ACTIONS |
+"stop_actions" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_TIME_SP |
+"time_sp" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME_100MM |
+"act-l12-ev3-100" |
+
+
+public static final java.lang.String |
+LINEAR_MOTOR_CLASS_NAME_PREFIX |
+"linear" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_M |
+"count_per_m" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_FULL_TRAVEL_COUNT |
+"full_travel_count" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME_50MM |
+"act-l12-ev3-50" |
+
+
+public static final java.lang.String |
+LINEAR_MOTOR_CLASS_NAME_PREFIX |
+"linear" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_M |
+"count_per_m" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_FULL_TRAVEL_COUNT |
+"full_travel_count" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-ev3-l-motor" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-ev3-m-motor" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"tacho-motor" |
+
+
+public static final java.lang.String |
+CLASS_NAME_PREFIX |
+"motor" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RESET |
+"reset" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_DIRECT |
+"run-direct" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_FOREVER |
+"run-forever" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_TIMED |
+"run-timed" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_TO_ABS_POS |
+"run-to-abs-pos" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN_TO_REL_POS |
+"run-to-rel-pos" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_STOP |
+"stop" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_ADDRESS |
+"address" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMAND |
+"command" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMANDS |
+"commands" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_ROT |
+"count_per_rot" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME |
+"driver_name" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE |
+"duty_cycle" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE_SP |
+"duty_cycle_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POLARITY |
+"polarity" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POSITION |
+"position" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POSITION_D |
+"hold_pid/Kd" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POSITION_I |
+"hold_pid/Ki" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POSITION_P |
+"hold_pid/Kp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POSITION_SP |
+"position_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_RAMP_DOWN_SP |
+"ramp_down_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_RAMP_UP_SP |
+"ramp_up_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_SPEED |
+"speed" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_SPEED_SP |
+"speed_sp" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STATE |
+"state" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STOP_ACTION |
+"stop_action" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_STOP_ACTIONS |
+"stop_actions" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_TIME_SP |
+"time_sp" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-nxt-motor" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"servo-motor" |
+
+
+public static final java.lang.String |
+CLASS_NAME_PREFIX |
+"motor" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_FLOAT |
+"float" |
+
+
+public static final java.lang.String |
+SYSFS_COMMAND_RUN |
+"run" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"lego-port" |
+
+
+public static final int |
+INPUT_1 |
+0 |
+
+
+public static final int |
+INPUT_2 |
+1 |
+
+
+public static final int |
+INPUT_3 |
+2 |
+
+
+public static final int |
+INPUT_4 |
+3 |
+
+
+public static final int |
+OUTPUT_A |
+4 |
+
+
+public static final int |
+OUTPUT_B |
+5 |
+
+
+public static final int |
+OUTPUT_C |
+6 |
+
+
+public static final int |
+OUTPUT_D |
+7 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final int |
+MOTOR_A |
+4 |
+
+
+public static final int |
+MOTOR_B |
+5 |
+
+
+public static final int |
+MOTOR_C |
+6 |
+
+
+public static final int |
+MOTOR_D |
+7 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final int |
+SENSOR_1 |
+0 |
+
+
+public static final int |
+SENSOR_2 |
+1 |
+
+
+public static final int |
+SENSOR_3 |
+2 |
+
+
+public static final int |
+SENSOR_4 |
+3 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-ev3-color" |
+
+
+public static final java.lang.String |
+SYSFS_AMBIENT_LIGHT_INTENSITY_MODE |
+"COL-AMBIENT" |
+
+
+public static final int |
+SYSFS_AMBIENT_LIGHT_INTENSITY_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_COLOR_MODE |
+"COL-COLOR" |
+
+
+public static final int |
+SYSFS_COLOR_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_REFLECTED_LIGHT_INTENSITY_MODE |
+"COL-REFLECT" |
+
+
+public static final int |
+SYSFS_REFLECTED_LIGHT_INTENSITY_VALUE_INDEX |
+0 |
+
+
+public static final int |
+SYSFS_RGB_B_VALUE_INDEX |
+2 |
+
+
+public static final int |
+SYSFS_RGB_G_VALUE_INDEX |
+1 |
+
+
+public static final java.lang.String |
+SYSFS_RGB_MODE |
+"RGB-RAW" |
+
+
+public static final int |
+SYSFS_RGB_R_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-ev3-gyro" |
+
+
+public static final java.lang.String |
+SYSFS_ANGLE_MODE |
+"GYRO-ANG" |
+
+
+public static final int |
+SYSFS_ANGLE_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_RATE_MODE |
+"GYRO-RATE" |
+
+
+public static final int |
+SYSFS_RATE_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+SYSFS_PROPERTY_FIRMWARE_VERSION |
+"fw_version" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_POLL_MS |
+"poll_ms" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-ev3-ir" |
+
+
+public static final java.lang.String |
+SYSFS_PROXIMITY_REQUIRED_MODE |
+"IR-PROX" |
+
+
+public static final int |
+SYSFS_PROXIMITY_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-nxt-light" |
+
+
+public static final java.lang.String |
+SYSFS_AMBIENT_REQUIRED_MODE |
+"AMBIENT" |
+
+
+public static final int |
+SYSFS_AMBIENT_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_REFLECTED_REQUIRED_MODE |
+"REFLECT" |
+
+
+public static final int |
+SYSFS_REFLECTED_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+CLASS_NAME |
+"lego-sensor" |
+
+
+public static final java.lang.String |
+CLASS_NAME_PREFIX |
+"sensor" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_ADDRESS |
+"address" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMAND |
+"command" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_COMMANDS |
+"commands" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DECIMALS |
+"decimals" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME |
+"driver_name" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_MODE |
+"mode" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_MODES |
+"modes" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_NUM_VALUES |
+"num_values" |
+
+
+public static final java.lang.String |
+SYSFS_PROPERTY_UNITS |
+"units" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"lego-nxt-sound" |
+
+
+public static final java.lang.String |
+SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE |
+"DBA" |
+
+
+public static final int |
+SYSFS_SOUND_PRESSURE_LOW_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_SOUND_PRESSURE_REQUIRED_MODE |
+"DB" |
+
+
+public static final int |
+SYSFS_SOUND_PRESSURE_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME_EV3 |
+"lego-ev3-touch" |
+
+
+public static final java.lang.String |
+DRIVER_NAME_NXT |
+"lego-nxt-touch" |
+
+
+public static final java.lang.String |
+SYSFS_REQUIRED_MODE |
+"TOUCH" |
+
+
+public static final int |
+SYSFS_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME_EV3 |
+"lego-ev3-us" |
+
+
+public static final java.lang.String |
+DRIVER_NAME_NXT |
+"lego-nxt-us" |
+
+
+public static final java.lang.String |
+SYSFS_CM_MODE |
+"US-DIST-CM" |
+
+
+public static final int |
+SYSFS_CM_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_IN_MODE |
+"US-DIST-IN" |
+
+
+public static final int |
+SYSFS_IN_VALUE_INDEX |
+0 |
+
+
+public static final java.lang.String |
+SYSFS_OTHER_PRESENT_MODE |
+"US-LISTEN" |
+
+
+public static final int |
+SYSFS_OTHER_PRESENT_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final byte |
+ADDRESS |
+1 |
+
+
+public static final java.lang.String |
+DRIVER_NAME |
+"pixy-lego" |
+
+
+public static final java.lang.String |
+MODE_ALL |
+"ALL" |
+
+
+public static final int |
+MODE_ALL_HEIGHT_VALUE_INDEX |
+5 |
+
+
+public static final int |
+MODE_ALL_SIG_HIGH_BYTE_VALUE_INDEX |
+1 |
+
+
+public static final int |
+MODE_ALL_SIG_LOW_BYTE_VALUE_INDEX |
+0 |
+
+
+public static final int |
+MODE_ALL_WIDTH_VALUE_INDEX |
+4 |
+
+
+public static final int |
+MODE_ALL_X_VALUE_INDEX |
+2 |
+
+
+public static final int |
+MODE_ALL_Y_VALUE_INDEX |
+3 |
+
+
+public static final int |
+MODE_SIG_COUNT_VALUE_INDEX |
+0 |
+
+
+public static final int |
+MODE_SIG_HEIGHT_VALUE_INDEX |
+4 |
+
+
+public static final int |
+MODE_SIG_WIDTH_VALUE_INDEX |
+3 |
+
+
+public static final int |
+MODE_SIG_X_VALUE_INDEX |
+1 |
+
+
+public static final int |
+MODE_SIG_Y_VALUE_INDEX |
+2 |
+
+
+public static final java.lang.String |
+MODE_SIG1 |
+"SIG1" |
+
+
+public static final java.lang.String |
+MODE_SIG2 |
+"SIG2" |
+
+
+public static final java.lang.String |
+MODE_SIG3 |
+"SIG3" |
+
+
+public static final java.lang.String |
+MODE_SIG4 |
+"SIG4" |
+
+
+public static final java.lang.String |
+MODE_SIG5 |
+"SIG5" |
+
+
+public static final java.lang.String |
+MODE_SIG6 |
+"SIG6" |
+
+
+public static final java.lang.String |
+MODE_SIG7 |
+"SIG7" |
+
+
+public static final java.lang.String |
+PREFIX_MODE_SIG |
+"SIG" |
+
+
+public static final java.lang.String |
+PRODUCT_ID |
+"Pixy" |
+
+
+public static final java.lang.String |
+VENDOR_ID |
+"Pixy" |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"di-dflex" |
+
+
+public static final java.lang.String |
+MODE_FLEX |
+"FLEX" |
+
+
+public static final int |
+MODE_FLEX_VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"ev3-analog" |
+
+
+public static final java.lang.String |
+MODE_ANALOG |
+"ANALOG" |
+
+
+public static final int |
+VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+DRIVER_NAME |
+"nxt-analog" |
+
+
+public static final java.lang.String |
+MODE_ANALOG_0 |
+"ANALOG-0" |
+
+
+public static final java.lang.String |
+MODE_ANALOG_1 |
+"ANALOG-1" |
+
+
+public static final int |
+VALUE_INDEX |
+0 |
+
| Modifier and Type | +Constant Field | +Value | +
|---|---|---|
+
+public static final java.lang.String |
+SYSTEM_CLASS_PATH |
+"/sys/class/" |
+
The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+Each annotation type has its own separate page with the following sections:
+Each enum has its own separate page with the following sections:
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+These links take you to the next or previous class, interface, package, or related page.
+These links show and hide the HTML frames. All pages are available with or without frames.
+The All Classes link shows all classes and interfaces except non-static nested types.
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+The Constant Field Values page lists the static final fields and their values.
+ALL Mode - AllALL Mode - Height Sysfs value indexALL Mode - Signature high byte Sysfs value indexALL Mode - Signature low byte Sysfs value indexALL Mode - Width Sysfs value indexALL Mode - X Sysfs value indexALL Mode - Y Sysfs value indexANALOG Mode - Raw analog valueANALOG-0 Mode - Raw analog valueANALOG-1 Mode - Raw analog value, Pin 5 highFLEX Mode - FlexFLEX Mode - Flex Sysfs value indexSIG1 Mode - Signature #1SIG2 Mode - Signature #2SIG3 Mode - Signature #3SIG4 Mode - Signature #4SIG5 Mode - Signature #5SIG6 Mode - Signature #6SIG7 Mode - Signature #7SIG[N] Mode (All signature modes) - Count Sysfs value indexSIG[N] Mode (All signature modes) - Height Sysfs value indexSIG[N] Mode (All signature modes) - Width Sysfs value indexSIG[N] Mode (All signature modes) - X Sysfs value indexSIG[N] Mode (All signature modes) - Y Sysfs value indexALL.ModeAll instance for communication.SIG[N], where [N] is the integer parameter specifiedModeSig instance for communication.SIG1ModeSig instance for communication.SIG2ModeSig instance for communication.SIG3ModeSig instance for communication.SIG4ModeSig instance for communication.SIG5ModeSig instance for communication.SIG6ModeSig instance for communication.SIG7ModeSig instance for communication.SIG[N], where SIG is the prefix.ANALOG Mode - Raw analog valueANALOG-0 Mode - Raw analog valueANALOG-1 Mode - Raw analog value, Pin 5 highfloat commandreset commandrun commandrun-direct commandrun-direct commandrun-forever commandrun-forever commandrun-timed commandrun-timed commandrun-to-abs-pos commandrun-to-rel-pos commandstop commandstop commandmax_voltage property namemeasured_current property namemeasured_voltage property namemin_voltage property nameaddress property nameaddress property nameaddress property namebrightness property namecommand property namecommand property namecommand property namecommands property namecommands property namecommands property namecount_per_m property namecount_per_m property namecount_per_rot property namedecimals property namedelay_off property namedelay_on property namedriver_name property namedriver_name property namedriver_name property nameduty_cycle property nameduty_cycle property nameduty_cycle_sp property nameduty_cycle_sp property namefw_version property namefull_travel_count property namefull_travel_count property namemax_brightness property namemode property namemodes property namenum_values property namepolarity property namepolarity property namepoll_ms property nameposition property nameposition_d property nameposition_i property nameposition_p property nameposition_sp property nameramp_down_sp property nameramp_down_sp property nameramp_up_sp property nameramp_up_sp property namespeed property namespeed_sp property namestate property namestate property namestop_action property namestop_action property namestop_actions property namestop_actions property nametime_sp property nametime_sp property nametrigger property nameunits property nametechnology property nametype property name-1 will be returned instead, use getCountPerMetre()-1 will be returned instead, use getCountPerMetre()public class EV3LibraryException
+extends java.lang.RuntimeException
+| Constructor and Description | +
|---|
EV3LibraryException() |
+
EV3LibraryException(java.lang.String message) |
+
EV3LibraryException(java.lang.String message,
+ java.lang.Throwable cause) |
+
EV3LibraryException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic EV3LibraryException()+
public EV3LibraryException(java.lang.String message)+
public EV3LibraryException(java.lang.String message, + java.lang.Throwable cause)+
public EV3LibraryException(java.lang.Throwable cause)+
public class InvalidButtonException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidButtonException() |
+
InvalidButtonException(java.lang.String message) |
+
InvalidButtonException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidButtonException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidButtonException()+
public InvalidButtonException(java.lang.String message)+
public InvalidButtonException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidButtonException(java.lang.Throwable cause)+
public class InvalidLEDException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidLEDException() |
+
InvalidLEDException(java.lang.String message) |
+
InvalidLEDException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidLEDException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidLEDException()+
public InvalidLEDException(java.lang.String message)+
public InvalidLEDException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidLEDException(java.lang.Throwable cause)+
public class InvalidModeException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidModeException() |
+
InvalidModeException(java.lang.String message) |
+
InvalidModeException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidModeException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidModeException()+
public InvalidModeException(java.lang.String message)+
public InvalidModeException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidModeException(java.lang.Throwable cause)+
public class InvalidMotorException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidMotorException() |
+
InvalidMotorException(java.lang.String message) |
+
InvalidMotorException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidMotorException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidMotorException()+
public InvalidMotorException(java.lang.String message)+
public InvalidMotorException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidMotorException(java.lang.Throwable cause)+
public class InvalidPortException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidPortException() |
+
InvalidPortException(java.lang.String message) |
+
InvalidPortException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidPortException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidPortException()+
public InvalidPortException(java.lang.String message)+
public InvalidPortException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidPortException(java.lang.Throwable cause)+
public class InvalidSensorException +extends EV3LibraryException+
| Constructor and Description | +
|---|
InvalidSensorException() |
+
InvalidSensorException(java.lang.String message) |
+
InvalidSensorException(java.lang.String message,
+ java.lang.Throwable cause) |
+
InvalidSensorException(java.lang.Throwable cause) |
+
addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toStringequals, getClass, hashCode, notify, notifyAll, wait, wait, waitpublic InvalidSensorException()+
public InvalidSensorException(java.lang.String message)+
public InvalidSensorException(java.lang.String message, + java.lang.Throwable cause)+
public InvalidSensorException(java.lang.Throwable cause)+
| Package | +Description | +
|---|---|
| org.ev3dev.exception | +
+ Exceptions that handles errors of I/O
+ |
+
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Modifier and Type | +Class and Description | +
|---|---|
class |
+InvalidButtonException
+This exception is thrown if:
++ + The specified button does not exist, or you are not using the int fields. |
+
class |
+InvalidLEDException
+This exception is thrown if:
++ LED specified LED does not exist. |
+
class |
+InvalidModeException
+This exception is thrown if your device is not using a correct mode for requested function.
+ |
+
class |
+InvalidMotorException
+This exception is thrown if:
++ LargeMotor selected port's driver isn't LargeMotor's driver. + MediumMotor selected port's driver isn't MediumMotor's driver. |
+
class |
+InvalidPortException
+This exception is thrown if:
++ LegoPort port is lower than 0 or higher than 7 + TachoMotor port number does not found. |
+
class |
+InvalidSensorException
+This exception is thrown if:
++ + 1. |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+LED.getAddress() |
+
abstract java.lang.String |
+Device.getAddress() |
+
java.lang.String |
+Device.getAttribute(java.lang.String property)
+Reads the property specified.
+ |
+
int |
+LED.getBrightness()
+Gets the brightness level.
+ |
+
int |
+LED.getDelay_Off()
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
int |
+LED.getDelay_On()
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
java.lang.String |
+LED.getDriverName() |
+
abstract java.lang.String |
+Device.getDriverName() |
+
int |
+LED.getMaxBrightness()
+Returns the maximum allowable brightness value.
+ |
+
static int |
+PowerSupply.getMaxVoltage()
+Get the maximum voltage
+ |
+
static int |
+PowerSupply.getMeasuredCurrent()
+The measured current that the battery is supplying (in microamps)
+ |
+
static int |
+PowerSupply.getMeasuredVoltage()
+The measured voltage that the battery is supplying (in microvolts)
+ |
+
static int |
+PowerSupply.getMinVoltage()
+Get the minimum voltage
+ |
+
static java.lang.String |
+PowerSupply.getTechnology()
+Get the technology of this power supply
+ |
+
java.lang.String |
+LED.getTrigger()
+Gets the led trigger.
+ |
+
java.lang.String[] |
+LED.getTriggers()
+Returns a list of available triggers.
+ |
+
java.lang.String |
+LED.getTriggersViaString()
+This function only returns a String, a spaced-array String.
++ Use this function to return a String Array directly: |
+
static java.lang.String |
+PowerSupply.getType()
+Get the type of this power supply
+ |
+
void |
+Device.setAttribute(java.lang.String property,
+ java.lang.String new_value)
+Writes the property specified.
+ |
+
void |
+LED.setBrightness(int brightness)
+Sets the brightness level.
+ |
+
void |
+LED.setDelay_Off(int delay_off)
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
void |
+LED.setDelay_On(int delay_on)
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
void |
+LED.setTrigger(java.lang.String selector)
+Sets the led trigger.
+ |
+
| Constructor and Description | +
|---|
Device(LegoPort port,
+ java.lang.String className,
+ java.lang.String classNamePrefix)
+Create a new device with a LegoPort, ClassName, classNamePrefix
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
void |
+ServoMotor.Float()
+Run to an absolute position specified by position_sp
+ and then stop using the command specified in stop_command
+ |
+
java.lang.String |
+ServoMotor.getAddress()
+Get the address of this motor.
+ |
+
java.lang.String |
+Motor.getAddress()
+Get the address of this motor.
+ |
+
java.lang.String |
+DCMotor.getAddress()
+Get the address of this motor.
+ |
+
java.lang.String[] |
+Motor.getCommands()
+Returns a list of commands that are supported by the motor controller.
+ |
+
java.lang.String[] |
+DCMotor.getCommands()
+Returns a list of commands that are supported by the motor controller.
+ |
+
int |
+FirgelliL1250Motor.getCountPerMetre()
+Returns the number of tacho counts in one meter of travel of the motor.
+ |
+
int |
+FirgelliL12100Motor.getCountPerMetre()
+Returns the number of tacho counts in one meter of travel of the motor.
+ |
+
int |
+Motor.getCountPerRot()
+Returns the number of tacho counts in one rotation of the motor.
+ |
+
int |
+FirgelliL1250Motor.getCountPerRot()
+Do not use this on Firgelli L12 50/100 Motors (Linear motors).
++ -1 will be returned instead, use getCountPerMetre() |
+
int |
+FirgelliL12100Motor.getCountPerRot()
+Do not use this on Firgelli L12 50/100 Motors (Linear motors).
++ -1 will be returned instead, use getCountPerMetre() |
+
java.lang.String |
+ServoMotor.getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
java.lang.String |
+Motor.getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
java.lang.String |
+DCMotor.getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
int |
+Motor.getDutyCycle()
+Returns the current duty cycle of the motor.
+ |
+
int |
+DCMotor.getDutyCycle()
+Returns the current duty cycle of the motor.
+ |
+
int |
+Motor.getDutyCycleSP()
+Writing sets the duty cycle setpoint.
+ |
+
int |
+DCMotor.getDutyCycleSP()
+Writing sets the duty cycle setpoint.
+ |
+
int |
+FirgelliL1250Motor.getFullTravelCount()
+Returns the number of tacho counts in the full travel of the motor.
+ |
+
int |
+FirgelliL12100Motor.getFullTravelCount()
+Returns the number of tacho counts in the full travel of the motor.
+ |
+
int |
+ServoMotor.getMaxPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp.
+ |
+
int |
+ServoMotor.getMidPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
+ |
+
int |
+ServoMotor.getMinPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
+ minimum (counter-clockwise) position_sp.
+ |
+
java.lang.String |
+ServoMotor.getPolarity()
+Sets the polarity of the servo.
+ |
+
java.lang.String |
+Motor.getPolarity()
+Sets the polarity of the motor.
+ |
+
java.lang.String |
+DCMotor.getPolarity()
+Sets the polarity of the motor.
+ |
+
int |
+Motor.getPosition_D()
+The derivative constant for the position PID.
+ |
+
int |
+Motor.getPosition_I()
+The integral constant for the position PID.
+ |
+
int |
+Motor.getPosition_P()
+The proportional constant for the position PID.
+ |
+
int |
+ServoMotor.getPosition_SP()
+Reading returns the current position_sp of the servo.
+ |
+
int |
+Motor.getPosition_SP()
+Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands.
+ |
+
int |
+Motor.getPosition()
+Returns the current position of the motor in pulses of the rotary encoder.
+ |
+
int |
+Motor.getRamp_Down_SP()
+Writing sets the ramp down setpoint.
+ |
+
int |
+DCMotor.getRamp_Down_SP()
+Writing sets the ramp down setpoint.
+ |
+
int |
+Motor.getRamp_Up_SP()
+Writing sets the ramp up setpoint.
+ |
+
int |
+DCMotor.getRamp_Up_SP()
+Writing sets the ramp up setpoint.
+ |
+
int |
+Motor.getSpeed_SP()
+Writing sets the target speed in tacho counts per second used when speed_regulation is on.
+ |
+
int |
+Motor.getSpeed()
+Returns the current motor speed in tacho counts per second.
+ |
+
java.lang.String[] |
+ServoMotor.getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String[] |
+Motor.getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String[] |
+DCMotor.getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String |
+ServoMotor.getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String |
+Motor.getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String |
+DCMotor.getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String |
+Motor.getStopAction()
+Reading returns the current stop command.
+ |
+
java.lang.String |
+DCMotor.getStopAction()
+Reading returns the current stop command.
+ |
+
java.lang.String[] |
+DCMotor.getStopActions()
+Returns a list of stop modes supported by the motor controller.
+ |
+
java.lang.String |
+DCMotor.getStopActionsViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String[] |
+Motor.getStopCommands()
+Returns a list of stop modes supported by the motor controller.
+ |
+
java.lang.String |
+Motor.getStopCommandsViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
int |
+Motor.getTime_SP()
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
int |
+DCMotor.getTime_SP()
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+Motor.reset()
+Reset all of the motor parameter attributes to their default value.
+ |
+
void |
+ServoMotor.run()
+Setting to run will cause the servo to be driven to the position_sp set in the position_sp attribute.
+ |
+
void |
+Motor.runDirect()
+Run the motor at the duty cycle specified by duty_cycle_sp.
+ |
+
void |
+DCMotor.runDirect()
+Runs the motor at the duty cycle specified by duty_cycle_sp.
+ |
+
void |
+Motor.runForever()
+Cause the motor to run until another command is sent
+ |
+
void |
+DCMotor.runForever()
+Cause the motor to run until another command is sent
+ |
+
void |
+Motor.runTimed()
+Run the motor for the amount of time specified in time_sp
+ and then stop the motor using the command specified by
+ stop_command
+ |
+
void |
+DCMotor.runTimed()
+Run the motor for the amount of time specified in time_sp
+ and then stop the motor using the command specified by
+ stop_command
+ |
+
void |
+Motor.runToAbsPos()
+Run to an absolute position specified by position_sp
+ and then stop using the command specified in stop_command
+ |
+
void |
+Motor.runToRelPos()
+Run to a position relative to the current position value.
+ |
+
void |
+ServoMotor.sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+Motor.sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+DCMotor.sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+Motor.setDutyCycleSP(int sp)
+Writing sets the duty cycle setpoint.
+ |
+
void |
+DCMotor.setDutyCycleSP(int sp)
+Writing sets the duty cycle setpoint.
+ |
+
void |
+ServoMotor.setMaxPulse_SP(int max_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp.
+ |
+
void |
+ServoMotor.setMidPulse_SP(int mid_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
+ |
+
void |
+ServoMotor.setMinPulse_SP(int min_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
+ minimum (counter-clockwise) position_sp.
+ |
+
void |
+ServoMotor.setPolarity(java.lang.String polarity)
+Sets the polarity of the servo.
+ |
+
void |
+Motor.setPolarity(java.lang.String polarity)
+Sets the polarity of the motor.
+ |
+
void |
+DCMotor.setPolarity(java.lang.String polarity)
+Sets the polarity of the motor.
+ |
+
void |
+Motor.setPosition_D(int position_d)
+The derivative constant for the position PID.
+ |
+
void |
+Motor.setPosition_I(int position_i)
+The integral constant for the position PID.
+ |
+
void |
+Motor.setPosition_P(int position_p)
+The proportional constant for the position PID.
+ |
+
void |
+ServoMotor.setPosition_SP(int position_sp)
+Reading returns the current position_sp of the servo.
+ |
+
void |
+Motor.setPosition_SP(int position_sp)
+Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands.
+ |
+
void |
+Motor.setPosition(int position)
+Returns the current position of the motor in pulses of the rotary encoder.
+ |
+
void |
+Motor.setRamp_Down_SP(int ramp_down_sp)
+Writing sets the ramp down setpoint.
+ |
+
void |
+DCMotor.setRamp_Down_SP(int ramp_down_sp)
+Writing sets the ramp down setpoint.
+ |
+
void |
+Motor.setRamp_Up_SP(int ramp_up_sp)
+Writing sets the ramp up setpoint.
+ |
+
void |
+DCMotor.setRamp_Up_SP(int ramp_up_sp)
+Writing sets the ramp up setpoint.
+ |
+
void |
+ServoMotor.setRate_SP(int rate_sp)
+Sets the rate_sp at which the servo travels from 0 to 100.0% (half of the full range of the servo).
+ |
+
void |
+Motor.setSpeed_SP(int speed_sp)
+Writing sets the target speed in tacho counts per second used when speed_regulation is on.
+ |
+
void |
+Motor.setStopAction(java.lang.String stop_action)
+Reading returns the current stop command.
+ |
+
void |
+DCMotor.setStopAction(java.lang.String stop_command)
+Reading returns the current stop command.
+ |
+
void |
+Motor.setTime_SP(int time_sp)
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+DCMotor.setTime_SP(int time_sp)
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+Motor.stop()
+Stop any of the run commands before they are complete using the command specified by stop_command.
+ |
+
void |
+DCMotor.stop()
+Stop any of the run commands before they are complete using the command specified by stop_command.
+ |
+
| Constructor and Description | +
|---|
DCMotor(LegoPort port)
+Creates a new DC motor object.
+ |
+
FirgelliL12100Motor(int portField) |
+
FirgelliL12100Motor(LegoPort port) |
+
FirgelliL1250Motor(int portField) |
+
FirgelliL1250Motor(LegoPort port) |
+
Motor(int portField)
+Creates a new motor object.
+ |
+
Motor(LegoPort port)
+Creates a new motor object.
+ |
+
Motor(LegoPort port,
+ java.lang.String class_name_prefix)
+Creates a new motor object.
+ |
+
ServoMotor(LegoPort port)
+Creates a new motor object.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+LegoPort.getAddress()
+Returns the name of the port.
+ |
+
java.lang.String |
+LegoPort.getDriverName()
+Returns the name of the driver that loaded this device.
+ |
+
java.lang.String |
+LegoPort.getMode()
+Reading returns the currently selected mode.
+ |
+
java.lang.String[] |
+LegoPort.getModes()
+Returns a list of the available modes of the port.
+ |
+
java.lang.String |
+LegoPort.getStatus()
+In most cases, reading status will return the same value as mode.
+ |
+
void |
+LegoPort.setDevice(java.lang.String driver)
+For modes that support it, writing the name of a driver will cause a new device to be registered for that driver and
+ attached to this port.
+ |
+
void |
+LegoPort.setMode(java.lang.String mode)
+Reading returns the currently selected mode.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+Sensor.getAddress()
+Returns the name of the port that the sensor is connected to, e.g.
+ |
+
float |
+LightSensor.getAmbientLightIntensity()
+A measurement of the ambient light intensity, as a percentage.
+ |
+
int |
+ColorSensor.getAmbientLightIntensity()
+Ambient light intensity.
+ |
+
int |
+GyroSensor.getAngle()
+The number of degrees that the sensor has been rotated since it was put into this mode.
+ |
+
int |
+ColorSensor.getColor()
+Color detected by the sensor, categorized by overall value.
+ |
+
java.lang.String[] |
+Sensor.getCommands()
+Returns a list of the valid commands for the sensor.
+ |
+
java.lang.String |
+Sensor.getCommandsViaString()
+This function returns a String instead of a String Array
++ Use this function to return a String Array directly: |
+
int |
+Sensor.getDecimals()
+Returns the number of decimal places for the values in the value[N] attributes of the current mode.
+ |
+
float |
+UltrasonicSensor.getDistanceCentimeters()
+Measurement of the distance detected by the sensor, in centimeters.
+ |
+
float |
+UltrasonicSensor.getDistanceInches()
+Measurement of the distance detected by the sensor, in inches.
+ |
+
java.lang.String |
+Sensor.getDriverName()
+Returns the name of the sensor device/driver.
+ |
+
java.lang.String |
+I2CSensor.getFirmwareVersion()
+Returns the firmware version of the sensor if available.
+ |
+
java.lang.String |
+Sensor.getMode()
+Returns the current mode.
+ |
+
java.lang.String[] |
+Sensor.getModes()
+Returns a list of the valid modes for the sensor.
+ |
+
java.lang.String |
+Sensor.getModesViaString()
+This function returns a String instead of a array.
++ Use this function to return a String Array directly: |
+
int |
+Sensor.getNumValues()
+Returns the number of value[N] attributes that will return a valid value for the current mode.
+ |
+
int |
+I2CSensor.getPollMs()
+Returns the polling period of the sensor in milliseconds.
+ |
+
int |
+InfraredSensor.getProximity()
+A measurement of the distance between the sensor and the remote, as a percentage.
+ |
+
int |
+GyroSensor.getRate()
+The rate at which the sensor is rotating, in degrees/second.
+ |
+
float |
+LightSensor.getReflectedLightIntensity()
+A measurement of the reflected light intensity, as a percentage.
+ |
+
int |
+ColorSensor.getReflectedLightIntensity()
+Reflected light intensity as a percentage.
+ |
+
int |
+ColorSensor.getRGB_Blue()
+Blue component of the detected color, in the range 0-1020
+ |
+
int |
+ColorSensor.getRGB_Green()
+Green component of the detected color, in the range 0-1020
+ |
+
int |
+ColorSensor.getRGB_Red()
+Red component of the detected color, in the range 0-1020
+ |
+
float |
+SoundSensor.getSoundPressure()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
float |
+SoundSensor.getSoundPressureLow()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
java.lang.String |
+Sensor.getUnits()
+Returns the units of the measured value for the current mode.
+ |
+
boolean |
+UltrasonicSensor.isOtherSensorPresent()
+Value indicating whether another ultrasonic sensor could be heard nearby.
+ |
+
boolean |
+TouchSensor.isPressed()
+A boolean indicating whether the current touch sensor is being pressed.
+ |
+
void |
+Sensor.sendCommand(java.lang.String command)
+Generic method to send commands to the sensor controller.
+ |
+
void |
+Sensor.setMode(java.lang.String mode)
+Sets the current mode.
+ |
+
void |
+I2CSensor.setPollMs(int ms)
+Sets the polling period of the sensor in milliseconds.
+ |
+
| Constructor and Description | +
|---|
ColorSensor(LegoPort port)
+Creates a new ColorSensor instance.
+ |
+
GyroSensor(LegoPort port)
+Creates a new GyroSensor instance.
+ |
+
I2CSensor(LegoPort port)
+Creates a new I2CSensor instance.
+ |
+
InfraredSensor(LegoPort port)
+Creates a new InfraredSensor instance.
+ |
+
LightSensor(LegoPort port)
+Creates a new LightSensor instance.
+ |
+
Sensor(LegoPort port)
+Creates a new Sensor instance using a LegoPort
+ |
+
SoundSensor(LegoPort port)
+Creates a new SoundSensor instance.
+ |
+
TouchSensor(LegoPort port)
+Creates a new TouchSensor instance.
+ |
+
UltrasonicSensor(LegoPort port)
+Creates a new UltrasonicSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
byte |
+PixyCmucam5.ModeSig.getCount()
+Get the count
+ |
+
int |
+PixyCmucam5.ModeAll.getHeight()
+Get the height
+ |
+
int |
+PixyCmucam5.ModeSig.getHeight()
+Get the height
+ |
+
byte |
+PixyCmucam5.ModeAll.getSignatureHighByte()
+Get the signature high byte
+ |
+
byte |
+PixyCmucam5.ModeAll.getSignatureLowByte()
+Get the signature low byte
+ |
+
int |
+PixyCmucam5.ModeAll.getWidth()
+Get the width
+ |
+
int |
+PixyCmucam5.ModeSig.getWidth()
+Get the width
+ |
+
int |
+PixyCmucam5.ModeAll.getX()
+Get the X point
+ |
+
int |
+PixyCmucam5.ModeSig.getX()
+Get the X point
+ |
+
int |
+PixyCmucam5.ModeAll.getY()
+Get the Y point
+ |
+
int |
+PixyCmucam5.ModeSig.getY()
+Get the Y point
+ |
+
| Constructor and Description | +
|---|
PixyCmucam5(LegoPort port)
+Creates a new Pixy Cmucam 5 instnace
+ |
+
| Constructor and Description | +
|---|
DflexSensor(LegoPort port) |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+NXTAnalogSensor.getRawValue()
+Returns the raw analog voltage / value (0-5000).
++ Both mode uses the same value index (value0) + + This function does not calculate decimal places. |
+
int |
+EV3AnalogSensor.getRawValue()
+Returns the raw analog voltage / value (0-5000).
++ + This function does not calculate decimal places. |
+
float |
+NXTAnalogSensor.getValue()
+Returns the raw analog voltage / value (0-5000), and with decimal places
++ Both mode uses the same value index (value0) |
+
float |
+EV3AnalogSensor.getValue()
+Returns the raw analog voltage / value (0-5000), and with decimal places
+ |
+
void |
+EV3AnalogSensor.setModeAnalog()
+Set mode as
+ANALOG Mode - Raw analog value |
+
void |
+NXTAnalogSensor.setModeAnalog0()
+Set mode as
+ANALOG-0 Mode - Raw analog value |
+
void |
+NXTAnalogSensor.setModeAnalog1()
+Set mode as
+ANALOG-1 Mode - Raw analog value, Pin 5 high |
+
| Constructor and Description | +
|---|
EV3AnalogSensor(LegoPort port,
+ java.lang.String typeId)
+Creates a new EV3 analog sensor
+ |
+
NXTAnalogSensor(LegoPort port)
+Creates a new NXT analog sensor
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| Constructor and Description | +
|---|
Button(int button)
+Creates a new Button instance with the Button specified.
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| Constructor and Description | +
|---|
LED(int leftRightField,
+ int colorField)
+Creates a new LED instance.
+ |
+
LED(java.lang.String ledName)
+This function is for advanced users.
++ Use this function for basic users: |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
float |
+LightSensor.getAmbientLightIntensity()
+A measurement of the ambient light intensity, as a percentage.
+ |
+
int |
+ColorSensor.getAmbientLightIntensity()
+Ambient light intensity.
+ |
+
int |
+GyroSensor.getAngle()
+The number of degrees that the sensor has been rotated since it was put into this mode.
+ |
+
int |
+ColorSensor.getColor()
+Color detected by the sensor, categorized by overall value.
+ |
+
float |
+UltrasonicSensor.getDistanceCentimeters()
+Measurement of the distance detected by the sensor, in centimeters.
+ |
+
float |
+UltrasonicSensor.getDistanceInches()
+Measurement of the distance detected by the sensor, in inches.
+ |
+
int |
+InfraredSensor.getProximity()
+A measurement of the distance between the sensor and the remote, as a percentage.
+ |
+
int |
+GyroSensor.getRate()
+The rate at which the sensor is rotating, in degrees/second.
+ |
+
float |
+LightSensor.getReflectedLightIntensity()
+A measurement of the reflected light intensity, as a percentage.
+ |
+
int |
+ColorSensor.getReflectedLightIntensity()
+Reflected light intensity as a percentage.
+ |
+
int |
+ColorSensor.getRGB_Blue()
+Blue component of the detected color, in the range 0-1020
+ |
+
int |
+ColorSensor.getRGB_Green()
+Green component of the detected color, in the range 0-1020
+ |
+
int |
+ColorSensor.getRGB_Red()
+Red component of the detected color, in the range 0-1020
+ |
+
float |
+SoundSensor.getSoundPressure()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
float |
+SoundSensor.getSoundPressureLow()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
boolean |
+UltrasonicSensor.isOtherSensorPresent()
+Value indicating whether another ultrasonic sensor could be heard nearby.
+ |
+
boolean |
+TouchSensor.isPressed()
+A boolean indicating whether the current touch sensor is being pressed.
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| Constructor and Description | +
|---|
LargeMotor(LegoPort port) |
+
MediumMotor(LegoPort port) |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| Constructor and Description | +
|---|
LargeMotor(int portField) |
+
LargeMotor(LegoPort port) |
+
MediumMotor(int portField) |
+
MediumMotor(LegoPort port) |
+
NXTMotor(int portField) |
+
NXTMotor(LegoPort port) |
+
| Constructor and Description | +
|---|
LegoPort(int port)
+Creates a new LegoPort object.
+ |
+
MotorPort(int port)
+Creates a new motor port object.
++ + NOTE: MotorPort only accepts motors ports. |
+
SensorPort(int port)
+Creates a new sensor port object.
++ + NOTE: SensorPort only accepts sensor ports. |
+
| Constructor and Description | +
|---|
GyroSensor(LegoPort port)
+Creates a new GyroSensor instance.
+ |
+
I2CSensor(LegoPort port)
+Creates a new I2CSensor instance.
+ |
+
InfraredSensor(LegoPort port)
+Creates a new InfraredSensor instance.
+ |
+
LightSensor(LegoPort port)
+Creates a new LightSensor instance.
+ |
+
SoundSensor(LegoPort port)
+Creates a new SoundSensor instance.
+ |
+
TouchSensor(LegoPort port)
+Creates a new TouchSensor instance.
+ |
+
UltrasonicSensor(LegoPort port)
+Creates a new UltrasonicSensor instance.
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| Constructor and Description | +
|---|
GyroSensor(LegoPort port)
+Creates a new GyroSensor instance.
+ |
+
I2CSensor(LegoPort port)
+Creates a new I2CSensor instance.
+ |
+
InfraredSensor(LegoPort port)
+Creates a new InfraredSensor instance.
+ |
+
LightSensor(LegoPort port)
+Creates a new LightSensor instance.
+ |
+
SoundSensor(LegoPort port)
+Creates a new SoundSensor instance.
+ |
+
TouchSensor(LegoPort port)
+Creates a new TouchSensor instance.
+ |
+
UltrasonicSensor(LegoPort port)
+Creates a new UltrasonicSensor instance.
+ |
+
| Exception | +Description | +
|---|---|
| EV3LibraryException | +
+ This exception is thrown if something was invalid.
+ |
+
| InvalidButtonException | +
+ This exception is thrown if:
++ + The specified button does not exist, or you are not using the int fields. |
+
| InvalidLEDException | +
+ This exception is thrown if:
++ LED specified LED does not exist. |
+
| InvalidModeException | +
+ This exception is thrown if your device is not using a correct mode for requested function.
+ |
+
| InvalidMotorException | +
+ This exception is thrown if:
++ LargeMotor selected port's driver isn't LargeMotor's driver. + MediumMotor selected port's driver isn't MediumMotor's driver. |
+
| InvalidPortException | +
+ This exception is thrown if:
++ LegoPort port is lower than 0 or higher than 7 + TachoMotor port number does not found. |
+
| InvalidSensorException | +
+ This exception is thrown if:
++ + 1. |
+
| Package | +Description | +
|---|---|
| org.ev3dev.exception | +
+ Exceptions that handles errors of I/O
+ |
+
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| InvalidButtonException
+ This exception is thrown if:
++ + The specified button does not exist, or you are not using the int fields. |
+
| InvalidLEDException
+ This exception is thrown if:
++ LED specified LED does not exist. |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| InvalidMotorException
+ This exception is thrown if:
++ LargeMotor selected port's driver isn't LargeMotor's driver. + MediumMotor selected port's driver isn't MediumMotor's driver. |
+
| InvalidPortException
+ This exception is thrown if:
++ LegoPort port is lower than 0 or higher than 7 + TachoMotor port number does not found. |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| InvalidPortException
+ This exception is thrown if:
++ LegoPort port is lower than 0 or higher than 7 + TachoMotor port number does not found. |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| InvalidModeException
+ This exception is thrown if your device is not using a correct mode for requested function.
+ |
+
| InvalidPortException
+ This exception is thrown if:
++ LegoPort port is lower than 0 or higher than 7 + TachoMotor port number does not found. |
+
| InvalidSensorException
+ This exception is thrown if:
++ + 1. |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
| Class and Description | +
|---|
| EV3LibraryException
+ This exception is thrown if something was invalid.
+ |
+
public class Button
+extends java.lang.Object
+| Modifier and Type | +Field and Description | +
|---|---|
static int |
+BUTTON_BACKSPACE |
+
static int |
+BUTTON_DOWN |
+
static int |
+BUTTON_ENTER |
+
static int |
+BUTTON_LEFT |
+
static int |
+BUTTON_RIGHT |
+
static int |
+BUTTON_UP |
+
static java.lang.String |
+SYSTEM_EVENT_PATH |
+
| Constructor and Description | +
|---|
Button(int button)
+Creates a new Button instance with the Button specified.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
boolean |
+isPressed()
+Returns whether the button is pressed.
+ |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSTEM_EVENT_PATH+
public static final int BUTTON_UP+
public static final int BUTTON_DOWN+
public static final int BUTTON_LEFT+
public static final int BUTTON_RIGHT+
public static final int BUTTON_ENTER+
public static final int BUTTON_BACKSPACE+
public Button(int button) + throws InvalidButtonException+
button - The Integer field of the Button classInvalidButtonException - If the specified button isn't a valid button.public abstract class Device
+extends java.lang.Object
+| Constructor and Description | +
|---|
Device(LegoPort port,
+ java.lang.String className,
+ java.lang.String classNamePrefix)
+Create a new device with a LegoPort, ClassName, classNamePrefix
+ |
+
Device(java.lang.String className)
+Generic way to create a device
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
abstract java.lang.String |
+getAddress() |
+
java.lang.String |
+getAttribute(java.lang.String property)
+Reads the property specified.
+ |
+
java.lang.String |
+getClassFullName()
+Get the full filename (not prefix) inside the Sysfs class of this Device.
+ |
+
java.lang.String |
+getClassNamePrefix()
+Get the filename prefix inside the Sysfs class (prefix (e.g.
+ |
+
abstract java.lang.String |
+getDriverName() |
+
LegoPort |
+getPort()
+Returns the LegoPort connected with this Device
+ |
+
boolean |
+isConnected()
+If a valid device is found while enumerating the ports, the connected variable is set to true (by default, it should be false).
+ |
+
void |
+setAttribute(java.lang.String property,
+ java.lang.String new_value)
+Writes the property specified.
+ |
+
void |
+setClassFullname(java.lang.String classFullName)
+Set the Sysfs class full name (including prefix if any)
+ |
+
void |
+setClassName(java.lang.String className)
+Set the Sysfs class name (location) of this Device
+ |
+
void |
+setClassNamePrefix(java.lang.String classNamePrefix)
+Set the filename prefix inside the Sysfs class (prefix (e.g.
+ |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic Device(java.lang.String className)+
className - The Sysfs Class namepublic Device(LegoPort port, + java.lang.String className, + java.lang.String classNamePrefix) + throws EV3LibraryException+
port - A LegoPort delared before.className - Sysfs class nameclassNamePrefix - The filename prefix inside the "Sysfs class" (e.g. motor[n], which "motor" is the prefix)EV3LibraryException - If I/O goes wrongpublic abstract java.lang.String getAddress() + throws EV3LibraryException+
EV3LibraryExceptionpublic abstract java.lang.String getDriverName() + throws EV3LibraryException+
EV3LibraryExceptionpublic void setClassName(java.lang.String className)+
className - The Sysfs class name located in /sys/classpublic void setClassFullname(java.lang.String classFullName)+
classFullName - The Sysfs class name located in /sys/class/[className]public void setClassNamePrefix(java.lang.String classNamePrefix)+
classNamePrefix - The filename inside the Sysfs class (e.g. "/sys/class/motor/motor0" motor is a prefix)public boolean isConnected()+
public LegoPort getPort()+
public java.lang.String getClassNamePrefix()+
public java.lang.String getClassFullName()+
checkIsConnected() methodpublic final java.lang.String getAttribute(java.lang.String property) + throws EV3LibraryException+
property - The property nameEV3LibraryExceptionpublic final void setAttribute(java.lang.String property, + java.lang.String new_value) + throws EV3LibraryException+
property - The property namenew_value - The new value of the propertyEV3LibraryExceptionpublic class LED +extends Device+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static int |
+GREEN
+Green color.
+ |
+
static int |
+LEFT
+Left EV3 Button
+ |
+
static int |
+RED
+Red color.
+ |
+
static int |
+RIGHT
+Right EV3 Button
+ |
+
static java.lang.String |
+SYSFS_PROPERTY_BRIGHTNESS
+The Sysfs class's
+brightness property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DELAY_OFF
+The Sysfs class's
+delay_off property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DELAY_ON
+The Sysfs class's
+delay_on property name |
+
static java.lang.String |
+SYSFS_PROPERTY_MAX_BRIGHTNESS
+The Sysfs class's
+max_brightness property name |
+
static java.lang.String |
+SYSFS_PROPERTY_TRIGGER
+The Sysfs class's
+trigger property name |
+
| Constructor and Description | +
|---|
LED(int leftRightField,
+ int colorField)
+Creates a new LED instance.
+ |
+
LED(java.lang.String ledName)
+This function is for advanced users.
++ Use this function for basic users: |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getAddress() |
+
int |
+getBrightness()
+Gets the brightness level.
+ |
+
int |
+getDelay_Off()
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
int |
+getDelay_On()
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
java.lang.String |
+getDriverName() |
+
int |
+getMaxBrightness()
+Returns the maximum allowable brightness value.
+ |
+
java.lang.String |
+getTrigger()
+Gets the led trigger.
+ |
+
java.lang.String[] |
+getTriggers()
+Returns a list of available triggers.
+ |
+
java.lang.String |
+getTriggersViaString()
+This function only returns a String, a spaced-array String.
++ Use this function to return a String Array directly: |
+
void |
+setBrightness(int brightness)
+Sets the brightness level.
+ |
+
void |
+setDelay_Off(int delay_off)
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
void |
+setDelay_On(int delay_on)
+The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
+ |
+
void |
+setTrigger(java.lang.String selector)
+Sets the led trigger.
+ |
+
getAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_MAX_BRIGHTNESS+
max_brightness property namepublic static final java.lang.String SYSFS_PROPERTY_BRIGHTNESS+
brightness property namepublic static final java.lang.String SYSFS_PROPERTY_TRIGGER+
trigger property namepublic static final java.lang.String SYSFS_PROPERTY_DELAY_ON+
delay_on property namepublic static final java.lang.String SYSFS_PROPERTY_DELAY_OFF+
delay_off property namepublic static final int LEFT+
public static final int RIGHT+
public static final int GREEN+
public static final int RED+
public static final java.lang.String CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public LED(int leftRightField, + int colorField) + throws InvalidLEDException+
leftRightField - The integer field from LED class (e.g. Button.LEFT, Button.RIGHT)colorField - The integer field from LED class (e.g. Button.GREEN, Button.RED)InvalidLEDException - If the specified LEFT RIGHT field or color field isn't valid.public LED(java.lang.String ledName) + throws InvalidLEDException+
+ LED led = new LED(Button.LEFT, Button.GREEN); ++ Creates a new LED instance directly with a
ledNameledName - LED Name that exists in /sys/class/ledsInvalidLEDException - If the specified ledName does not existpublic int getMaxBrightness() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getBrightness() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setBrightness(int brightness) + throws EV3LibraryException+
brightness - The brightness levelEV3LibraryException - If I/O goes wrongpublic java.lang.String getTriggersViaString() + throws EV3LibraryException+
+ getTriggers() ++ Returns a list of available triggers.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getTriggers() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getTrigger() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setTrigger(java.lang.String selector) + throws EV3LibraryException+
selector - The LED trigger that listed using getTriggers()EV3LibraryException - If I/O goes wrongpublic int getDelay_On() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getDelay_Off() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setDelay_On(int delay_on) + throws EV3LibraryException+
delay_on - The Delay_On Value in millisecondsEV3LibraryException - If I/O goes wrongpublic void setDelay_Off(int delay_off) + throws EV3LibraryException+
delay_off - The Delay_Off Value in millisecondsEV3LibraryException - If I/O goes wrongpublic java.lang.String getAddress() + throws EV3LibraryException+
getAddress in class DeviceEV3LibraryExceptionpublic java.lang.String getDriverName() + throws EV3LibraryException+
getDriverName in class DeviceEV3LibraryExceptionpublic class PowerSupply
+extends java.lang.Object
+| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+POWER_SUPPLY_CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static java.lang.String |
+SYSFS_MAX_VOLTAGE
+The Sysfs class's
+max_voltage property name |
+
static java.lang.String |
+SYSFS_MEASURED_CURRENT
+The Sysfs class's
+measured_current property name |
+
static java.lang.String |
+SYSFS_MEASURED_VOLTAGE
+The Sysfs class's
+measured_voltage property name |
+
static java.lang.String |
+SYSFS_MIN_VOLTAGE
+The Sysfs class's
+min_voltage property name |
+
static java.lang.String |
+SYSFS_TECHNOLOGY
+The Sysfs class's
+technology property name |
+
static java.lang.String |
+SYSFS_TYPE
+The Sysfs class's
+type property name |
+
| Constructor and Description | +
|---|
PowerSupply() |
+
| Modifier and Type | +Method and Description | +
|---|---|
static int |
+getMaxVoltage()
+Get the maximum voltage
+ |
+
static int |
+getMeasuredCurrent()
+The measured current that the battery is supplying (in microamps)
+ |
+
static int |
+getMeasuredVoltage()
+The measured voltage that the battery is supplying (in microvolts)
+ |
+
static int |
+getMinVoltage()
+Get the minimum voltage
+ |
+
static java.lang.String |
+getTechnology()
+Get the technology of this power supply
+ |
+
static java.lang.String |
+getType()
+Get the type of this power supply
+ |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_MEASURED_CURRENT+
measured_current property namepublic static final java.lang.String SYSFS_MEASURED_VOLTAGE+
measured_voltage property namepublic static final java.lang.String SYSFS_MAX_VOLTAGE+
max_voltage property namepublic static final java.lang.String SYSFS_MIN_VOLTAGE+
min_voltage property namepublic static final java.lang.String SYSFS_TECHNOLOGY+
technology property namepublic static final java.lang.String SYSFS_TYPE+
type property namepublic static final java.lang.String POWER_SUPPLY_CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public static int getMeasuredCurrent() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic static int getMeasuredVoltage() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic static int getMaxVoltage() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic static int getMinVoltage() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic static java.lang.String getTechnology() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic static java.lang.String getType() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrong| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Modifier and Type | +Class and Description | +
|---|---|
class |
+LED
+Any device controlled by the generic LED driver.
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+DCMotor
+The DC motor class provides a uniform interface for using regular DC motors
+ with no fancy controls or feedback.
+ |
+
class |
+FirgelliL12100Motor |
+
class |
+FirgelliL1250Motor |
+
class |
+LargeMotor |
+
class |
+MediumMotor |
+
class |
+Motor
+The motor class provides a uniform interface for using motors with positional and directional feedback such as the EV3 and NXT motors.
+ |
+
class |
+NXTMotor |
+
class |
+ServoMotor
+The servo motor class provides a uniform interface for using hobby type servo motors.
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+ColorSensor
+LEGO EV3 color sensor.
+ |
+
class |
+GyroSensor
+LEGO EV3 gyro sensor.
+ |
+
class |
+I2CSensor
+A generic interface to control I2C-type EV3 sensors.
+ |
+
class |
+InfraredSensor
+LEGO EV3 infrared sensor.
+ |
+
class |
+LightSensor
+LEGO NXT Light Sensor
+ |
+
class |
+Sensor
+The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
class |
+SoundSensor
+LEGO NXT Sound Sensor
+ |
+
class |
+TouchSensor |
+
class |
+UltrasonicSensor |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+PixyCmucam5
+Pixy Cmucam 5 for Lego
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+DflexSensor |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+EV3AnalogSensor
+Generic EV3 Analog Sensor driver
+ |
+
class |
+NXTAnalogSensor
+Generic NXT Analog Sensor driver
+ |
+
public class DCMotor +extends Device+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static java.lang.String |
+CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_DIRECT
+The Sysfs class's
+run-direct command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_FOREVER
+The Sysfs class's
+run-forever command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_TIMED
+The Sysfs class's
+run-timed command |
+
static java.lang.String |
+SYSFS_COMMAND_STOP
+The Sysfs class's
+stop command |
+
static java.lang.String |
+SYSFS_PROPERTY_ADDRESS
+The Sysfs class's
+address property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMAND
+The Sysfs class's
+command property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMANDS
+The Sysfs class's
+commands property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME
+The Sysfs class's
+driver_name property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE
+The Sysfs class's
+duty_cycle property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE_SP
+The Sysfs class's
+duty_cycle_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POLARITY
+The Sysfs class's
+polarity property name |
+
static java.lang.String |
+SYSFS_PROPERTY_RAMP_DOWN_SP
+The Sysfs class's
+ramp_down_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_RAMP_UP_SP
+The Sysfs class's
+ramp_up_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STATE
+The Sysfs class's
+state property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STOP_ACTION
+The Sysfs class's
+stop_action property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STOP_ACTIONS
+The Sysfs class's
+stop_actions property name |
+
static java.lang.String |
+SYSFS_PROPERTY_TIME_SP
+The Sysfs class's
+time_sp property name |
+
| Constructor and Description | +
|---|
DCMotor(LegoPort port)
+Creates a new DC motor object.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getAddress()
+Get the address of this motor.
+ |
+
java.lang.String[] |
+getCommands()
+Returns a list of commands that are supported by the motor controller.
+ |
+
java.lang.String |
+getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
int |
+getDutyCycle()
+Returns the current duty cycle of the motor.
+ |
+
int |
+getDutyCycleSP()
+Writing sets the duty cycle setpoint.
+ |
+
java.lang.String |
+getPolarity()
+Sets the polarity of the motor.
+ |
+
int |
+getRamp_Down_SP()
+Writing sets the ramp down setpoint.
+ |
+
int |
+getRamp_Up_SP()
+Writing sets the ramp up setpoint.
+ |
+
java.lang.String[] |
+getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String |
+getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String |
+getStopAction()
+Reading returns the current stop command.
+ |
+
java.lang.String[] |
+getStopActions()
+Returns a list of stop modes supported by the motor controller.
+ |
+
java.lang.String |
+getStopActionsViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
int |
+getTime_SP()
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+runDirect()
+Runs the motor at the duty cycle specified by duty_cycle_sp.
+ |
+
void |
+runForever()
+Cause the motor to run until another command is sent
+ |
+
void |
+runTimed()
+Run the motor for the amount of time specified in time_sp
+ and then stop the motor using the command specified by
+ stop_command
+ |
+
void |
+sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+setDutyCycleSP(int sp)
+Writing sets the duty cycle setpoint.
+ |
+
void |
+setPolarity(java.lang.String polarity)
+Sets the polarity of the motor.
+ |
+
void |
+setRamp_Down_SP(int ramp_down_sp)
+Writing sets the ramp down setpoint.
+ |
+
void |
+setRamp_Up_SP(int ramp_up_sp)
+Writing sets the ramp up setpoint.
+ |
+
void |
+setStopAction(java.lang.String stop_command)
+Reading returns the current stop command.
+ |
+
void |
+setTime_SP(int time_sp)
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+stop()
+Stop any of the run commands before they are complete using the command specified by stop_command.
+ |
+
getAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_ADDRESS+
address property namepublic static final java.lang.String SYSFS_PROPERTY_COMMAND+
command property namepublic static final java.lang.String SYSFS_PROPERTY_COMMANDS+
commands property namepublic static final java.lang.String SYSFS_PROPERTY_DRIVER_NAME+
driver_name property namepublic static final java.lang.String SYSFS_PROPERTY_DUTY_CYCLE+
duty_cycle property namepublic static final java.lang.String SYSFS_PROPERTY_DUTY_CYCLE_SP+
duty_cycle_sp property namepublic static final java.lang.String SYSFS_PROPERTY_POLARITY+
polarity property namepublic static final java.lang.String SYSFS_PROPERTY_RAMP_UP_SP+
ramp_up_sp property namepublic static final java.lang.String SYSFS_PROPERTY_RAMP_DOWN_SP+
ramp_down_sp property namepublic static final java.lang.String SYSFS_PROPERTY_STATE+
state property namepublic static final java.lang.String SYSFS_PROPERTY_STOP_ACTION+
stop_action property namepublic static final java.lang.String SYSFS_PROPERTY_STOP_ACTIONS+
stop_actions property namepublic static final java.lang.String SYSFS_PROPERTY_TIME_SP+
time_sp property namepublic static final java.lang.String SYSFS_COMMAND_RUN_FOREVER+
run-forever commandpublic static final java.lang.String SYSFS_COMMAND_RUN_TIMED+
run-timed commandpublic static final java.lang.String SYSFS_COMMAND_RUN_DIRECT+
run-direct commandpublic static final java.lang.String SYSFS_COMMAND_STOP+
stop commandpublic static final java.lang.String CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public static final java.lang.String CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public DCMotor(LegoPort port) + throws EV3LibraryException+
port - LegoPortEV3LibraryException - If the LegoPort specified goes wrongpublic java.lang.String getAddress() + throws EV3LibraryException+
getAddress in class DeviceEV3LibraryException - If the motor doesn't exist or IO ERRORpublic void sendCommand(java.lang.String command) + throws EV3LibraryException+
command - Command that suits for the motor driverEV3LibraryException - If I/O goes wrongpublic void runForever() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void runTimed() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void runDirect() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void stop() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getCommands() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getDriverName() + throws EV3LibraryException+
getDriverName in class DeviceEV3LibraryException - If I/O goes wrongpublic int getDutyCycle() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getDutyCycleSP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setDutyCycleSP(int sp) + throws EV3LibraryException+
sp - PercentageEV3LibraryException - If I/O goes wrongpublic java.lang.String getPolarity() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPolarity(java.lang.String polarity) + throws EV3LibraryException+
polarity - The polarity of the motorEV3LibraryException - If I/O goes wrongpublic int getRamp_Up_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setRamp_Up_SP(int ramp_up_sp) + throws EV3LibraryException+
ramp_up_sp - The ramp-up set-pointEV3LibraryException - If I/O goes wrongpublic int getRamp_Down_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setRamp_Down_SP(int ramp_down_sp) + throws EV3LibraryException+
ramp_down_sp - The ramp-down set-pointEV3LibraryException - If I/O goes wrongpublic java.lang.String getStateViaString() + throws EV3LibraryException+
+ getState() ++ Reading returns a list of state flags. Possible flags are running, ramping holding and stalled.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getState() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getStopAction() + throws EV3LibraryException+
getStopActions()EV3LibraryException - If I/O goes wrongpublic void setStopAction(java.lang.String stop_command) + throws EV3LibraryException+
stop_command - A stop command that listed using getStopCommands()EV3LibraryException - If I/O goes wrongpublic java.lang.String getStopActionsViaString() + throws EV3LibraryException+
+ getStopCommands() ++ Returns a list of stop modes supported by the motor controller. Possible values are coast, + brake and hold. coast means that power will be removed from the motor and it will freely + coast to a stop. brake means that power will be removed from the motor and a passive + electrical load will be placed on the motor. This is usually done by shorting the motor + terminals together. This load will absorb the energy from the rotation of the motors + and cause the motor to stop more quickly than coasting. hold does not remove power from + the motor. Instead it actively try to hold the motor at the current position. + If an external force tries to turn the motor, the motor will push back to maintain its position.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getStopActions() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getTime_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setTime_SP(int time_sp) + throws EV3LibraryException+
time_sp - Amount of time in msEV3LibraryException - If I/O goes wrongpublic class FirgelliL12100Motor +extends Motor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME_100MM
+The driver name for the L12 EV3 100mm by Actuonix
+ |
+
static java.lang.String |
+LINEAR_MOTOR_CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_M
+The Sysfs class's
+count_per_m property name |
+
static java.lang.String |
+SYSFS_PROPERTY_FULL_TRAVEL_COUNT
+The Sysfs class's
+full_travel_count property name |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_COMMAND_RESET, SYSFS_COMMAND_RUN_DIRECT, SYSFS_COMMAND_RUN_FOREVER, SYSFS_COMMAND_RUN_TIMED, SYSFS_COMMAND_RUN_TO_ABS_POS, SYSFS_COMMAND_RUN_TO_REL_POS, SYSFS_COMMAND_STOP, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_COUNT_PER_ROT, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_DUTY_CYCLE, SYSFS_PROPERTY_DUTY_CYCLE_SP, SYSFS_PROPERTY_POLARITY, SYSFS_PROPERTY_POSITION, SYSFS_PROPERTY_POSITION_D, SYSFS_PROPERTY_POSITION_I, SYSFS_PROPERTY_POSITION_P, SYSFS_PROPERTY_POSITION_SP, SYSFS_PROPERTY_RAMP_DOWN_SP, SYSFS_PROPERTY_RAMP_UP_SP, SYSFS_PROPERTY_SPEED, SYSFS_PROPERTY_SPEED_SP, SYSFS_PROPERTY_STATE, SYSFS_PROPERTY_STOP_ACTION, SYSFS_PROPERTY_STOP_ACTIONS, SYSFS_PROPERTY_TIME_SP| Constructor and Description | +
|---|
FirgelliL12100Motor(int portField) |
+
FirgelliL12100Motor(LegoPort port) |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getCountPerMetre()
+Returns the number of tacho counts in one meter of travel of the motor.
+ |
+
int |
+getCountPerRot()
+Do not use this on Firgelli L12 50/100 Motors (Linear motors).
++ -1 will be returned instead, use getCountPerMetre() |
+
int |
+getFullTravelCount()
+Returns the number of tacho counts in the full travel of the motor.
+ |
+
getAddress, getCommands, getDriverName, getDutyCycle, getDutyCycleSP, getPolarity, getPosition_D, getPosition_I, getPosition_P, getPosition_SP, getPosition, getRamp_Down_SP, getRamp_Up_SP, getSpeed_SP, getSpeed, getState, getStateViaString, getStopAction, getStopCommands, getStopCommandsViaString, getTime_SP, reset, runDirect, runForever, runTimed, runToAbsPos, runToRelPos, sendCommand, setDutyCycleSP, setPolarity, setPosition_D, setPosition_I, setPosition_P, setPosition_SP, setPosition, setRamp_Down_SP, setRamp_Up_SP, setSpeed_SP, setStopAction, setTime_SP, stopgetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_COUNT_PER_M+
count_per_m property namepublic static final java.lang.String SYSFS_PROPERTY_FULL_TRAVEL_COUNT+
full_travel_count property namepublic static final java.lang.String LINEAR_MOTOR_CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public static final java.lang.String DRIVER_NAME_100MM+
public FirgelliL12100Motor(int portField) + throws EV3LibraryException+
EV3LibraryExceptionpublic FirgelliL12100Motor(LegoPort port) + throws EV3LibraryException+
EV3LibraryExceptionpublic int getCountPerRot() + throws EV3LibraryException+
-1 will be returned instead, use getCountPerMetre()getCountPerRot in class MotorEV3LibraryException - If I/O goes wrongpublic int getCountPerMetre() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getFullTravelCount() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class FirgelliL1250Motor +extends Motor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME_50MM
+The driver name for the L12 EV3 50mm by Actuonix
+ |
+
static java.lang.String |
+LINEAR_MOTOR_CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_M
+The Sysfs class's
+count_per_m property name |
+
static java.lang.String |
+SYSFS_PROPERTY_FULL_TRAVEL_COUNT
+The Sysfs class's
+full_travel_count property name |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_COMMAND_RESET, SYSFS_COMMAND_RUN_DIRECT, SYSFS_COMMAND_RUN_FOREVER, SYSFS_COMMAND_RUN_TIMED, SYSFS_COMMAND_RUN_TO_ABS_POS, SYSFS_COMMAND_RUN_TO_REL_POS, SYSFS_COMMAND_STOP, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_COUNT_PER_ROT, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_DUTY_CYCLE, SYSFS_PROPERTY_DUTY_CYCLE_SP, SYSFS_PROPERTY_POLARITY, SYSFS_PROPERTY_POSITION, SYSFS_PROPERTY_POSITION_D, SYSFS_PROPERTY_POSITION_I, SYSFS_PROPERTY_POSITION_P, SYSFS_PROPERTY_POSITION_SP, SYSFS_PROPERTY_RAMP_DOWN_SP, SYSFS_PROPERTY_RAMP_UP_SP, SYSFS_PROPERTY_SPEED, SYSFS_PROPERTY_SPEED_SP, SYSFS_PROPERTY_STATE, SYSFS_PROPERTY_STOP_ACTION, SYSFS_PROPERTY_STOP_ACTIONS, SYSFS_PROPERTY_TIME_SP| Constructor and Description | +
|---|
FirgelliL1250Motor(int portField) |
+
FirgelliL1250Motor(LegoPort port) |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getCountPerMetre()
+Returns the number of tacho counts in one meter of travel of the motor.
+ |
+
int |
+getCountPerRot()
+Do not use this on Firgelli L12 50/100 Motors (Linear motors).
++ -1 will be returned instead, use getCountPerMetre() |
+
int |
+getFullTravelCount()
+Returns the number of tacho counts in the full travel of the motor.
+ |
+
getAddress, getCommands, getDriverName, getDutyCycle, getDutyCycleSP, getPolarity, getPosition_D, getPosition_I, getPosition_P, getPosition_SP, getPosition, getRamp_Down_SP, getRamp_Up_SP, getSpeed_SP, getSpeed, getState, getStateViaString, getStopAction, getStopCommands, getStopCommandsViaString, getTime_SP, reset, runDirect, runForever, runTimed, runToAbsPos, runToRelPos, sendCommand, setDutyCycleSP, setPolarity, setPosition_D, setPosition_I, setPosition_P, setPosition_SP, setPosition, setRamp_Down_SP, setRamp_Up_SP, setSpeed_SP, setStopAction, setTime_SP, stopgetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_COUNT_PER_M+
count_per_m property namepublic static final java.lang.String SYSFS_PROPERTY_FULL_TRAVEL_COUNT+
full_travel_count property namepublic static final java.lang.String LINEAR_MOTOR_CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public static final java.lang.String DRIVER_NAME_50MM+
public FirgelliL1250Motor(int portField) + throws EV3LibraryException+
EV3LibraryExceptionpublic FirgelliL1250Motor(LegoPort port) + throws EV3LibraryException+
EV3LibraryExceptionpublic int getCountPerRot() + throws EV3LibraryException+
-1 will be returned instead, use getCountPerMetre()getCountPerRot in class MotorEV3LibraryException - If I/O goes wrongpublic int getCountPerMetre() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getFullTravelCount() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class LargeMotor +extends Motor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_COMMAND_RESET, SYSFS_COMMAND_RUN_DIRECT, SYSFS_COMMAND_RUN_FOREVER, SYSFS_COMMAND_RUN_TIMED, SYSFS_COMMAND_RUN_TO_ABS_POS, SYSFS_COMMAND_RUN_TO_REL_POS, SYSFS_COMMAND_STOP, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_COUNT_PER_ROT, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_DUTY_CYCLE, SYSFS_PROPERTY_DUTY_CYCLE_SP, SYSFS_PROPERTY_POLARITY, SYSFS_PROPERTY_POSITION, SYSFS_PROPERTY_POSITION_D, SYSFS_PROPERTY_POSITION_I, SYSFS_PROPERTY_POSITION_P, SYSFS_PROPERTY_POSITION_SP, SYSFS_PROPERTY_RAMP_DOWN_SP, SYSFS_PROPERTY_RAMP_UP_SP, SYSFS_PROPERTY_SPEED, SYSFS_PROPERTY_SPEED_SP, SYSFS_PROPERTY_STATE, SYSFS_PROPERTY_STOP_ACTION, SYSFS_PROPERTY_STOP_ACTIONS, SYSFS_PROPERTY_TIME_SP| Constructor and Description | +
|---|
LargeMotor(int portField) |
+
LargeMotor(LegoPort port) |
+
getAddress, getCommands, getCountPerRot, getDriverName, getDutyCycle, getDutyCycleSP, getPolarity, getPosition_D, getPosition_I, getPosition_P, getPosition_SP, getPosition, getRamp_Down_SP, getRamp_Up_SP, getSpeed_SP, getSpeed, getState, getStateViaString, getStopAction, getStopCommands, getStopCommandsViaString, getTime_SP, reset, runDirect, runForever, runTimed, runToAbsPos, runToRelPos, sendCommand, setDutyCycleSP, setPolarity, setPosition_D, setPosition_I, setPosition_P, setPosition_SP, setPosition, setRamp_Down_SP, setRamp_Up_SP, setSpeed_SP, setStopAction, setTime_SP, stopgetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String DRIVER_NAME+
public LargeMotor(int portField) + throws InvalidPortException, + java.io.IOException+
InvalidPortExceptionjava.io.IOExceptionpublic LargeMotor(LegoPort port) + throws InvalidPortException, + java.io.IOException, + InvalidMotorException+
InvalidPortExceptionjava.io.IOExceptionInvalidMotorExceptionpublic class MediumMotor +extends Motor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_COMMAND_RESET, SYSFS_COMMAND_RUN_DIRECT, SYSFS_COMMAND_RUN_FOREVER, SYSFS_COMMAND_RUN_TIMED, SYSFS_COMMAND_RUN_TO_ABS_POS, SYSFS_COMMAND_RUN_TO_REL_POS, SYSFS_COMMAND_STOP, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_COUNT_PER_ROT, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_DUTY_CYCLE, SYSFS_PROPERTY_DUTY_CYCLE_SP, SYSFS_PROPERTY_POLARITY, SYSFS_PROPERTY_POSITION, SYSFS_PROPERTY_POSITION_D, SYSFS_PROPERTY_POSITION_I, SYSFS_PROPERTY_POSITION_P, SYSFS_PROPERTY_POSITION_SP, SYSFS_PROPERTY_RAMP_DOWN_SP, SYSFS_PROPERTY_RAMP_UP_SP, SYSFS_PROPERTY_SPEED, SYSFS_PROPERTY_SPEED_SP, SYSFS_PROPERTY_STATE, SYSFS_PROPERTY_STOP_ACTION, SYSFS_PROPERTY_STOP_ACTIONS, SYSFS_PROPERTY_TIME_SP| Constructor and Description | +
|---|
MediumMotor(int portField) |
+
MediumMotor(LegoPort port) |
+
getAddress, getCommands, getCountPerRot, getDriverName, getDutyCycle, getDutyCycleSP, getPolarity, getPosition_D, getPosition_I, getPosition_P, getPosition_SP, getPosition, getRamp_Down_SP, getRamp_Up_SP, getSpeed_SP, getSpeed, getState, getStateViaString, getStopAction, getStopCommands, getStopCommandsViaString, getTime_SP, reset, runDirect, runForever, runTimed, runToAbsPos, runToRelPos, sendCommand, setDutyCycleSP, setPolarity, setPosition_D, setPosition_I, setPosition_P, setPosition_SP, setPosition, setRamp_Down_SP, setRamp_Up_SP, setSpeed_SP, setStopAction, setTime_SP, stopgetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String DRIVER_NAME+
public MediumMotor(int portField) + throws InvalidPortException, + java.io.IOException+
InvalidPortExceptionjava.io.IOExceptionpublic MediumMotor(LegoPort port) + throws InvalidPortException, + java.io.IOException, + InvalidMotorException+
InvalidPortExceptionjava.io.IOExceptionInvalidMotorExceptionpublic class Motor +extends Device+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static java.lang.String |
+CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_COMMAND_RESET
+The Sysfs class's
+reset command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_DIRECT
+The Sysfs class's
+run-direct command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_FOREVER
+The Sysfs class's
+run-forever command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_TIMED
+The Sysfs class's
+run-timed command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_TO_ABS_POS
+The Sysfs class's
+run-to-abs-pos command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN_TO_REL_POS
+The Sysfs class's
+run-to-rel-pos command |
+
static java.lang.String |
+SYSFS_COMMAND_STOP
+The Sysfs class's
+stop command |
+
static java.lang.String |
+SYSFS_PROPERTY_ADDRESS
+The Sysfs class's
+address property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMAND
+The Sysfs class's
+command property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMANDS
+The Sysfs class's
+commands property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COUNT_PER_ROT
+The Sysfs class's
+count_per_rot property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME
+The Sysfs class's
+driver_name property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE
+The Sysfs class's
+duty_cycle property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DUTY_CYCLE_SP
+The Sysfs class's
+duty_cycle_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POLARITY
+The Sysfs class's
+polarity property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POSITION
+The Sysfs class's
+position property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POSITION_D
+The Sysfs class's
+position_d property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POSITION_I
+The Sysfs class's
+position_i property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POSITION_P
+The Sysfs class's
+position_p property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POSITION_SP
+The Sysfs class's
+position_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_RAMP_DOWN_SP
+The Sysfs class's
+ramp_down_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_RAMP_UP_SP
+The Sysfs class's
+ramp_up_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_SPEED
+The Sysfs class's
+speed property name |
+
static java.lang.String |
+SYSFS_PROPERTY_SPEED_SP
+The Sysfs class's
+speed_sp property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STATE
+The Sysfs class's
+state property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STOP_ACTION
+The Sysfs class's
+stop_action property name |
+
static java.lang.String |
+SYSFS_PROPERTY_STOP_ACTIONS
+The Sysfs class's
+stop_actions property name |
+
static java.lang.String |
+SYSFS_PROPERTY_TIME_SP
+The Sysfs class's
+time_sp property name |
+
| Constructor and Description | +
|---|
Motor(int portField)
+Creates a new motor object.
+ |
+
Motor(LegoPort port)
+Creates a new motor object.
+ |
+
Motor(LegoPort port,
+ java.lang.String class_name_prefix)
+Creates a new motor object.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getAddress()
+Get the address of this motor.
+ |
+
java.lang.String[] |
+getCommands()
+Returns a list of commands that are supported by the motor controller.
+ |
+
int |
+getCountPerRot()
+Returns the number of tacho counts in one rotation of the motor.
+ |
+
java.lang.String |
+getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
int |
+getDutyCycle()
+Returns the current duty cycle of the motor.
+ |
+
int |
+getDutyCycleSP()
+Writing sets the duty cycle setpoint.
+ |
+
java.lang.String |
+getPolarity()
+Sets the polarity of the motor.
+ |
+
int |
+getPosition_D()
+The derivative constant for the position PID.
+ |
+
int |
+getPosition_I()
+The integral constant for the position PID.
+ |
+
int |
+getPosition_P()
+The proportional constant for the position PID.
+ |
+
int |
+getPosition_SP()
+Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands.
+ |
+
int |
+getPosition()
+Returns the current position of the motor in pulses of the rotary encoder.
+ |
+
int |
+getRamp_Down_SP()
+Writing sets the ramp down setpoint.
+ |
+
int |
+getRamp_Up_SP()
+Writing sets the ramp up setpoint.
+ |
+
int |
+getSpeed_SP()
+Writing sets the target speed in tacho counts per second used when speed_regulation is on.
+ |
+
int |
+getSpeed()
+Returns the current motor speed in tacho counts per second.
+ |
+
java.lang.String[] |
+getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String |
+getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
java.lang.String |
+getStopAction()
+Reading returns the current stop command.
+ |
+
java.lang.String[] |
+getStopCommands()
+Returns a list of stop modes supported by the motor controller.
+ |
+
java.lang.String |
+getStopCommandsViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
int |
+getTime_SP()
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+reset()
+Reset all of the motor parameter attributes to their default value.
+ |
+
void |
+runDirect()
+Run the motor at the duty cycle specified by duty_cycle_sp.
+ |
+
void |
+runForever()
+Cause the motor to run until another command is sent
+ |
+
void |
+runTimed()
+Run the motor for the amount of time specified in time_sp
+ and then stop the motor using the command specified by
+ stop_command
+ |
+
void |
+runToAbsPos()
+Run to an absolute position specified by position_sp
+ and then stop using the command specified in stop_command
+ |
+
void |
+runToRelPos()
+Run to a position relative to the current position value.
+ |
+
void |
+sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+setDutyCycleSP(int sp)
+Writing sets the duty cycle setpoint.
+ |
+
void |
+setPolarity(java.lang.String polarity)
+Sets the polarity of the motor.
+ |
+
void |
+setPosition_D(int position_d)
+The derivative constant for the position PID.
+ |
+
void |
+setPosition_I(int position_i)
+The integral constant for the position PID.
+ |
+
void |
+setPosition_P(int position_p)
+The proportional constant for the position PID.
+ |
+
void |
+setPosition_SP(int position_sp)
+Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands.
+ |
+
void |
+setPosition(int position)
+Returns the current position of the motor in pulses of the rotary encoder.
+ |
+
void |
+setRamp_Down_SP(int ramp_down_sp)
+Writing sets the ramp down setpoint.
+ |
+
void |
+setRamp_Up_SP(int ramp_up_sp)
+Writing sets the ramp up setpoint.
+ |
+
void |
+setSpeed_SP(int speed_sp)
+Writing sets the target speed in tacho counts per second used when speed_regulation is on.
+ |
+
void |
+setStopAction(java.lang.String stop_action)
+Reading returns the current stop command.
+ |
+
void |
+setTime_SP(int time_sp)
+Writing specifies the amount of time the motor will run when using the run-timed command.
+ |
+
void |
+stop()
+Stop any of the run commands before they are complete using the command specified by stop_command.
+ |
+
getAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_ADDRESS+
address property namepublic static final java.lang.String SYSFS_PROPERTY_COMMAND+
command property namepublic static final java.lang.String SYSFS_PROPERTY_COMMANDS+
commands property namepublic static final java.lang.String SYSFS_PROPERTY_COUNT_PER_ROT+
count_per_rot property namepublic static final java.lang.String SYSFS_PROPERTY_DRIVER_NAME+
driver_name property namepublic static final java.lang.String SYSFS_PROPERTY_DUTY_CYCLE+
duty_cycle property namepublic static final java.lang.String SYSFS_PROPERTY_DUTY_CYCLE_SP+
duty_cycle_sp property namepublic static final java.lang.String SYSFS_PROPERTY_POLARITY+
polarity property namepublic static final java.lang.String SYSFS_PROPERTY_POSITION+
position property namepublic static final java.lang.String SYSFS_PROPERTY_POSITION_P+
position_p property namepublic static final java.lang.String SYSFS_PROPERTY_POSITION_I+
position_i property namepublic static final java.lang.String SYSFS_PROPERTY_POSITION_D+
position_d property namepublic static final java.lang.String SYSFS_PROPERTY_POSITION_SP+
position_sp property namepublic static final java.lang.String SYSFS_PROPERTY_SPEED+
speed property namepublic static final java.lang.String SYSFS_PROPERTY_SPEED_SP+
speed_sp property namepublic static final java.lang.String SYSFS_PROPERTY_RAMP_UP_SP+
ramp_up_sp property namepublic static final java.lang.String SYSFS_PROPERTY_RAMP_DOWN_SP+
ramp_down_sp property namepublic static final java.lang.String SYSFS_PROPERTY_STATE+
state property namepublic static final java.lang.String SYSFS_PROPERTY_STOP_ACTION+
stop_action property namepublic static final java.lang.String SYSFS_PROPERTY_STOP_ACTIONS+
stop_actions property namepublic static final java.lang.String SYSFS_PROPERTY_TIME_SP+
time_sp property namepublic static final java.lang.String SYSFS_COMMAND_RUN_FOREVER+
run-forever commandpublic static final java.lang.String SYSFS_COMMAND_RUN_TO_ABS_POS+
run-to-abs-pos commandpublic static final java.lang.String SYSFS_COMMAND_RUN_TO_REL_POS+
run-to-rel-pos commandpublic static final java.lang.String SYSFS_COMMAND_RUN_TIMED+
run-timed commandpublic static final java.lang.String SYSFS_COMMAND_RUN_DIRECT+
run-direct commandpublic static final java.lang.String SYSFS_COMMAND_STOP+
stop commandpublic static final java.lang.String SYSFS_COMMAND_RESET+
reset commandpublic static final java.lang.String CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public static final java.lang.String CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public Motor(int portField) + throws EV3LibraryException+
portField - a LegoPort field (e.g. LegoPort.INPUT_1)EV3LibraryException - If the LegoPort specified goes wrongpublic Motor(LegoPort port) + throws EV3LibraryException+
port - LegoPortEV3LibraryException - If the LegoPort specified goes wrongpublic Motor(LegoPort port, + java.lang.String class_name_prefix) + throws EV3LibraryException+
port - LegoPortclass_name_prefix - Specify a class name prefix (e.g. motor[N], which "motor" is the prefix)EV3LibraryException - If the LegoPort specified goes wrongpublic java.lang.String getAddress() + throws EV3LibraryException+
getAddress in class DeviceEV3LibraryException - If the motor doesn't exist or IO ERRORpublic void sendCommand(java.lang.String command) + throws EV3LibraryException+
command - Command that suits for the motor driverEV3LibraryException - If I/O goes wrongpublic void runForever() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void runToAbsPos() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void runToRelPos() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrong.public void runTimed() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void runDirect() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void stop() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void reset() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getCommands() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getCountPerRot() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getDriverName() + throws EV3LibraryException+
getDriverName in class DeviceEV3LibraryException - If I/O goes wrongpublic int getDutyCycle() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getDutyCycleSP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setDutyCycleSP(int sp) + throws EV3LibraryException+
sp - PercentageEV3LibraryException - If I/O goes wrongpublic java.lang.String getPolarity() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPolarity(java.lang.String polarity) + throws EV3LibraryException+
polarity - The polarity of the motorEV3LibraryException - If I/O goes wrongpublic int getPosition() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPosition(int position) + throws EV3LibraryException+
position - The current positionEV3LibraryException - If I/O goes wrongpublic int getPosition_P() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getPosition_I() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getPosition_D() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPosition_P(int position_p) + throws EV3LibraryException+
position_p - The proportional constant for the position PID.EV3LibraryException - If I/O goes wrongpublic void setPosition_I(int position_i) + throws EV3LibraryException+
position_i - The integral constant for the position PID.EV3LibraryException - If I/O goes wrongpublic void setPosition_D(int position_d) + throws EV3LibraryException+
position_d - The derivative constant for the position PID.EV3LibraryException - If I/O goes wrongpublic int getPosition_SP() + throws EV3LibraryException+
EV3LibraryException - if I/O goes wrongpublic void setPosition_SP(int position_sp) + throws EV3LibraryException+
position_sp - The target positionEV3LibraryException - If I/O goes wrongpublic int getSpeed() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getSpeed_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setSpeed_SP(int speed_sp) + throws EV3LibraryException+
speed_sp - The target speedEV3LibraryException - If I/O goes wrongpublic int getRamp_Up_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setRamp_Up_SP(int ramp_up_sp) + throws EV3LibraryException+
ramp_up_sp - The ramp-up set-pointEV3LibraryException - If I/O goes wrongpublic int getRamp_Down_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setRamp_Down_SP(int ramp_down_sp) + throws EV3LibraryException+
ramp_down_sp - The ramp-down set-pointEV3LibraryException - If I/O goes wrongpublic java.lang.String getStateViaString() + throws EV3LibraryException+
+ getState() ++ Reading returns a list of state flags. Possible flags are running, ramping holding and stalled.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getState() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getStopAction() + throws EV3LibraryException+
getStopCommands()EV3LibraryException - If I/O goes wrongpublic void setStopAction(java.lang.String stop_action) + throws EV3LibraryException+
stop_action - A stop command that listed using getStopCommands()EV3LibraryException - If I/O goes wrongpublic java.lang.String getStopCommandsViaString() + throws EV3LibraryException+
+ getStopCommands() ++ Returns a list of stop modes supported by the motor controller. Possible values are coast, + brake and hold. coast means that power will be removed from the motor and it will freely + coast to a stop. brake means that power will be removed from the motor and a passive + electrical load will be placed on the motor. This is usually done by shorting the motor + terminals together. This load will absorb the energy from the rotation of the motors + and cause the motor to stop more quickly than coasting. hold does not remove power from + the motor. Instead it actively try to hold the motor at the current position. + If an external force tries to turn the motor, the motor will push back to maintain its position.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getStopCommands() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getTime_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setTime_SP(int time_sp) + throws EV3LibraryException+
time_sp - Amount of time in msEV3LibraryException - If I/O goes wrongpublic class NXTMotor +extends Motor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_COMMAND_RESET, SYSFS_COMMAND_RUN_DIRECT, SYSFS_COMMAND_RUN_FOREVER, SYSFS_COMMAND_RUN_TIMED, SYSFS_COMMAND_RUN_TO_ABS_POS, SYSFS_COMMAND_RUN_TO_REL_POS, SYSFS_COMMAND_STOP, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_COUNT_PER_ROT, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_DUTY_CYCLE, SYSFS_PROPERTY_DUTY_CYCLE_SP, SYSFS_PROPERTY_POLARITY, SYSFS_PROPERTY_POSITION, SYSFS_PROPERTY_POSITION_D, SYSFS_PROPERTY_POSITION_I, SYSFS_PROPERTY_POSITION_P, SYSFS_PROPERTY_POSITION_SP, SYSFS_PROPERTY_RAMP_DOWN_SP, SYSFS_PROPERTY_RAMP_UP_SP, SYSFS_PROPERTY_SPEED, SYSFS_PROPERTY_SPEED_SP, SYSFS_PROPERTY_STATE, SYSFS_PROPERTY_STOP_ACTION, SYSFS_PROPERTY_STOP_ACTIONS, SYSFS_PROPERTY_TIME_SP| Constructor and Description | +
|---|
NXTMotor(int portField) |
+
NXTMotor(LegoPort port) |
+
getAddress, getCommands, getCountPerRot, getDriverName, getDutyCycle, getDutyCycleSP, getPolarity, getPosition_D, getPosition_I, getPosition_P, getPosition_SP, getPosition, getRamp_Down_SP, getRamp_Up_SP, getSpeed_SP, getSpeed, getState, getStateViaString, getStopAction, getStopCommands, getStopCommandsViaString, getTime_SP, reset, runDirect, runForever, runTimed, runToAbsPos, runToRelPos, sendCommand, setDutyCycleSP, setPolarity, setPosition_D, setPosition_I, setPosition_P, setPosition_SP, setPosition, setRamp_Down_SP, setRamp_Up_SP, setSpeed_SP, setStopAction, setTime_SP, stopgetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String DRIVER_NAME+
public NXTMotor(int portField) + throws InvalidPortException, + java.io.IOException+
InvalidPortExceptionjava.io.IOExceptionpublic NXTMotor(LegoPort port) + throws InvalidPortException, + java.io.IOException+
InvalidPortExceptionjava.io.IOExceptionpublic class ServoMotor +extends Device+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static java.lang.String |
+CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_COMMAND_FLOAT
+The Sysfs class's
+float command |
+
static java.lang.String |
+SYSFS_COMMAND_RUN
+The Sysfs class's
+run command |
+
| Constructor and Description | +
|---|
ServoMotor(LegoPort port)
+Creates a new motor object.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
void |
+Float()
+Run to an absolute position specified by position_sp
+ and then stop using the command specified in stop_command
+ |
+
java.lang.String |
+getAddress()
+Get the address of this motor.
+ |
+
java.lang.String |
+getDriverName()
+Returns the name of the driver that provides this tacho motor device.
+ |
+
int |
+getMaxPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp.
+ |
+
int |
+getMidPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
+ |
+
int |
+getMinPulse_SP()
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
+ minimum (counter-clockwise) position_sp.
+ |
+
java.lang.String |
+getPolarity()
+Sets the polarity of the servo.
+ |
+
int |
+getPosition_SP()
+Reading returns the current position_sp of the servo.
+ |
+
java.lang.String[] |
+getState()
+Reading returns a list of state flags.
+ |
+
java.lang.String |
+getStateViaString()
+This function returns a string that is likely a "spaced-array".
++ Use this function to directly to return a String array: |
+
void |
+run()
+Setting to run will cause the servo to be driven to the position_sp set in the position_sp attribute.
+ |
+
void |
+sendCommand(java.lang.String command)
+Generic method to send commands to the motor controller.
+ |
+
void |
+setMaxPulse_SP(int max_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp.
+ |
+
void |
+setMidPulse_SP(int mid_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
+ |
+
void |
+setMinPulse_SP(int min_pulse_sp)
+Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
+ minimum (counter-clockwise) position_sp.
+ |
+
void |
+setPolarity(java.lang.String polarity)
+Sets the polarity of the servo.
+ |
+
void |
+setPosition_SP(int position_sp)
+Reading returns the current position_sp of the servo.
+ |
+
void |
+setRate_SP(int rate_sp)
+Sets the rate_sp at which the servo travels from 0 to 100.0% (half of the full range of the servo).
+ |
+
getAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_COMMAND_RUN+
run commandpublic static final java.lang.String SYSFS_COMMAND_FLOAT+
float commandpublic static final java.lang.String CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public static final java.lang.String CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public ServoMotor(LegoPort port) + throws EV3LibraryException+
port - LegoPortInvalidPortException - If the LegoPort isn't a OUTPUT, invalid or a tacho-motor.EV3LibraryException - If the LegoPort specified goes wrongInvalidMotorException - The specified motor wasn't a motorpublic java.lang.String getAddress() + throws EV3LibraryException+
getAddress in class DeviceEV3LibraryException - If the motor doesn't exist or IO ERRORpublic void sendCommand(java.lang.String command) + throws EV3LibraryException+
command - Command that suits for the motor driverEV3LibraryException - If I/O goes wrongpublic void run() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void Float() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getDriverName() + throws EV3LibraryException+
getDriverName in class DeviceEV3LibraryException - If I/O goes wrongpublic int getMaxPulse_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setMaxPulse_SP(int max_pulse_sp) + throws EV3LibraryException+
max_pulse_sp - The pulse size in millisecondsEV3LibraryException - If I/O goes wrongpublic int getMidPulse_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setMidPulse_SP(int mid_pulse_sp) + throws EV3LibraryException+
mid_pulse_sp - The pulse size in millisecondsEV3LibraryException - If I/O goes wrongpublic int getMinPulse_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setMinPulse_SP(int min_pulse_sp) + throws EV3LibraryException+
min_pulse_sp - The pulse size in millisecondsEV3LibraryException - If I/O goes wrongpublic java.lang.String getPolarity() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPolarity(java.lang.String polarity) + throws EV3LibraryException+
polarity - The polarity of the servoEV3LibraryException - If I/O goes wrongpublic int getPosition_SP() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPosition_SP(int position_sp) + throws EV3LibraryException+
position_sp - The current position_sp of the servoEV3LibraryException - If I/O goes wrongpublic void setRate_SP(int rate_sp) + throws EV3LibraryException+
rate_sp - The rate_sp valueEV3LibraryException - If I/O goes wrongpublic java.lang.String getStateViaString() + throws EV3LibraryException+
+ getState() ++ Reading returns a list of state flags. Possible flags are running, ramping holding and stalled.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getState() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrong| Package | +Description | +
|---|---|
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+FirgelliL12100Motor |
+
class |
+FirgelliL1250Motor |
+
class |
+LargeMotor |
+
class |
+MediumMotor |
+
class |
+NXTMotor |
+
| Class | +Description | +
|---|---|
| DCMotor | +
+ The DC motor class provides a uniform interface for using regular DC motors
+ with no fancy controls or feedback.
+ |
+
| FirgelliL12100Motor | ++ |
| FirgelliL1250Motor | ++ |
| LargeMotor | ++ |
| MediumMotor | ++ |
| Motor | +
+ The motor class provides a uniform interface for using motors with positional and directional feedback such as the EV3 and NXT motors.
+ |
+
| NXTMotor | ++ |
| ServoMotor | +
+ The servo motor class provides a uniform interface for using hobby type servo motors.
+ |
+
+ LegoPort port = new LegoPort(LegoPort.OUTPUT_A); + Motor motor = new Motor(port); + motor.setDutyCycle_SP(50); //Set Speed + motor.runForever(); //Run forever +
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| Class and Description | +
|---|
| Motor
+ The motor class provides a uniform interface for using motors with positional and directional feedback such as the EV3 and NXT motors.
+ |
+
See: Description
+| Class | +Description | +
|---|---|
| Button | +
+ Provides a generic button reading mechanism that can be adapted to platform specific implementations.
+ |
+
| Device | +
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| LED | +
+ Any device controlled by the generic LED driver.
+ |
+
| PowerSupply | +
+ A generic interface to read data from the systems power_supply class.
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
| Class and Description | +
|---|
| Device
+ This is the base class that handles control tasks for a single port or index.
+ |
+
public class LegoPort
+extends java.lang.Object
+| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+The sysfs class name of LegoPort
+ |
+
static int |
+INPUT_1
+Sensor Port 1 on the EV3
+ |
+
static int |
+INPUT_2
+Sensor Port 2 on the EV3
+ |
+
static int |
+INPUT_3
+Sensor Port 3 on the EV3
+ |
+
static int |
+INPUT_4
+Sensor Port 4 on the EV3
+ |
+
static int |
+OUTPUT_A
+Motor Port A on the EV3
+ |
+
static int |
+OUTPUT_B
+Motor Port B on the EV3
+ |
+
static int |
+OUTPUT_C
+Motor Port C on the EV3
+ |
+
static int |
+OUTPUT_D
+Motor Port D on the EV3
+ |
+
| Constructor and Description | +
|---|
LegoPort(int port)
+Creates a new LegoPort object.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getAddress()
+Returns the name of the port.
+ |
+
java.lang.String |
+getDriverName()
+Returns the name of the driver that loaded this device.
+ |
+
java.lang.String |
+getMode()
+Reading returns the currently selected mode.
+ |
+
java.lang.String[] |
+getModes()
+Returns a list of the available modes of the port.
+ |
+
java.lang.String |
+getStatus()
+In most cases, reading status will return the same value as mode.
+ |
+
void |
+setDevice(java.lang.String driver)
+For modes that support it, writing the name of a driver will cause a new device to be registered for that driver and
+ attached to this port.
+ |
+
void |
+setMode(java.lang.String mode)
+Reading returns the currently selected mode.
+ |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String CLASS_NAME+
public static final int INPUT_1+
public static final int INPUT_2+
public static final int INPUT_3+
public static final int INPUT_4+
public static final int OUTPUT_A+
public static final int OUTPUT_B+
public static final int OUTPUT_C+
public static final int OUTPUT_D+
public LegoPort(int port) + throws InvalidPortException+
port - A INPUT/OUTPUT Integer field from LegoPort class.InvalidPortException - If the specified port is lower than INPUT_1, higher than OUTPUT_Dpublic java.lang.String getAddress() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getDriverName() + throws EV3LibraryException+
EV3LibraryException - if I/O goes wrongpublic java.lang.String[] getModes() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getMode() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setMode(java.lang.String mode) + throws EV3LibraryException+
mode - A available mode listed using getModes()EV3LibraryException - If I/O goes wrongpublic void setDevice(java.lang.String driver) + throws EV3LibraryException+
driver - A generic driver nameEV3LibraryException - If I/O goes wrongpublic java.lang.String getStatus() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class MotorPort +extends LegoPort+
| Modifier and Type | +Field and Description | +
|---|---|
static int |
+MOTOR_A |
+
static int |
+MOTOR_B |
+
static int |
+MOTOR_C |
+
static int |
+MOTOR_D |
+
| Constructor and Description | +
|---|
MotorPort(int port)
+Creates a new motor port object.
++ + NOTE: MotorPort only accepts motors ports. |
+
getAddress, getDriverName, getMode, getModes, getStatus, setDevice, setModeequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final int MOTOR_A+
public static final int MOTOR_B+
public static final int MOTOR_C+
public static final int MOTOR_D+
public MotorPort(int port) + throws InvalidPortException+
port - A final field from the MotorPort class. e.g.: MotorPort.MOTOR_AInvalidPortException - If the specified port does not existpublic class SensorPort +extends LegoPort+
| Modifier and Type | +Field and Description | +
|---|---|
static int |
+SENSOR_1 |
+
static int |
+SENSOR_2 |
+
static int |
+SENSOR_3 |
+
static int |
+SENSOR_4 |
+
| Constructor and Description | +
|---|
SensorPort(int port)
+Creates a new sensor port object.
++ + NOTE: SensorPort only accepts sensor ports. |
+
getAddress, getDriverName, getMode, getModes, getStatus, setDevice, setModeequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final int SENSOR_1+
public static final int SENSOR_2+
public static final int SENSOR_3+
public static final int SENSOR_4+
public SensorPort(int port) + throws InvalidPortException+
port - A final field from the SensorPort class. e.g.: SensorPort.SENSOR_1InvalidPortException - If the specified port does not exist| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Modifier and Type | +Method and Description | +
|---|---|
LegoPort |
+Device.getPort()
+Returns the LegoPort connected with this Device
+ |
+
| Constructor and Description | +
|---|
Device(LegoPort port,
+ java.lang.String className,
+ java.lang.String classNamePrefix)
+Create a new device with a LegoPort, ClassName, classNamePrefix
+ |
+
| Constructor and Description | +
|---|
DCMotor(LegoPort port)
+Creates a new DC motor object.
+ |
+
FirgelliL12100Motor(LegoPort port) |
+
FirgelliL1250Motor(LegoPort port) |
+
LargeMotor(LegoPort port) |
+
MediumMotor(LegoPort port) |
+
Motor(LegoPort port)
+Creates a new motor object.
+ |
+
Motor(LegoPort port,
+ java.lang.String class_name_prefix)
+Creates a new motor object.
+ |
+
NXTMotor(LegoPort port) |
+
ServoMotor(LegoPort port)
+Creates a new motor object.
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+MotorPort
+MotorPort class for getting data from a specified motor port.
++ + You can use a LegoPort to use all the ports. |
+
class |
+SensorPort
+SensorPort class for getting data from a specified sensor port.
++ + You can use a LegoPort to use all the ports. |
+
| Constructor and Description | +
|---|
ColorSensor(LegoPort port)
+Creates a new ColorSensor instance.
+ |
+
GyroSensor(LegoPort port)
+Creates a new GyroSensor instance.
+ |
+
I2CSensor(LegoPort port)
+Creates a new I2CSensor instance.
+ |
+
InfraredSensor(LegoPort port)
+Creates a new InfraredSensor instance.
+ |
+
LightSensor(LegoPort port)
+Creates a new LightSensor instance.
+ |
+
Sensor(LegoPort port)
+Creates a new Sensor instance using a LegoPort
+ |
+
SoundSensor(LegoPort port)
+Creates a new SoundSensor instance.
+ |
+
TouchSensor(LegoPort port)
+Creates a new TouchSensor instance.
+ |
+
UltrasonicSensor(LegoPort port)
+Creates a new UltrasonicSensor instance.
+ |
+
| Constructor and Description | +
|---|
PixyCmucam5(LegoPort port)
+Creates a new Pixy Cmucam 5 instnace
+ |
+
| Constructor and Description | +
|---|
DflexSensor(LegoPort port) |
+
| Constructor and Description | +
|---|
EV3AnalogSensor(LegoPort port,
+ java.lang.String typeId)
+Creates a new EV3 analog sensor
+ |
+
NXTAnalogSensor(LegoPort port)
+Creates a new NXT analog sensor
+ |
+
See: Description
+| Class | +Description | +
|---|---|
| LegoPort | +
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| MotorPort | +
+ MotorPort class for getting data from a specified motor port.
++ + You can use a LegoPort to use all the ports. |
+
| SensorPort | +
+ SensorPort class for getting data from a specified sensor port.
++ + You can use a LegoPort to use all the ports. |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
| Class and Description | +
|---|
| LegoPort
+ The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3,
+ LEGO WeDo and LEGO Power Functions sensors and motors.
+ |
+
public class ColorSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
static java.lang.String |
+SYSFS_AMBIENT_LIGHT_INTENSITY_MODE
+Ambient Light Intensity required Sysfs mode
+ |
+
static int |
+SYSFS_AMBIENT_LIGHT_INTENSITY_VALUE_INDEX
+Ambient Light Intensity Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_COLOR_MODE
+Color required Sysfs mode
+ |
+
static int |
+SYSFS_COLOR_VALUE_INDEX
+Color Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_REFLECTED_LIGHT_INTENSITY_MODE
+Reflected Light Intensity required Sysfs mode
+ |
+
static int |
+SYSFS_REFLECTED_LIGHT_INTENSITY_VALUE_INDEX
+Reflected Light Intensity Sysfs value index
+ |
+
static int |
+SYSFS_RGB_B_VALUE_INDEX
+RGB Blue Sysfs value index
+ |
+
static int |
+SYSFS_RGB_G_VALUE_INDEX
+RGB Green Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_RGB_MODE
+RGB required Sysfs mode
+ |
+
static int |
+SYSFS_RGB_R_VALUE_INDEX
+RGB Red Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
ColorSensor(LegoPort port)
+Creates a new ColorSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getAmbientLightIntensity()
+Ambient light intensity.
+ |
+
int |
+getColor()
+Color detected by the sensor, categorized by overall value.
+ |
+
int |
+getReflectedLightIntensity()
+Reflected light intensity as a percentage.
+ |
+
int |
+getRGB_Blue()
+Blue component of the detected color, in the range 0-1020
+ |
+
int |
+getRGB_Green()
+Green component of the detected color, in the range 0-1020
+ |
+
int |
+getRGB_Red()
+Red component of the detected color, in the range 0-1020
+ |
+
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_REFLECTED_LIGHT_INTENSITY_MODE+
public static final int SYSFS_REFLECTED_LIGHT_INTENSITY_VALUE_INDEX+
public static final java.lang.String SYSFS_AMBIENT_LIGHT_INTENSITY_MODE+
public static final int SYSFS_AMBIENT_LIGHT_INTENSITY_VALUE_INDEX+
public static final java.lang.String SYSFS_COLOR_MODE+
public static final int SYSFS_COLOR_VALUE_INDEX+
public static final java.lang.String SYSFS_RGB_MODE+
public static final int SYSFS_RGB_R_VALUE_INDEX+
public static final int SYSFS_RGB_G_VALUE_INDEX+
public static final int SYSFS_RGB_B_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public ColorSensor(LegoPort port) + throws EV3LibraryException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a ColorSensorEV3LibraryException - If I/O goes wrongpublic int getReflectedLightIntensity() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getAmbientLightIntensity() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getColor() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getRGB_Red() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getRGB_Green() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getRGB_Blue() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class GyroSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
static java.lang.String |
+SYSFS_ANGLE_MODE
+Gyro angle required Sysfs mode
+ |
+
static int |
+SYSFS_ANGLE_VALUE_INDEX
+Gyro angle Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_RATE_MODE
+Gyro rate required Sysfs mode
+ |
+
static int |
+SYSFS_RATE_VALUE_INDEX
+Gyro angle Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
GyroSensor(LegoPort port)
+Creates a new GyroSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getAngle()
+The number of degrees that the sensor has been rotated since it was put into this mode.
+ |
+
int |
+getRate()
+The rate at which the sensor is rotating, in degrees/second.
+ |
+
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_ANGLE_MODE+
public static final int SYSFS_ANGLE_VALUE_INDEX+
public static final java.lang.String SYSFS_RATE_MODE+
public static final int SYSFS_RATE_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public GyroSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a GyroSensorEV3LibraryException - If I/O goes wrongpublic int getAngle() + throws InvalidModeException, + EV3LibraryException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public int getRate() + throws InvalidModeException, + EV3LibraryException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class I2CSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+SYSFS_PROPERTY_FIRMWARE_VERSION
+The Sysfs class's
+fw_version property name |
+
static java.lang.String |
+SYSFS_PROPERTY_POLL_MS
+The Sysfs class's
+poll_ms property name |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
I2CSensor(LegoPort port)
+Creates a new I2CSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getFirmwareVersion()
+Returns the firmware version of the sensor if available.
+ |
+
int |
+getPollMs()
+Returns the polling period of the sensor in milliseconds.
+ |
+
void |
+setPollMs(int ms)
+Sets the polling period of the sensor in milliseconds.
+ |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_FIRMWARE_VERSION+
fw_version property namepublic static final java.lang.String SYSFS_PROPERTY_POLL_MS+
poll_ms property namepublic I2CSensor(LegoPort port) + throws InvalidPortException, + InvalidSensorException, + EV3LibraryException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a I2CSensorEV3LibraryException - If I/O goes wrongpublic java.lang.String getFirmwareVersion() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getPollMs() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setPollMs(int ms) + throws EV3LibraryException+
ms - The polling period in millisecondsEV3LibraryException - If I/O goes wrongpublic class InfraredSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
static java.lang.String |
+SYSFS_PROXIMITY_REQUIRED_MODE
+Proximity required Sysfs mode
+ |
+
static int |
+SYSFS_PROXIMITY_VALUE_INDEX
+Proximity Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
InfraredSensor(LegoPort port)
+Creates a new InfraredSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
boolean |
+getAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
int |
+getProximity()
+A measurement of the distance between the sensor and the remote, as a percentage.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROXIMITY_REQUIRED_MODE+
public static final int SYSFS_PROXIMITY_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public InfraredSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a InfraredSensorEV3LibraryException - If I/O goes wrongpublic int getProximity() + throws InvalidModeException, + EV3LibraryException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean getAutoSwitchMode()+
public class LightSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
boolean |
+autoSwitchMode |
+
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
static java.lang.String |
+SYSFS_AMBIENT_REQUIRED_MODE
+Ambient light Sysfs required mode
+ |
+
static int |
+SYSFS_AMBIENT_VALUE_INDEX
+Ambient light Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_REFLECTED_REQUIRED_MODE
+Reflected light Sysfs required mode
+ |
+
static int |
+SYSFS_REFLECTED_VALUE_INDEX
+Reflected light Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
LightSensor(LegoPort port)
+Creates a new LightSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
float |
+getAmbientLightIntensity()
+A measurement of the ambient light intensity, as a percentage.
+ |
+
float |
+getReflectedLightIntensity()
+A measurement of the reflected light intensity, as a percentage.
+ |
+
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_REFLECTED_REQUIRED_MODE+
public static final int SYSFS_REFLECTED_VALUE_INDEX+
public static final java.lang.String SYSFS_AMBIENT_REQUIRED_MODE+
public static final int SYSFS_AMBIENT_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public boolean autoSwitchMode+
public LightSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a LightSensorEV3LibraryException - If I/O goes wrongpublic float getReflectedLightIntensity() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public float getAmbientLightIntensity() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class Sensor +extends Device+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+CLASS_NAME
+This Sysfs's class name (e.g.
+ |
+
static java.lang.String |
+CLASS_NAME_PREFIX
+This Sysfs's class name prefix (e.g.
+ |
+
static java.lang.String |
+SYSFS_PROPERTY_ADDRESS
+The Sysfs class's
+address property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMAND
+The Sysfs class's
+command property name |
+
static java.lang.String |
+SYSFS_PROPERTY_COMMANDS
+The Sysfs class's
+commands property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DECIMALS
+The Sysfs class's
+decimals property name |
+
static java.lang.String |
+SYSFS_PROPERTY_DRIVER_NAME
+The Sysfs class's
+driver_name property name |
+
static java.lang.String |
+SYSFS_PROPERTY_MODE
+The Sysfs class's
+mode property name |
+
static java.lang.String |
+SYSFS_PROPERTY_MODES
+The Sysfs class's
+modes property name |
+
static java.lang.String |
+SYSFS_PROPERTY_NUM_VALUES
+The Sysfs class's
+num_values property name |
+
static java.lang.String |
+SYSFS_PROPERTY_UNITS
+The Sysfs class's
+units property name |
+
| Constructor and Description | +
|---|
Sensor(LegoPort port)
+Creates a new Sensor instance using a LegoPort
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getAddress()
+Returns the name of the port that the sensor is connected to, e.g.
+ |
+
java.lang.String[] |
+getCommands()
+Returns a list of the valid commands for the sensor.
+ |
+
java.lang.String |
+getCommandsViaString()
+This function returns a String instead of a String Array
++ Use this function to return a String Array directly: |
+
int |
+getDecimals()
+Returns the number of decimal places for the values in the value[N] attributes of the current mode.
+ |
+
java.lang.String |
+getDriverName()
+Returns the name of the sensor device/driver.
+ |
+
java.lang.String |
+getMode()
+Returns the current mode.
+ |
+
java.lang.String[] |
+getModes()
+Returns a list of the valid modes for the sensor.
+ |
+
java.lang.String |
+getModesViaString()
+This function returns a String instead of a array.
++ Use this function to return a String Array directly: |
+
int |
+getNumValues()
+Returns the number of value[N] attributes that will return a valid value for the current mode.
+ |
+
java.lang.String |
+getUnits()
+Returns the units of the measured value for the current mode.
+ |
+
void |
+sendCommand(java.lang.String command)
+Generic method to send commands to the sensor controller.
+ |
+
void |
+setMode(java.lang.String mode)
+Sets the current mode.
+ |
+
getAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_PROPERTY_ADDRESS+
address property namepublic static final java.lang.String SYSFS_PROPERTY_COMMAND+
command property namepublic static final java.lang.String SYSFS_PROPERTY_COMMANDS+
commands property namepublic static final java.lang.String SYSFS_PROPERTY_DRIVER_NAME+
driver_name property namepublic static final java.lang.String SYSFS_PROPERTY_DECIMALS+
decimals property namepublic static final java.lang.String SYSFS_PROPERTY_MODE+
mode property namepublic static final java.lang.String SYSFS_PROPERTY_MODES+
modes property namepublic static final java.lang.String SYSFS_PROPERTY_NUM_VALUES+
num_values property namepublic static final java.lang.String SYSFS_PROPERTY_UNITS+
units property namepublic static final java.lang.String CLASS_NAME+
/sys/class/lego-sensor, and lego-sensor is the class name)public static final java.lang.String CLASS_NAME_PREFIX+
/sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)public Sensor(LegoPort port) + throws EV3LibraryException+
port - LegoPortEV3LibraryException - If I/O goes wrongInvalidPortException - If the specified LegoPort was invalidpublic java.lang.String getAddress() + throws EV3LibraryException+
getAddress in class DeviceEV3LibraryException - If I/O goes wrongpublic void sendCommand(java.lang.String command) + throws EV3LibraryException+
command - Command that suits for the sensor driverEV3LibraryException - If I/O goes wrongpublic java.lang.String getCommandsViaString() + throws EV3LibraryException+
+ getCommands() ++ Returns a list of the valid commands for the sensor. Returns -EOPNOTSUPP if no commands are supported.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getCommands() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getDecimals() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getDriverName() + throws EV3LibraryException+
getDriverName in class DeviceEV3LibraryException - If I/O goes wrongpublic java.lang.String getMode() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic void setMode(java.lang.String mode) + throws EV3LibraryException+
mode - The mode listed using getModes()EV3LibraryException - If I/O goes wrongpublic java.lang.String getModesViaString() + throws EV3LibraryException+
+ getModes() ++ Returns a list of the valid modes for the sensor.
EV3LibraryException - If I/O goes wrongpublic java.lang.String[] getModes() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getNumValues() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic java.lang.String getUnits() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class SoundSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
boolean |
+autoSwitchMode |
+
static java.lang.String |
+DRIVER_NAME
+This device's default driver name
+ |
+
static java.lang.String |
+SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE
+Sound pressure Low Sysfs required mode
+ |
+
static int |
+SYSFS_SOUND_PRESSURE_LOW_VALUE_INDEX
+Sound pressure Low Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_SOUND_PRESSURE_REQUIRED_MODE
+Sound pressure Sysfs required mode
+ |
+
static int |
+SYSFS_SOUND_PRESSURE_VALUE_INDEX
+Sound pressure Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
SoundSensor(LegoPort port)
+Creates a new SoundSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
float |
+getSoundPressure()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
float |
+getSoundPressureLow()
+A measurement of the measured sound pressure level, as a percent.
+ |
+
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_SOUND_PRESSURE_REQUIRED_MODE+
public static final int SYSFS_SOUND_PRESSURE_VALUE_INDEX+
public static final java.lang.String SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE+
public static final int SYSFS_SOUND_PRESSURE_LOW_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public boolean autoSwitchMode+
public SoundSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a SoundSensorEV3LibraryException - If I/O goes wrongpublic float getSoundPressure() + throws InvalidModeException, + EV3LibraryException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public float getSoundPressureLow() + throws InvalidModeException, + EV3LibraryException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class TouchSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
boolean |
+autoSwitchMode |
+
static java.lang.String |
+DRIVER_NAME_EV3
+This device's default driver name (EV3 Touch Sensor)
+ |
+
static java.lang.String |
+DRIVER_NAME_NXT
+This device's default driver name (NXT Touch Sensor)
+ |
+
static java.lang.String |
+SYSFS_REQUIRED_MODE
+Sysfs class TouchSensor required mode
+ |
+
static int |
+SYSFS_VALUE_INDEX
+Sysfs class TouchSensor Value Index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
TouchSensor(LegoPort port)
+Creates a new TouchSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
boolean |
+isPressed()
+A boolean indicating whether the current touch sensor is being pressed.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_REQUIRED_MODE+
public static final int SYSFS_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME_EV3+
public static final java.lang.String DRIVER_NAME_NXT+
public boolean autoSwitchMode+
public TouchSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a TouchSensorEV3LibraryException - If I/O goes wrongpublic boolean isPressed() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class UltrasonicSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
boolean |
+autoSwitchMode |
+
static java.lang.String |
+DRIVER_NAME_EV3
+This device's default driver name (EV3 Ultrasonic Sensor)
+ |
+
static java.lang.String |
+DRIVER_NAME_NXT
+This device's default driver name (NXT Ultrasonic Sensor)
+ |
+
static java.lang.String |
+SYSFS_CM_MODE
+Distance in cm required Sysfs mode
+ |
+
static int |
+SYSFS_CM_VALUE_INDEX
+Distance in cm Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_IN_MODE
+Distance in inch required Sysfs mode
+ |
+
static int |
+SYSFS_IN_VALUE_INDEX
+Distance in inch Sysfs value index
+ |
+
static java.lang.String |
+SYSFS_OTHER_PRESENT_MODE
+Other present sensor detection required Sysfs mode
+ |
+
static int |
+SYSFS_OTHER_PRESENT_VALUE_INDEX
+Other present sensor detection Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
UltrasonicSensor(LegoPort port)
+Creates a new UltrasonicSensor instance.
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
float |
+getDistanceCentimeters()
+Measurement of the distance detected by the sensor, in centimeters.
+ |
+
float |
+getDistanceInches()
+Measurement of the distance detected by the sensor, in inches.
+ |
+
boolean |
+isAutoSwitchMode()
+Get whether Auto Switch Mode is enabled or disabled.
+ |
+
boolean |
+isOtherSensorPresent()
+Value indicating whether another ultrasonic sensor could be heard nearby.
+ |
+
void |
+setAutoSwitchMode(boolean autoswitch)
+Set Auto Switch Mode to be enabled or disabled.
++ (Default: enabled) |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSFS_CM_MODE+
public static final int SYSFS_CM_VALUE_INDEX+
public static final java.lang.String SYSFS_IN_MODE+
public static final int SYSFS_IN_VALUE_INDEX+
public static final java.lang.String SYSFS_OTHER_PRESENT_MODE+
public static final int SYSFS_OTHER_PRESENT_VALUE_INDEX+
public static final java.lang.String DRIVER_NAME_EV3+
public static final java.lang.String DRIVER_NAME_NXT+
public boolean autoSwitchMode+
public UltrasonicSensor(LegoPort port) + throws EV3LibraryException, + InvalidPortException, + InvalidSensorException+
port - LegoPortInvalidPortException - If the specified port wasn't validInvalidSensorException - If the specified sensor wasn't a UltrasonicSensorEV3LibraryException - If I/O goes wrongpublic float getDistanceCentimeters() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public float getDistanceInches() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public boolean isOtherSensorPresent() + throws EV3LibraryException, + InvalidModeException+
EV3LibraryException - If I/O goes wrongInvalidModeException - The mode selected wasn't valid, or Auto Switch Mode has disabled.public void setAutoSwitchMode(boolean autoswitch)+
autoswitch - A Booleanpublic boolean isAutoSwitchMode()+
public class PixyCmucam5.ModeAll
+extends java.lang.Object
+| Modifier and Type | +Method and Description | +
|---|---|
int |
+getHeight()
+Get the height
+ |
+
byte |
+getSignatureHighByte()
+Get the signature high byte
+ |
+
byte |
+getSignatureLowByte()
+Get the signature low byte
+ |
+
int |
+getWidth()
+Get the width
+ |
+
int |
+getX()
+Get the X point
+ |
+
int |
+getY()
+Get the Y point
+ |
+
boolean |
+isAutoSwitchMode()
+Returns whether it will auto switch mode or not.
+ |
+
void |
+setAutoSwitchMode(boolean autoSwitchMode)
+Sets whether it should switch mode automatically if the mode is invalid.
++ By default, it will auto switch mode. |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic void setAutoSwitchMode(boolean autoSwitchMode)+
autoSwitchMode - Switch or notpublic boolean isAutoSwitchMode()+
public byte getSignatureLowByte() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic byte getSignatureHighByte() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getX() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getY() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getWidth() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getHeight() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class PixyCmucam5.ModeSig
+extends java.lang.Object
+| Modifier and Type | +Method and Description | +
|---|---|
byte |
+getCount()
+Get the count
+ |
+
int |
+getHeight()
+Get the height
+ |
+
int |
+getWidth()
+Get the width
+ |
+
int |
+getX()
+Get the X point
+ |
+
int |
+getY()
+Get the Y point
+ |
+
boolean |
+isAutoSwitchMode()
+Returns whether it will auto switch mode or not.
+ |
+
void |
+setAutoSwitchMode(boolean autoSwitchMode)
+Sets whether it should switch mode automatically if the mode is invalid.
++ By default, it will auto switch mode. |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic void setAutoSwitchMode(boolean autoSwitchMode)+
autoSwitchMode - Switch or notpublic boolean isAutoSwitchMode()+
public byte getCount() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getX() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getY() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getWidth() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic int getHeight() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class PixyCmucam5 +extends I2CSensor+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+PixyCmucam5.ModeAll
+A class to communicate with Pixy Cmucam 5 using mode ALL
+ |
+
class |
+PixyCmucam5.ModeSig
+A class to communicate with Pixy Cmucam 5 using mode SIG[N]
+ |
+
| Modifier and Type | +Field and Description | +
|---|---|
static byte |
+ADDRESS
+Address
+ |
+
static java.lang.String |
+DRIVER_NAME
+Pixy Cmucam 5 Sensor driver name
+ |
+
static java.lang.String |
+MODE_ALL
+ALL Mode - All |
+
static int |
+MODE_ALL_HEIGHT_VALUE_INDEX
+ALL Mode - Height Sysfs value index |
+
static int |
+MODE_ALL_SIG_HIGH_BYTE_VALUE_INDEX
+ALL Mode - Signature high byte Sysfs value index |
+
static int |
+MODE_ALL_SIG_LOW_BYTE_VALUE_INDEX
+ALL Mode - Signature low byte Sysfs value index |
+
static int |
+MODE_ALL_WIDTH_VALUE_INDEX
+ALL Mode - Width Sysfs value index |
+
static int |
+MODE_ALL_X_VALUE_INDEX
+ALL Mode - X Sysfs value index |
+
static int |
+MODE_ALL_Y_VALUE_INDEX
+ALL Mode - Y Sysfs value index |
+
static int |
+MODE_SIG_COUNT_VALUE_INDEX
+SIG[N] Mode (All signature modes) - Count Sysfs value index |
+
static int |
+MODE_SIG_HEIGHT_VALUE_INDEX
+SIG[N] Mode (All signature modes) - Height Sysfs value index |
+
static int |
+MODE_SIG_WIDTH_VALUE_INDEX
+SIG[N] Mode (All signature modes) - Width Sysfs value index |
+
static int |
+MODE_SIG_X_VALUE_INDEX
+SIG[N] Mode (All signature modes) - X Sysfs value index |
+
static int |
+MODE_SIG_Y_VALUE_INDEX
+SIG[N] Mode (All signature modes) - Y Sysfs value index |
+
static java.lang.String |
+MODE_SIG1
+SIG1 Mode - Signature #1 |
+
static java.lang.String |
+MODE_SIG2
+SIG2 Mode - Signature #2 |
+
static java.lang.String |
+MODE_SIG3
+SIG3 Mode - Signature #3 |
+
static java.lang.String |
+MODE_SIG4
+SIG4 Mode - Signature #4 |
+
static java.lang.String |
+MODE_SIG5
+SIG5 Mode - Signature #5 |
+
static java.lang.String |
+MODE_SIG6
+SIG6 Mode - Signature #6 |
+
static java.lang.String |
+MODE_SIG7
+SIG7 Mode - Signature #7 |
+
static java.lang.String |
+PREFIX_MODE_SIG
+The prefix of modes
+SIG[N], where SIG is the prefix. |
+
static java.lang.String |
+PRODUCT_ID
+Product ID
+ |
+
static java.lang.String |
+VENDOR_ID
+Vendor ID
+ |
+
SYSFS_PROPERTY_FIRMWARE_VERSION, SYSFS_PROPERTY_POLL_MSCLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
PixyCmucam5(LegoPort port)
+Creates a new Pixy Cmucam 5 instnace
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
java.lang.String |
+getProductId()
+Returns the product id
+ |
+
java.lang.String |
+getVendorId()
+Returns the vendor id
+ |
+
PixyCmucam5.ModeAll |
+modeAll()
+Set mode to
+ALL.+ + And returns a ModeAll instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig(int sigcount)
+Set mode to
+SIG[N], where [N] is the integer parameter specified+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig1()
+Set mode to
+SIG1+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig2()
+Set mode to
+SIG2+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig3()
+Set mode to
+SIG3+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig4()
+Set mode to
+SIG4+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig5()
+Set mode to
+SIG5+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig6()
+Set mode to
+SIG6+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+modeSig7()
+Set mode to
+SIG7+ + And returns a ModeSig instance for communication. |
+
getFirmwareVersion, getPollMs, setPollMsgetAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String MODE_ALL+
ALL Mode - Allpublic static final int MODE_ALL_SIG_LOW_BYTE_VALUE_INDEX+
ALL Mode - Signature low byte Sysfs value indexpublic static final int MODE_ALL_SIG_HIGH_BYTE_VALUE_INDEX+
ALL Mode - Signature high byte Sysfs value indexpublic static final int MODE_ALL_X_VALUE_INDEX+
ALL Mode - X Sysfs value indexpublic static final int MODE_ALL_Y_VALUE_INDEX+
ALL Mode - Y Sysfs value indexpublic static final int MODE_ALL_WIDTH_VALUE_INDEX+
ALL Mode - Width Sysfs value indexpublic static final int MODE_ALL_HEIGHT_VALUE_INDEX+
ALL Mode - Height Sysfs value indexpublic static final int MODE_SIG_COUNT_VALUE_INDEX+
SIG[N] Mode (All signature modes) - Count Sysfs value indexpublic static final int MODE_SIG_X_VALUE_INDEX+
SIG[N] Mode (All signature modes) - X Sysfs value indexpublic static final int MODE_SIG_Y_VALUE_INDEX+
SIG[N] Mode (All signature modes) - Y Sysfs value indexpublic static final int MODE_SIG_WIDTH_VALUE_INDEX+
SIG[N] Mode (All signature modes) - Width Sysfs value indexpublic static final int MODE_SIG_HEIGHT_VALUE_INDEX+
SIG[N] Mode (All signature modes) - Height Sysfs value indexpublic static final java.lang.String PREFIX_MODE_SIG+
SIG[N], where SIG is the prefix.public static final java.lang.String MODE_SIG1+
SIG1 Mode - Signature #1public static final java.lang.String MODE_SIG2+
SIG2 Mode - Signature #2public static final java.lang.String MODE_SIG3+
SIG3 Mode - Signature #3public static final java.lang.String MODE_SIG4+
SIG4 Mode - Signature #4public static final java.lang.String MODE_SIG5+
SIG5 Mode - Signature #5public static final java.lang.String MODE_SIG6+
SIG6 Mode - Signature #6public static final java.lang.String MODE_SIG7+
SIG7 Mode - Signature #7public static final java.lang.String VENDOR_ID+
public static final java.lang.String PRODUCT_ID+
public static final java.lang.String DRIVER_NAME+
public static final byte ADDRESS+
public PixyCmucam5(LegoPort port) + throws EV3LibraryException+
port - The LegoPort instanceEV3LibraryException - If I/O goes wrongpublic java.lang.String getVendorId()+
public java.lang.String getProductId()+
public PixyCmucam5.ModeAll modeAll()+
ALL.ModeAll instance for communication.public PixyCmucam5.ModeSig modeSig(int sigcount)+
SIG[N], where [N] is the integer parameter specifiedModeSig instance for communication.sigcount - The value [N] of mode SIG[N]. (e.g. SIG1 specify 1)public PixyCmucam5.ModeSig modeSig1()+
SIG1ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig2()+
SIG2ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig3()+
SIG3ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig4()+
SIG4ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig5()+
SIG5ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig6()+
SIG6ModeSig instance for communication.public PixyCmucam5.ModeSig modeSig7()+
SIG7ModeSig instance for communication.| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| Modifier and Type | +Method and Description | +
|---|---|
PixyCmucam5.ModeAll |
+PixyCmucam5.modeAll()
+Set mode to
+ALL.+ + And returns a ModeAll instance for communication. |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| Modifier and Type | +Method and Description | +
|---|---|
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig(int sigcount)
+Set mode to
+SIG[N], where [N] is the integer parameter specified+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig1()
+Set mode to
+SIG1+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig2()
+Set mode to
+SIG2+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig3()
+Set mode to
+SIG3+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig4()
+Set mode to
+SIG4+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig5()
+Set mode to
+SIG5+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig6()
+Set mode to
+SIG6+ + And returns a ModeSig instance for communication. |
+
PixyCmucam5.ModeSig |
+PixyCmucam5.modeSig7()
+Set mode to
+SIG7+ + And returns a ModeSig instance for communication. |
+
| Class | +Description | +
|---|---|
| PixyCmucam5 | +
+ Pixy Cmucam 5 for Lego
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| Class and Description | +
|---|
| PixyCmucam5.ModeAll
+ A class to communicate with Pixy Cmucam 5 using mode ALL
+ |
+
| PixyCmucam5.ModeSig
+ A class to communicate with Pixy Cmucam 5 using mode SIG[N]
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| Modifier and Type | +Class and Description | +
|---|---|
class |
+PixyCmucam5
+Pixy Cmucam 5 for Lego
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Modifier and Type | +Class and Description | +
|---|---|
class |
+ColorSensor
+LEGO EV3 color sensor.
+ |
+
class |
+GyroSensor
+LEGO EV3 gyro sensor.
+ |
+
class |
+I2CSensor
+A generic interface to control I2C-type EV3 sensors.
+ |
+
class |
+InfraredSensor
+LEGO EV3 infrared sensor.
+ |
+
class |
+LightSensor
+LEGO NXT Light Sensor
+ |
+
class |
+SoundSensor
+LEGO NXT Sound Sensor
+ |
+
class |
+TouchSensor |
+
class |
+UltrasonicSensor |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+PixyCmucam5
+Pixy Cmucam 5 for Lego
+ |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+DflexSensor |
+
| Modifier and Type | +Class and Description | +
|---|---|
class |
+EV3AnalogSensor
+Generic EV3 Analog Sensor driver
+ |
+
class |
+NXTAnalogSensor
+Generic NXT Analog Sensor driver
+ |
+
public class DflexSensor +extends NXTAnalogSensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+dFlex Sensor driver name
+ |
+
static java.lang.String |
+MODE_FLEX
+FLEX Mode - Flex |
+
static int |
+MODE_FLEX_VALUE_INDEX
+FLEX Mode - Flex Sysfs value index |
+
MODE_ANALOG_0, MODE_ANALOG_1, VALUE_INDEXCLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
DflexSensor(LegoPort port) |
+
getRawValue, getValue, setModeAnalog0, setModeAnalog1getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String MODE_FLEX+
FLEX Mode - Flexpublic static final int MODE_FLEX_VALUE_INDEX+
FLEX Mode - Flex Sysfs value indexpublic static final java.lang.String DRIVER_NAME+
public DflexSensor(LegoPort port) + throws EV3LibraryException+
EV3LibraryException| Class | +Description | +
|---|---|
| DflexSensor | ++ |
public class EV3AnalogSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+The EV3 Analog sensor driver name
+ |
+
static java.lang.String |
+MODE_ANALOG
+ANALOG Mode - Raw analog value |
+
static int |
+VALUE_INDEX
+The Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
EV3AnalogSensor(LegoPort port,
+ java.lang.String typeId)
+Creates a new EV3 analog sensor
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getRawValue()
+Returns the raw analog voltage / value (0-5000).
++ + This function does not calculate decimal places. |
+
float |
+getValue()
+Returns the raw analog voltage / value (0-5000), and with decimal places
+ |
+
void |
+setModeAnalog()
+Set mode as
+ANALOG Mode - Raw analog value |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String MODE_ANALOG+
ANALOG Mode - Raw analog valuepublic static final int VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public EV3AnalogSensor(LegoPort port, + java.lang.String typeId) + throws EV3LibraryException+
port - The LegoPort instancetypeId - The sensor type ID, see here for more details.EV3LibraryException - If I/O goes wrongpublic void setModeAnalog() + throws EV3LibraryException+
ANALOG Mode - Raw analog valueEV3LibraryException - If I/O goes wrongpublic int getRawValue() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic float getValue() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic class NXTAnalogSensor +extends Sensor+
| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+DRIVER_NAME
+The NXT Analog sensor driver name
+ |
+
static java.lang.String |
+MODE_ANALOG_0
+ANALOG-0 Mode - Raw analog value |
+
static java.lang.String |
+MODE_ANALOG_1
+ANALOG-1 Mode - Raw analog value, Pin 5 high |
+
static int |
+VALUE_INDEX
+The Sysfs value index
+ |
+
CLASS_NAME, CLASS_NAME_PREFIX, SYSFS_PROPERTY_ADDRESS, SYSFS_PROPERTY_COMMAND, SYSFS_PROPERTY_COMMANDS, SYSFS_PROPERTY_DECIMALS, SYSFS_PROPERTY_DRIVER_NAME, SYSFS_PROPERTY_MODE, SYSFS_PROPERTY_MODES, SYSFS_PROPERTY_NUM_VALUES, SYSFS_PROPERTY_UNITS| Constructor and Description | +
|---|
NXTAnalogSensor(LegoPort port)
+Creates a new NXT analog sensor
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
int |
+getRawValue()
+Returns the raw analog voltage / value (0-5000).
++ Both mode uses the same value index (value0) + + This function does not calculate decimal places. |
+
float |
+getValue()
+Returns the raw analog voltage / value (0-5000), and with decimal places
++ Both mode uses the same value index (value0) |
+
void |
+setModeAnalog0()
+Set mode as
+ANALOG-0 Mode - Raw analog value |
+
void |
+setModeAnalog1()
+Set mode as
+ANALOG-1 Mode - Raw analog value, Pin 5 high |
+
getAddress, getCommands, getCommandsViaString, getDecimals, getDriverName, getMode, getModes, getModesViaString, getNumValues, getUnits, sendCommand, setModegetAttribute, getClassFullName, getClassNamePrefix, getPort, isConnected, setAttribute, setClassFullname, setClassName, setClassNamePrefixequals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String MODE_ANALOG_0+
ANALOG-0 Mode - Raw analog valuepublic static final java.lang.String MODE_ANALOG_1+
ANALOG-1 Mode - Raw analog value, Pin 5 highpublic static final int VALUE_INDEX+
public static final java.lang.String DRIVER_NAME+
public NXTAnalogSensor(LegoPort port) + throws EV3LibraryException+
port - The LegoPort instanceEV3LibraryException - If I/O goes wrongpublic void setModeAnalog0() + throws EV3LibraryException+
ANALOG-0 Mode - Raw analog valueEV3LibraryException - If I/O goes wrongpublic void setModeAnalog1() + throws EV3LibraryException+
ANALOG-1 Mode - Raw analog value, Pin 5 highEV3LibraryException - If I/O goes wrongpublic int getRawValue() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrongpublic float getValue() + throws EV3LibraryException+
EV3LibraryException - If I/O goes wrong| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.di | ++ |
| Modifier and Type | +Class and Description | +
|---|---|
class |
+DflexSensor |
+
| Class | +Description | +
|---|---|
| EV3AnalogSensor | +
+ Generic EV3 Analog Sensor driver
+ |
+
| NXTAnalogSensor | +
+ Generic NXT Analog Sensor driver
+ |
+
| Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors.di | ++ |
| Class and Description | +
|---|
| NXTAnalogSensor
+ Generic NXT Analog Sensor driver
+ |
+
| Class | +Description | +
|---|---|
| ColorSensor | +
+ LEGO EV3 color sensor.
+ |
+
| GyroSensor | +
+ LEGO EV3 gyro sensor.
+ |
+
| I2CSensor | +
+ A generic interface to control I2C-type EV3 sensors.
+ |
+
| InfraredSensor | +
+ LEGO EV3 infrared sensor.
+ |
+
| LightSensor | +
+ LEGO NXT Light Sensor
+ |
+
| Sensor | +
+ The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
| SoundSensor | +
+ LEGO NXT Sound Sensor
+ |
+
| TouchSensor | ++ |
| UltrasonicSensor | ++ |
+ LegoPort port = new LegoPort(LegoPort.INPUT_1);
+ TouchSensor sensor = new TouchSensor(port);
+ while(true){
+ if(sensor.isPressed()){
+ System.out.println("Pressed!");
+ }
+ }
+ | Package | +Description | +
|---|---|
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| Class and Description | +
|---|
| Sensor
+ The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
| Class and Description | +
|---|
| I2CSensor
+ A generic interface to control I2C-type EV3 sensors.
+ |
+
| Sensor
+ The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
| Class and Description | +
|---|
| Sensor
+ The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
| Class and Description | +
|---|
| Sensor
+ The sensor class provides a uniform interface for using most of the sensors available for the EV3.
+ |
+
public class Sysfs
+extends java.lang.Object
+| Modifier and Type | +Field and Description | +
|---|---|
static java.lang.String |
+SYSTEM_CLASS_PATH
+The Sysfs class path (/sys/class/)
+ |
+
| Modifier and Type | +Method and Description | +
|---|---|
static java.io.File[] |
+getAllSubClass(java.lang.String class_name)
+Get all sub-class files
+ |
+
static java.lang.String |
+getAttribute(java.lang.String class_name,
+ java.lang.String property)
+Reads the property of the class specified.
+ |
+
static java.lang.String |
+getAttribute(java.lang.String class_name,
+ java.lang.String subclass,
+ java.lang.String property)
+Reads the property of the class and subclass specified.
+ |
+
static java.lang.String |
+searchClassFullName(java.lang.String classname,
+ java.lang.String fsFolderPrefix,
+ java.lang.String address)
+Search the full class name, using a class name, FS folder prefix and an address
+ |
+
static java.lang.String[] |
+separateSpace(java.lang.String space_array)
+A function to separate space from a spaced-array.
+ |
+
static void |
+setAttribute(java.lang.String class_name,
+ java.lang.String property,
+ java.lang.String new_value)
+Writes the property of the class specified.
+ |
+
static void |
+setAttribute(java.lang.String class_name,
+ java.lang.String subclass,
+ java.lang.String property,
+ java.lang.String new_value)
+Writes the property of the class and subclass specified.
+ |
+
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitpublic static final java.lang.String SYSTEM_CLASS_PATH+
public static java.io.File[] getAllSubClass(java.lang.String class_name)+
class_name - Main Class Namepublic static java.lang.String getAttribute(java.lang.String class_name, + java.lang.String property) + throws java.io.FileNotFoundException, + java.io.IOException+
class_name - The class nameproperty - The property name of the class.java.io.FileNotFoundException - If the specified class isn't exist.java.io.IOException - If the API couldn't read the class's propertypublic static java.lang.String getAttribute(java.lang.String class_name, + java.lang.String subclass, + java.lang.String property) + throws java.io.FileNotFoundException, + java.io.IOException+
class_name - The class name.subclass - The Sub-class name.property - The property name of the classjava.io.FileNotFoundException - If the specified class isn't exist.java.io.IOException - If the API couldn't read the class's propertypublic static void setAttribute(java.lang.String class_name, + java.lang.String subclass, + java.lang.String property, + java.lang.String new_value) + throws java.io.FileNotFoundException, + java.io.IOException+
class_name - The class name.subclass - The Sub-class name.property - The property name of the classnew_value - The new value of the propertyjava.io.FileNotFoundException - If the specified class isn't exist.java.io.IOException - If the API couldn't read the class's propertypublic static void setAttribute(java.lang.String class_name, + java.lang.String property, + java.lang.String new_value) + throws java.io.FileNotFoundException, + java.io.IOException+
class_name - The class name.property - The property name of the classnew_value - The new value of the propertyjava.io.FileNotFoundException - If the specified class isn't exist.java.io.IOException - If the API couldn't read the class's propertypublic static java.lang.String[] separateSpace(java.lang.String space_array)+
space_array - A stringpublic static java.lang.String searchClassFullName(java.lang.String classname, + java.lang.String fsFolderPrefix, + java.lang.String address)+
classname - The class Name (e.g. lego-port, tacho-motor)fsFolderPrefix - The FS folder prefix, without the value [N] (e.g. motor, sensor)address - Port address (e.g. outA, in1)| Class | +Description | +
|---|---|
| Sysfs | +
+ A class for reading/writing to the EV3 driver system classes
+ |
+
+ + diff --git a/doc-1.0.0-SNAPSHOT/overview-summary.html b/doc-1.0.0-SNAPSHOT/overview-summary.html new file mode 100644 index 0000000..60b9767 --- /dev/null +++ b/doc-1.0.0-SNAPSHOT/overview-summary.html @@ -0,0 +1,185 @@ + + + + + +
| Package | +Description | +
|---|---|
| org.ev3dev | +
+ Main package of ev3dev language binding
+ |
+
| org.ev3dev.exception | +
+ Exceptions that handles errors of I/O
+ |
+
| org.ev3dev.hardware | +
+ Hardware classes of EV3, to interact with them.
+ |
+
| org.ev3dev.hardware.motors | +
+ Motor classes.
+ |
+
| org.ev3dev.hardware.ports | +
+ LegoPort ports, such as LegoPort, SensorPort, MotorPort
+ |
+
| org.ev3dev.hardware.sensors | +
+ Sensor classes.
+ |
+
| org.ev3dev.hardware.sensors.charmedlabs | ++ |
| org.ev3dev.hardware.sensors.di | ++ |
| org.ev3dev.hardware.sensors.generic | ++ |
| org.ev3dev.io | +
+ API I/O Controls
+ |
+
' + reasonstr + '';
+ content += ' Button class
- * @throws InvalidButtonException If the specified button isn't a valid button.
- */
- public Button(int button) throws InvalidButtonException{
- if (button != BUTTON_UP && button != BUTTON_DOWN && button != BUTTON_LEFT &&
- button != BUTTON_RIGHT && button != BUTTON_ENTER && button != BUTTON_ENTER &&
- button != BUTTON_BACKSPACE){
- throw new InvalidButtonException("The button that you specified does not exist. Better use the integer fields like Button.BUTTON_UP");
- }
- this.button = button;
- }
-
- /**
- * Returns whether the button is pressed.
- * @return Boolean that the button is pressed.
- */
- public boolean isPressed(){
- try {
- DataInputStream in = new DataInputStream(new FileInputStream(SYSTEM_EVENT_PATH));
- byte[] val = new byte[16];
- in.readFully(val);
- in.close();
- return test_bit(button, val);
- } catch (FileNotFoundException e){
- System.err.println("Error: Are you running this on your EV3? You must run it on your EV3.\n If you still have problems, report a issue to \"mob41/ev3dev-lang-java\".");
- e.printStackTrace();
- System.exit(-1);
- return false;
- } catch (IOException e){
- System.err.println("### ERROR MESSAGE ###\nError: Unexpected error! Report an issue to \"mob41/ev3dev-lang-java\" now, with logs!\n === STACK TRACE ===");
- e.printStackTrace();
- System.err.println("=== END STACK TRACE ===\nError: Unexpected error! Report an issue to \"mob41/ev3dev-lang-java\" now, with logs!\n ### END MESSAGE ###");
- System.exit(-1);
- return false;
- }
- }
-
- private static boolean test_bit(int bit, byte[] bytes){
- return ((bytes[bit / 8] & (1 << (bit % 8))) == 1 ? false : true);
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/Device.java b/src/main/java/org/ev3dev/hardware/Device.java
deleted file mode 100644
index ae0262c..0000000
--- a/src/main/java/org/ev3dev/hardware/Device.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.io.IOException;
-
-import org.ev3dev.exception.EV3LibraryException;
-
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.io.Sysfs;
-
-/**
- * This is the base class that handles control tasks for a single port or index. The class must chose one device out of the available ports to control. Given an IO port (in the constructor), an implementation should:checkIsConnected() method
- * @return The filename inside the Sysfs class (e.g. "/sys/class/motor/motor0" motor0 is the full name)
- */
- public String getClassFullName(){
- return classNamePrefix;
- }
-
- /***
- * Reads the property specified.
- * @param property The property name
- * @return The value of the property
- */
- public final String getAttribute(String property) throws EV3LibraryException{
- try {
- String str = Sysfs.getAttribute(className, classFullName, property);
- connected = true;
- return str;
- } catch (IOException e){
- connected = false;
- throw new EV3LibraryException("Get device attribute failed: " + property, e);
- }
- }
-
- /***
- * Writes the property specified.
- * @param property The property name
- * @param new_value The new value of the property
- */
- public final void setAttribute(String property, String new_value) throws EV3LibraryException{
- try {
- Sysfs.setAttribute(className, classFullName, property, new_value);
- connected = true;
- } catch (IOException e){
- connected = false;
- throw new EV3LibraryException("Set device attribute failed: " + property, e);
- }
- }
-
- private boolean checkIsConnected(){
- try {
- classFullName = Sysfs.searchClassFullName(className, classNamePrefix, address);
- } catch (Exception ignore){
- classFullName = null;
- return false;
- }
- return classFullName != null;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/ev3dev/hardware/LCD.java b/src/main/java/org/ev3dev/hardware/LCD.java
deleted file mode 100644
index 3d1d485..0000000
--- a/src/main/java/org/ev3dev/hardware/LCD.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.ev3dev.exception.EV3LibraryException;
-
-/**
- * Provides an interface to draw to the EV3's LCD
- * @author Anthony
- *
- */
-public class LCD {
-
- public static final String FB_PATH = "/dev/fb0";
-
- //This should not be hard-coded, however just for testing
- public static final int SCREEN_WIDTH = 178;
-
- public static final int SCREEN_HEIGHT = 128;
-
- public LCD() {
-
- }
-
- /**
- * Draws a byte array into the EV3 framebuffer
- * @param data Byte array to be drawn (128 (height) * 178 / 8 (length) = 3072 bytes)
- * @throws EV3LibraryException
- */
- public void draw(byte[] data) throws EV3LibraryException{
- File file = new File(FB_PATH);
- if (!file.exists()){
- throw new EV3LibraryException("The framebuffer device does not exist! Are you using a EV3?");
- }
- try {
- DataOutputStream out = new DataOutputStream(new FileOutputStream(file));
- out.write(data);
- out.flush();
- out.close();
- } catch (IOException e) {
- throw new EV3LibraryException("Unable to draw the LCD", e);
- }
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/LCDGraphics.java b/src/main/java/org/ev3dev/hardware/LCDGraphics.java
deleted file mode 100644
index c36a65c..0000000
--- a/src/main/java/org/ev3dev/hardware/LCDGraphics.java
+++ /dev/null
@@ -1,351 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Image;
-import java.awt.Rectangle;
-import java.awt.Shape;
-import java.awt.image.ImageObserver;
-import java.text.AttributedCharacterIterator;
-
-import org.ev3dev.exception.EV3LibraryException;
-
-public class LCDGraphics extends Graphics {
-
- public static final int LINE_LEN = 24;
-
- public static final int ROWS = 128;
-
- public static final int BUF_SIZE = LINE_LEN * ROWS;
-
- private LCD lcd;
-
- private boolean whiteColor = false;
-
- private byte[] buf;
-
- private int transx = 0;
-
- private int transy = 0;
-
- private Font font;
-
- public LCDGraphics(LCD lcd) {
- this.lcd = lcd;
- buf = new byte[BUF_SIZE];
- }
-
- /**
- * Applies the Graphics context onto the ev3dev's LCD
- */
- public void flush(){
- lcd.draw(buf);
- }
-
- /**
- * Not implemented
- */
- @Override
- public Graphics create() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void translate(int x, int y) {
- this.transx = x;
- this.transy = y;
- }
-
- public void setWhiteColor(){
- whiteColor = true;
- }
-
- public void setBlackColor(){
- whiteColor = false;
- }
-
- @Override
- public Color getColor() {
- return whiteColor ? Color.WHITE : Color.BLACK;
- }
-
- @Override
- public void setColor(Color c) throws EV3LibraryException{
- if (c == null || !c.equals(Color.BLACK) || !c.equals(Color.WHITE)){
- throw new EV3LibraryException("The EV3 LCD only supports Color.BLACK and Color.WHITE");
- }
- whiteColor = c.equals(Color.WHITE);
- }
-
- /**
- * The ev3 LCD does not support PaintMode
- */
- @Override
- public void setPaintMode() {
- throw new EV3LibraryException("The EV3 LCD does not support PaintMode");
- }
-
- /**
- * The ev3 LCD does not support XORMode
- */
- @Override
- public void setXORMode(Color c1) {
- throw new EV3LibraryException("The EV3 LCD does not support XORMode");
- }
-
- /**
- * Not implemented
- */
- @Override
- public Font getFont() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void setFont(Font font) {
- // TODO Auto-generated method stub
-
- }
-
- /**
- * Not implemented
- */
- @Override
- public FontMetrics getFontMetrics(Font f) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Rectangle getClipBounds() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void clipRect(int x, int y, int width, int height) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void setClip(int x, int y, int width, int height) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public Shape getClip() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public void setClip(Shape clip) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void copyArea(int x, int y, int width, int height, int dx, int dy) {
-
- }
-
- @Override
- public void drawLine(int x1, int y1, int x2, int y2) { //Uses Bresenham's line algorithm
- boolean steep = Math.abs(y2 - y1) > Math.abs(x2 - x1);
-
- if (steep){
- int tmp = x1;
- x1 = y1;
- y1 = tmp;
-
- tmp = x2;
- x2 = y2;
- y2 = x2;
- }
-
- if (x1 > x2){
- int tmp = x1;
- x1 = x2;
- x2 = tmp;
-
- tmp = y1;
- y1 = y2;
- y2 = tmp;
- }
-
- double deltax = x2 - x1;
- double deltay = Math.abs(y2 - y1);
-
- double err = deltax / 2;
-
- int xlen = x2 - x1;
- int y = y1;
-
- int ystep;
- if (y1 < y2){
- ystep = 1;
- } else {
- ystep = -1;
- }
-
- for (int i = 0; i < xlen; i++){
- if (steep){
- plot(y,i);
- } else {
- plot(i,y);
- }
-
- err -= deltay;
- if (err < 0){
- y += ystep;
- err += deltax;
- }
- }
- }
-
- /**
- * Plot the specified (x,y) position with the selected color (Color.BLACK or Color.WHITE)
- * @param x Position x
- * @param y Position y
- */
- public void plot(int x, int y){
- buf[y * LINE_LEN + x / 8] = (byte) (whiteColor ? 0x00 : 0xff);
- }
-
- @Override
- public void fillRect(int x, int y, int width, int height) {
- for (int i = 0; i < height; i++){
- for (int j = 0; j < width; j++){
- buf[(((i+y) * LINE_LEN)) + (x + j) / 8] = (byte) (whiteColor ? 0x00 : 0xff);
- }
- }
- }
-
- @Override
- public void clearRect(int x, int y, int width, int height) {
- for (int i = 0; i < height; i++){
- for (int j = 0; j < width; j++){
- buf[(((i+y) * LINE_LEN)) + (x + j) / 8] = (byte) 0x00;
- }
- }
- }
-
- @Override
- public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawOval(int x, int y, int width, int height) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fillOval(int x, int y, int width, int height) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawString(String str, int x, int y) {
- System.out.println("Draw string");
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void drawString(AttributedCharacterIterator iterator, int x, int y) {
- System.out.println("Draw string2");
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
- ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2,
- Color bgcolor, ImageObserver observer) {
- // TODO Auto-generated method stub
- return false;
- }
-
- @Override
- public void dispose() {
- // TODO Auto-generated method stub
-
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/LED.java b/src/main/java/org/ev3dev/hardware/LED.java
deleted file mode 100644
index fc94c55..0000000
--- a/src/main/java/org/ev3dev/hardware/LED.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.io.File;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidLEDException;
-import org.ev3dev.io.Sysfs;
-
-/***
- * Any device controlled by the generic LED driver. max_brightness property name
- */
- public static final String SYSFS_PROPERTY_MAX_BRIGHTNESS = "max_brightness";
-
- /**
- * The Sysfs class's brightness property name
- */
- public static final String SYSFS_PROPERTY_BRIGHTNESS = "brightness";
-
- /**
- * The Sysfs class's trigger property name
- */
- public static final String SYSFS_PROPERTY_TRIGGER = "trigger";
-
- /**
- * The Sysfs class's delay_on property name
- */
- public static final String SYSFS_PROPERTY_DELAY_ON = "delay_on";
-
- /**
- * The Sysfs class's delay_off property name
- */
- public static final String SYSFS_PROPERTY_DELAY_OFF = "delay_off";
-
- /**
- * Left EV3 Button
- */
- public static final int LEFT = 0;
-
- /**
- * Right EV3 Button
- */
- public static final int RIGHT = 1;
-
- /**
- * Green color.
- */
- public static final int GREEN = 0;
-
- /**
- * Red color.
- */
- public static final int RED = 1;
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String CLASS_NAME = "leds";
-
- /**
- * Creates a new LED instance.
- * @param leftRightField The integer field from LED class (e.g. Button.LEFT, Button.RIGHT)
- * @param colorField The integer field from LED class (e.g. Button.GREEN, Button.RED)
- * @throws InvalidLEDException If the specified LEFT RIGHT field or color field isn't valid.
- */
- public LED(int leftRightField, int colorField) throws InvalidLEDException{
- super(CLASS_NAME);
- if (leftRightField != 0 && leftRightField != 1){
- throw new InvalidLEDException("You are not specifying a EV3_LEFT_LED or EV3_RIGHT_LED field!");
- }
- if (colorField != 0 && colorField != 1){
- throw new InvalidLEDException("You are not specifying a EV3_LED_GREEN or EV3_LED_RED field!");
- }
- String direction = leftRightField == 0 ? "left" : "right";
- String color = colorField == 0 ? "green" : "red";
-
- this.setClassFullname("ev3:" + direction + ":" + color + ":ev3dev");
- }
-
- /**
- * This function is for advanced users.- * LED led = new LED(Button.LEFT, Button.GREEN); - *- * Creates a new LED instance directly with a
ledName
- * @param ledName LED Name that exists in /sys/class/leds
- * @throws InvalidLEDException If the specified ledName does not exist
- */
- public LED(String ledName) throws InvalidLEDException{
- super(CLASS_NAME);
- File file = new File(Sysfs.getSysfsPath() + CLASS_NAME + "/" + ledName);
- if (!file.exists()){
- throw new InvalidLEDException("The specified LED does not exist");
- }
- this.setClassName(ledName);
- }
-
- /**
- * Returns the maximum allowable brightness value.
- * @return The maximum allowable brightness value.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getMaxBrightness() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_MAX_BRIGHTNESS);
- return Integer.parseInt(str);
- }
-
- /**
- * Gets the brightness level. Possible values are from 0 to max_brightness.
- * @return The brightness level
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getBrightness() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_BRIGHTNESS);
- return Integer.parseInt(str);
- }
-
- /**
- * Sets the brightness level. Possible values are from 0 to max_brightness.
- * @param brightness The brightness level
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setBrightness(int brightness) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_BRIGHTNESS, Integer.toString(brightness));
- }
-
- /**
- * This function only returns a String, a spaced-array String.- * getTriggers() - *- * Returns a list of available triggers. - * @return A spaced-array String - * @throws EV3LibraryException If I/O goes wrong - */ - public String getTriggersViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_TRIGGER); - } - - /** - * Returns a list of available triggers. - * @return A String Array with a list of available triggers - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getTriggers() throws EV3LibraryException{ - String str = getTriggersViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Gets the led trigger. A trigger is a kernel based source of led events. Triggers can either be simple or complex. - * A simple trigger isn't configurable and is designed to slot into existing subsystems with minimal additional code. - * Examples are the ide-disk and nand-disk triggers.
getTriggers()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setTrigger(String selector) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_TRIGGER, selector);
- }
-
- /**
- * The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
- * The on time can be specified via delay_on attribute in milliseconds.
- * @return The Delay_On Value in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDelay_On() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_DELAY_ON);
- return Integer.parseInt(str);
- }
-
- /**
- * The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
- * The off time can be specified via delay_off attribute in milliseconds.
- * @return The Delay_Off Value in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDelay_Off() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_DELAY_OFF);
- return Integer.parseInt(str);
- }
-
- /**
- * The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
- * The on time can be specified via delay_on attribute in milliseconds.
- * @param delay_on The Delay_On Value in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setDelay_On(int delay_on) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_DELAY_ON, Integer.toString(delay_on));
- }
-
- /**
- * The timer trigger will periodically change the LED brightness between 0 and the current brightness setting.
- * The off time can be specified via delay_off attribute in milliseconds.
- * @param delay_off The Delay_Off Value in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setDelay_Off(int delay_off) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_DELAY_OFF, Integer.toString(delay_off));
- }
-
- @Override
- public String getAddress() throws EV3LibraryException {
- return null;
- }
-
- @Override
- public String getDriverName() throws EV3LibraryException {
- return null;
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/ev3dev/hardware/PowerSupply.java b/src/main/java/org/ev3dev/hardware/PowerSupply.java
deleted file mode 100644
index 27eb760..0000000
--- a/src/main/java/org/ev3dev/hardware/PowerSupply.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.io.Sysfs;
-
-/***
- * A generic interface to read data from the system's power_supply class. Uses the built-in legoev3-battery if none is specified.
- * @author Anthony
- *
- */
-public class PowerSupply{
-
- /**
- * The Sysfs class's measured_current property name
- */
- public static final String SYSFS_MEASURED_CURRENT = "measured_current";
-
- /**
- * The Sysfs class's measured_voltage property name
- */
- public static final String SYSFS_MEASURED_VOLTAGE = "measured_voltage";
-
- /**
- * The Sysfs class's max_voltage property name
- */
- public static final String SYSFS_MAX_VOLTAGE = "max_voltage";
-
- /**
- * The Sysfs class's min_voltage property name
- */
- public static final String SYSFS_MIN_VOLTAGE = "min_voltage";
-
- /**
- * The Sysfs class's technology property name
- */
- public static final String SYSFS_TECHNOLOGY = "technology";
-
- /**
- * The Sysfs class's type property name
- */
- public static final String SYSFS_TYPE = "type";
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String POWER_SUPPLY_CLASS_NAME = "power_supply";
-
- /***
- * The measured current that the battery is supplying (in microamps)
- * @return Measured Current
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static int getMeasuredCurrent() throws EV3LibraryException{
- String str;
- try {
- str = Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_MEASURED_CURRENT);
- } catch (IOException e) {
- throw new EV3LibraryException("Get measured current attribute failed", e);
- }
- return Integer.parseInt(str);
- }
-
- /***
- * The measured voltage that the battery is supplying (in microvolts)
- * @return Measured Voltage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static int getMeasuredVoltage() throws EV3LibraryException{
- String str;
- try {
- str = Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_MEASURED_VOLTAGE);
- } catch (IOException e) {
- throw new EV3LibraryException("Get measured voltage attribute failed", e);
- }
- return Integer.parseInt(str);
- }
-
- /***
- * Get the maximum voltage
- * @return Maximum Voltage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static int getMaxVoltage() throws EV3LibraryException{
- String str;
- try {
- str = Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_MAX_VOLTAGE);
- } catch (IOException e) {
- throw new EV3LibraryException("Get max voltage attribute failed", e);
- }
- return Integer.parseInt(str);
- }
-
- /***
- * Get the minimum voltage
- * @return Minimum Voltage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static int getMinVoltage() throws EV3LibraryException{
- String str;
- try {
- str = Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_MIN_VOLTAGE);
- } catch (IOException e) {
- throw new EV3LibraryException("Get min voltage attribute failed", e);
- }
- return Integer.parseInt(str);
- }
-
- /***
- * Get the technology of this power supply
- * @return String
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static String getTechnology() throws EV3LibraryException{
- try {
- return Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_TECHNOLOGY);
- } catch (IOException e) {
- throw new EV3LibraryException("Get technology attribute failed", e);
- }
- }
-
- /***
- * Get the type of this power supply
- * @return String
- * @throws EV3LibraryException If I/O goes wrong
- */
- public static String getType() throws EV3LibraryException{
- try {
- return Sysfs.getAttribute(POWER_SUPPLY_CLASS_NAME, SYSFS_TYPE);
- } catch (IOException e) {
- throw new EV3LibraryException("Get type attribute failed", e);
- }
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/VLCDFrame.java b/src/main/java/org/ev3dev/hardware/VLCDFrame.java
deleted file mode 100644
index 972f43b..0000000
--- a/src/main/java/org/ev3dev/hardware/VLCDFrame.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.awt.BorderLayout;
-import java.awt.EventQueue;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.ImageIcon;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.Timer;
-import javax.swing.border.EmptyBorder;
-
-import org.ev3dev.hardware.VirtualLCD;
-import javax.swing.JLabel;
-import javax.swing.SwingConstants;
-import java.awt.Color;
-
-public class VLCDFrame extends JFrame {
-
- private JPanel contentPane;
- private VirtualLCD lcd;
- private Thread thread;
- private JLabel lblImg;
-
- /**
- * Create the frame.
- */
- public VLCDFrame(VirtualLCD vlcd) {
- setTitle("ev3dev-lang-java VirtualLCD");
- this.lcd = vlcd;
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- setBounds(100, 100, 418, 321);
- contentPane = new JPanel();
- contentPane.setBackground(Color.LIGHT_GRAY);
- contentPane.setBorder(null);
- contentPane.setLayout(new BorderLayout(0, 0));
- setContentPane(contentPane);
-
- lblImg = new JLabel("");
- lblImg.setHorizontalAlignment(SwingConstants.CENTER);
- contentPane.add(lblImg, BorderLayout.CENTER);
-
- thread = new Thread(new Runnable(){
-
- public void run() {
- lblImg.setIcon(new ImageIcon(lcd.getImage()));
- }
-
- });
- thread.start();
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/VirtualLCD.java b/src/main/java/org/ev3dev/hardware/VirtualLCD.java
deleted file mode 100644
index 930bd24..0000000
--- a/src/main/java/org/ev3dev/hardware/VirtualLCD.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.ev3dev.hardware;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Toolkit;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-
-import javax.imageio.ImageIO;
-
-/**
- * Provides an interface for developers to emulate the LCD in ev3
- * @author Anthony
- *
- */
-public class VirtualLCD extends LCD{
-
- private BufferedImage image;
-
- /**
- * Creates a new virtual LCD instance
- */
- public VirtualLCD(){
- //image = new BufferedImage(SCREEN_WIDTH, SCREEN_HEIGHT, BufferedImage.TYPE_INT_ARGB);
- try {
- image = ImageIO.read(VirtualLCD.class.getResource("/org/ev3dev/hardware/defaultvirtuallcd.fw.png"));
- } catch (IOException e) {
- }
- }
-
- /**
- * Returns the image drawn
- * @return BufferedImage
- */
- public BufferedImage getImage(){
- return image;
- }
-
- /**
- * Starts up an UI showing the virtual LCD
- */
- public void showVLCD(){
- VLCDFrame frame = new VLCDFrame(this);
- frame.setVisible(true);
- frame.setTitle(this.hashCode() + " - VirtualLCD");
- }
-
- /**
- * This function overrides the original draw() function to draw directly into a BufferedImage
- */
- @Override
- public void draw(byte[] data){
- if (data == null){
- return;
- }
-
- Graphics g = image.getGraphics();
- for (int i = 0; i < 128; i++){
- for (int j = 0; j < 178; j++){
- if (data[i * 24 + j / 8] == (byte) 0xff){
- g.setColor(Color.BLACK);
- g.drawLine(j, i, j, i);
- } else {
- g.setColor(Color.WHITE);
- g.drawLine(j, i, j, i);
- }
- }
- }
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/defaultvirtuallcd.fw.png b/src/main/java/org/ev3dev/hardware/defaultvirtuallcd.fw.png
deleted file mode 100644
index c6cb3ef..0000000
Binary files a/src/main/java/org/ev3dev/hardware/defaultvirtuallcd.fw.png and /dev/null differ
diff --git a/src/main/java/org/ev3dev/hardware/motors/DCMotor.java b/src/main/java/org/ev3dev/hardware/motors/DCMotor.java
deleted file mode 100644
index 2707c23..0000000
--- a/src/main/java/org/ev3dev/hardware/motors/DCMotor.java
+++ /dev/null
@@ -1,413 +0,0 @@
-package org.ev3dev.hardware.motors;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidMotorException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.hardware.Device;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.io.Sysfs;
-
-/**
- * The DC motor class provides a uniform interface for using regular DC motors
- * with no fancy controls or feedback. This includes LEGO MINDSTORMS RCX motors and LEGO Power Functions motors.
- * @author Anthony
- *
- */
-public class DCMotor extends Device{
-
- /**
- * The Sysfs class's address property name
- */
- public static final String SYSFS_PROPERTY_ADDRESS = "address";
-
- /**
- * The Sysfs class's command property name
- */
- public static final String SYSFS_PROPERTY_COMMAND = "command";
-
- /**
- * The Sysfs class's commands property name
- */
- public static final String SYSFS_PROPERTY_COMMANDS = "commands";
-
- /**
- * The Sysfs class's driver_name property name
- */
- public static final String SYSFS_PROPERTY_DRIVER_NAME = "driver_name";
-
- /**
- * The Sysfs class's duty_cycle property name
- */
- public static final String SYSFS_PROPERTY_DUTY_CYCLE = "duty_cycle";
-
- /**
- * The Sysfs class's duty_cycle_sp property name
- */
- public static final String SYSFS_PROPERTY_DUTY_CYCLE_SP = "duty_cycle_sp";
-
- /**
- * The Sysfs class's polarity property name
- */
- public static final String SYSFS_PROPERTY_POLARITY = "polarity";
-
- /**
- * The Sysfs class's ramp_up_sp property name
- */
- public static final String SYSFS_PROPERTY_RAMP_UP_SP = "ramp_up_sp";
-
- /**
- * The Sysfs class's ramp_down_sp property name
- */
- public static final String SYSFS_PROPERTY_RAMP_DOWN_SP = "ramp_down_sp";
-
- /**
- * The Sysfs class's state property name
- */
- public static final String SYSFS_PROPERTY_STATE = "state";
-
- /**
- * The Sysfs class's stop_action property name
- */
- public static final String SYSFS_PROPERTY_STOP_ACTION = "stop_action";
-
- /**
- * The Sysfs class's stop_actions property name
- */
- public static final String SYSFS_PROPERTY_STOP_ACTIONS = "stop_actions";
-
- /**
- * The Sysfs class's time_sp property name
- */
- public static final String SYSFS_PROPERTY_TIME_SP = "time_sp";
-
- /**
- * The Sysfs class's run-forever command
- */
- public static final String SYSFS_COMMAND_RUN_FOREVER = "run-forever";
-
- /**
- * The Sysfs class's run-timed command
- */
- public static final String SYSFS_COMMAND_RUN_TIMED = "run-timed";
-
- /**
- * The Sysfs class's run-direct command
- */
- public static final String SYSFS_COMMAND_RUN_DIRECT = "run-direct";
-
- /**
- * The Sysfs class's stop command
- */
- public static final String SYSFS_COMMAND_STOP = "stop";
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String CLASS_NAME = "dc-motor";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String CLASS_NAME_PREFIX = "motor";
-
- private String address;
-
- /***
- * Creates a new DC motor object.
- * @param port LegoPort
- * @throws EV3LibraryException If the LegoPort specified goes wrong
- */
- public DCMotor(LegoPort port) throws EV3LibraryException{
- super(port, CLASS_NAME, CLASS_NAME_PREFIX);
-
- address = port.getAddress();
-
- //Verify is the LegoPort connecting a motor / is a output
- if (!address.contains("out")){
- throw new InvalidPortException("The specified port (" + port.getAddress() + ") isn't a output.");
- } else if (!port.getStatus().equals(CLASS_NAME)){
- throw new InvalidMotorException("The specified port (" + port.getAddress() + ") isn't a motor (" + port.getStatus() + ")");
- }
- }
-
- /***
- * Get the address of this motor.
- * @return LegoPort address described in String
- * @throws EV3LibraryException If the motor doesn't exist or IO ERROR
- */
- public String getAddress() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_ADDRESS);
- }
-
- /***
- * Generic method to send commands to the motor controller.
- * @param command Command that suits for the motor driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void sendCommand(String command) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_COMMAND, command);
- }
-
- /***
- * Cause the motor to run until another command is sent
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runForever() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_RUN_FOREVER);
- }
-
- /***
- * Run the motor for the amount of time specified in time_sp
- * and then stop the motor using the command specified by
- * stop_command
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runTimed() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_RUN_TIMED);
- }
-
- /**
- * Runs the motor at the duty cycle specified by duty_cycle_sp.
- * Unlike other run commands, changing duty_cycle_sp while running
- * will take effect immediately.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runDirect() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_RUN_DIRECT);
- }
-
- /**
- * Stop any of the run commands before they are complete using the command specified by stop_command.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void stop() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_STOP);
- }
-
- /**
- * Returns a list of commands that are supported by the motor controller.
- * Possible values are run-forever, run-to-abs-pos, run-to-rel-pos,
- * run-timed, run-direct, stop and reset. Not all commands may be supported.
- * @return A String Arrays with all the supported commands
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String[] getCommands() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_COMMANDS);
- return Sysfs.separateSpace(str);
- }
-
- /**
- * Returns the name of the driver that provides this tacho motor device.
- * @return The name of the driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getDriverName() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_DRIVER_NAME);
- }
-
- /**
- * Returns the current duty cycle of the motor. Units are percent. Values are -100 to 100.
- * @return Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDutyCycle() throws EV3LibraryException{
- String dutycycle = this.getAttribute(SYSFS_PROPERTY_DUTY_CYCLE);
- return Integer.parseInt(dutycycle);
- }
-
- /**
- * Writing sets the duty cycle setpoint. Reading returns the current value. Units are in percent.
- * Valid values are -100 to 100. A negative value causes the motor to rotate in reverse.
- * This value is only used when speed_regulation is off.
- * @return Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDutyCycleSP() throws EV3LibraryException{
- String dutycyclesp = this.getAttribute(SYSFS_PROPERTY_DUTY_CYCLE_SP);
- return Integer.parseInt(dutycyclesp);
- }
-
- /**
- * Writing sets the duty cycle setpoint. Reading returns the current value. Units are in percent.
- * Valid values are -100 to 100. A negative value causes the motor to rotate in reverse.
- * This value is only used when speed_regulation is off.
- * @param sp Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setDutyCycleSP(int sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_DUTY_CYCLE_SP, Integer.toString(sp));
- }
-
- /**
- * Sets the polarity of the motor. With normal polarity, a positive duty cycle will cause the motor to rotate clockwise.
- * With inversed polarity, a positive duty cycle will cause the motor to rotate counter-clockwise. Valid values are normal and inversed.
- * @return The polarity of the motor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getPolarity() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_POLARITY);
- }
-
- /**
- * Sets the polarity of the motor. With normal polarity, a positive duty cycle will cause the motor to rotate clockwise. With inversed polarity,
- * a positive duty cycle will cause the motor to rotate counter-clockwise. Valid values are normal and inversed.
- * @param polarity The polarity of the motor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPolarity(String polarity) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_POLARITY, polarity);
- }
-
- /**
- * Writing sets the ramp up setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 0 to 100% duty
- * cycle over the span of this setpoint when starting the motor. If the maximum duty cycle is
- * limited by duty_cycle_sp or speed regulation,
- * the actual ramp time duration will be less than the setpoint.
- * @return The ramp-up set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getRamp_Up_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_RAMP_UP_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the ramp up setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 0 to 100% duty
- * cycle over the span of this setpoint when starting the motor. If the maximum duty cycle is
- * limited by duty_cycle_sp or speed regulation,
- * the actual ramp time duration will be less than the setpoint.
- * @param ramp_up_sp The ramp-up set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setRamp_Up_SP(int ramp_up_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_RAMP_UP_SP, Integer.toString(ramp_up_sp));
- }
-
- /**
- * Writing sets the ramp down setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value smaller than 0, the motor will ramp the power sent to the motor from 100% duty cycle down
- * to 0 over the span of this setpoint when stopping the motor. If the starting
- * duty cycle is less than 100%, the ramp time duration will be less than the full span of the setpoint.
- * @return The ramp-down set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getRamp_Down_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_RAMP_DOWN_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the ramp down setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value smaller than 0, the motor will ramp the power sent to the motor from 100% duty cycle down
- * to 0 over the span of this setpoint when stopping the motor. If the starting
- * duty cycle is less than 100%, the ramp time duration will be less than the full span of the setpoint.
- * @param ramp_down_sp The ramp-down set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setRamp_Down_SP(int ramp_down_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_RAMP_DOWN_SP, Integer.toString(ramp_down_sp));
- }
-
- /**
- * This function returns a string that is likely a "spaced-array".- * getState() - *- * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list of state flags. String spaced-array - * @throws EV3LibraryException If I/O goes wrong - */ - public String getStateViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_STATE); - } - - /** - * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list(String array) of state flags. - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getState() throws EV3LibraryException{ - String str = getStateViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Reading returns the current stop command. Writing sets the stop command. The value determines the motors behavior when command is set to stop. - * Also, it determines the motors behavior when a run command completes. See stop_commands for a list of possible values. - * @return A stop command that listed using
getStopActions()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getStopAction() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_STOP_ACTION);
- }
-
- /**
- * Reading returns the current stop command. Writing sets the stop command. The value determines the motors behavior when command is set to stop.
- * Also, it determines the motors behavior when a run command completes. See stop_commands for a list of possible values.
- * @param stop_command A stop command that listed using getStopCommands()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setStopAction(String stop_command) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_STOP_ACTION, stop_command);
- }
-
- /**
- * This function returns a string that is likely a "spaced-array".- * getStopCommands() - *- * Returns a list of stop modes supported by the motor controller. Possible values are coast, - * brake and hold. coast means that power will be removed from the motor and it will freely - * coast to a stop. brake means that power will be removed from the motor and a passive - * electrical load will be placed on the motor. This is usually done by shorting the motor - * terminals together. This load will absorb the energy from the rotation of the motors - * and cause the motor to stop more quickly than coasting. hold does not remove power from - * the motor. Instead it actively try to hold the motor at the current position. - * If an external force tries to turn the motor, the motor will 'push back' to maintain its position. - * @return A list of stop modes supported by the motor controller - * @throws EV3LibraryException If I/O goes wrong - */ - public String getStopActionsViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_STOP_ACTIONS); - } - - /** - * Returns a list of stop modes supported by the motor controller. Possible values are coast, - * brake and hold. coast means that power will be removed from the motor and it will freely - * coast to a stop. brake means that power will be removed from the motor and a passive - * electrical load will be placed on the motor. This is usually done by shorting the motor - * terminals together. This load will absorb the energy from the rotation of the motors - * and cause the motor to stop more quickly than coasting. hold does not remove power from - * the motor. Instead it actively try to hold the motor at the current position. - * If an external force tries to turn the motor, the motor will 'push back' to maintain its position. - * @return A list of stop modes supported by the motor controller - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getStopActions() throws EV3LibraryException{ - String str = getStopActionsViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Writing specifies the amount of time the motor will run when using the run-timed command. Reading returns the current value. Units are in milliseconds. - * @return Amount of time in ms - * @throws EV3LibraryException If I/O goes wrong - */ - public int getTime_SP() throws EV3LibraryException{ - String str = this.getAttribute(SYSFS_PROPERTY_TIME_SP); - return Integer.parseInt(str); - } - - /** - * Writing specifies the amount of time the motor will run when using the run-timed command. Reading returns the current value. Units are in milliseconds. - * @param time_sp Amount of time in ms - * @throws EV3LibraryException If I/O goes wrong - */ - public void setTime_SP(int time_sp) throws EV3LibraryException{ - this.setAttribute(SYSFS_PROPERTY_TIME_SP, Integer.toString(time_sp)); - } -} diff --git a/src/main/java/org/ev3dev/hardware/motors/FirgelliL12100Motor.java b/src/main/java/org/ev3dev/hardware/motors/FirgelliL12100Motor.java deleted file mode 100644 index 52b2cd9..0000000 --- a/src/main/java/org/ev3dev/hardware/motors/FirgelliL12100Motor.java +++ /dev/null @@ -1,80 +0,0 @@ -package org.ev3dev.hardware.motors; - -import org.ev3dev.exception.EV3LibraryException; -import org.ev3dev.exception.InvalidPortException; -import org.ev3dev.hardware.ports.LegoPort; - -public class FirgelliL12100Motor extends Motor { - - /** - * The Sysfs class's
count_per_m property name
- */
- public static final String SYSFS_PROPERTY_COUNT_PER_M = "count_per_m";
-
- /**
- * The Sysfs class's full_travel_count property name
- */
- public static final String SYSFS_PROPERTY_FULL_TRAVEL_COUNT = "full_travel_count";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String LINEAR_MOTOR_CLASS_NAME_PREFIX = "linear";
-
- /**
- * The driver name for the L12 EV3 100mm by Actuonix
- */
- public static final String DRIVER_NAME_100MM = "act-l12-ev3-100";
-
- public FirgelliL12100Motor(int portField) throws EV3LibraryException {
- this(new LegoPort(portField));
- }
-
- public FirgelliL12100Motor(LegoPort port) throws EV3LibraryException {
- super(port, LINEAR_MOTOR_CLASS_NAME_PREFIX);
- if (!port.getDriverName().equals(DRIVER_NAME_100MM)){
- throw new InvalidPortException("The port does not have a Firgelli L12 100 Motor.");
- }
- }
-
- /**
- * Do not use this on Firgelli L12 50/100 Motors (Linear motors).-1 will be returned instead, use getCountPerMetre()
- */
- @Override
- public int getCountPerRot() throws EV3LibraryException{
- return -1;
- }
-
- /**
- * Returns the number of tacho counts in one meter of travel of the motor.
- * Tacho counts are used by the position and speed attributes, so you can
- * use this value to convert from distance to tacho counts. (linear motors only)
- * @return Counts per metre
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getCountPerMetre() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String countpermetre = this.getAttribute(SYSFS_PROPERTY_COUNT_PER_M);
- return Integer.parseInt(countpermetre);
- }
-
- /**
- * Returns the number of tacho counts in the full travel of the motor.
- * When combined with the count_per_m attribute, you can use this value
- * to calculate the maximum travel distance of the motor.
- * (linear motors only)
- * @return Full Travel Count
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getFullTravelCount() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_FULL_TRAVEL_COUNT);
- return Integer.parseInt(str);
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/motors/FirgelliL1250Motor.java b/src/main/java/org/ev3dev/hardware/motors/FirgelliL1250Motor.java
deleted file mode 100644
index ea1d49f..0000000
--- a/src/main/java/org/ev3dev/hardware/motors/FirgelliL1250Motor.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.ev3dev.hardware.motors;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.hardware.ports.LegoPort;
-
-public class FirgelliL1250Motor extends Motor {
-
- /**
- * The Sysfs class's count_per_m property name
- */
- public static final String SYSFS_PROPERTY_COUNT_PER_M = "count_per_m";
-
- /**
- * The Sysfs class's full_travel_count property name
- */
- public static final String SYSFS_PROPERTY_FULL_TRAVEL_COUNT = "full_travel_count";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String LINEAR_MOTOR_CLASS_NAME_PREFIX = "linear";
-
- /**
- * The driver name for the L12 EV3 50mm by Actuonix
- */
- public static final String DRIVER_NAME_50MM = "act-l12-ev3-50";
-
- public FirgelliL1250Motor(int portField) throws EV3LibraryException {
- this(new LegoPort(portField));
- }
-
- public FirgelliL1250Motor(LegoPort port) throws EV3LibraryException {
- super(port, LINEAR_MOTOR_CLASS_NAME_PREFIX);
- if (!port.getDriverName().equals(DRIVER_NAME_50MM)){
- throw new InvalidPortException("The port does not have a Firgelli L12 50 Motor driver.");
- }
- }
-
- /**
- * Do not use this on Firgelli L12 50/100 Motors (Linear motors).-1 will be returned instead, use getCountPerMetre()
- */
- @Override
- public int getCountPerRot() throws EV3LibraryException{
- return -1;
- }
-
- /**
- * Returns the number of tacho counts in one meter of travel of the motor.
- * Tacho counts are used by the position and speed attributes, so you can
- * use this value to convert from distance to tacho counts. (linear motors only)
- * @return Counts per metre
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getCountPerMetre() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String countpermetre = this.getAttribute(SYSFS_PROPERTY_COUNT_PER_M);
- return Integer.parseInt(countpermetre);
- }
-
- /**
- * Returns the number of tacho counts in the full travel of the motor.
- * When combined with the count_per_m attribute, you can use this value
- * to calculate the maximum travel distance of the motor.
- * (linear motors only)
- * @return Full Travel Count
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getFullTravelCount() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_FULL_TRAVEL_COUNT);
- return Integer.parseInt(str);
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/motors/LargeMotor.java b/src/main/java/org/ev3dev/hardware/motors/LargeMotor.java
deleted file mode 100644
index 1cc063c..0000000
--- a/src/main/java/org/ev3dev/hardware/motors/LargeMotor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.ev3dev.hardware.motors;
-
-import java.io.IOException;
-
-import org.ev3dev.exception.InvalidMotorException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.hardware.ports.LegoPort;
-
-public class LargeMotor extends Motor {
-
- /**
- * This device's default driver name
- */
- public static final String DRIVER_NAME = "lego-ev3-l-motor";
-
- public LargeMotor(int portField) throws InvalidPortException, IOException {
- this(new LegoPort(portField));
- }
-
- public LargeMotor(LegoPort port) throws InvalidPortException, IOException, InvalidMotorException {
- super(port);
- String drivername = this.getDriverName();
- if (!drivername.equals(DRIVER_NAME)){
- throw new InvalidMotorException("The port is not connected to a LargeMotor (" + DRIVER_NAME + "): " + drivername);
- }
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/motors/MediumMotor.java b/src/main/java/org/ev3dev/hardware/motors/MediumMotor.java
deleted file mode 100644
index 1674c6f..0000000
--- a/src/main/java/org/ev3dev/hardware/motors/MediumMotor.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.ev3dev.hardware.motors;
-
-import java.io.IOException;
-
-import org.ev3dev.exception.InvalidMotorException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.hardware.ports.LegoPort;
-
-public class MediumMotor extends Motor {
-
- /**
- * This device's default driver name
- */
- public static final String DRIVER_NAME = "lego-ev3-m-motor";
-
- public MediumMotor(int portField) throws InvalidPortException, IOException {
- this(new LegoPort(portField));
- }
-
- public MediumMotor(LegoPort port) throws InvalidPortException, IOException, InvalidMotorException {
- super(port);
- String drivername = this.getDriverName();
- if (!drivername.equals(DRIVER_NAME)){
- throw new InvalidMotorException("The port is not connected to a LargeMotor (" + DRIVER_NAME + "): " + drivername);
- }
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/motors/Motor.java b/src/main/java/org/ev3dev/hardware/motors/Motor.java
deleted file mode 100644
index dff8009..0000000
--- a/src/main/java/org/ev3dev/hardware/motors/Motor.java
+++ /dev/null
@@ -1,815 +0,0 @@
-//-----------------------------------------------------------------------------
-//~autogen autogen-header
-
-//~autogen
-//-----------------------------------------------------------------------------
-
-package org.ev3dev.hardware.motors;
-
-//-----------------------------------------------------------------------------
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.hardware.Device;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.io.Sysfs;
-
-//-----------------------------------------------------------------------------
-
-//~autogen generic-classes classes.motor>currentClass
-
-
-//~autogen
-
-
-/**
- * The motor class provides a uniform interface for using motors with positional and directional feedback such as the EV3 and NXT motors.
- * This feedback allows for precise control of the motors. This is the most common type of motor, so we just call it motor.
- * @author Anthony
- *
- */
-public class Motor extends Device{
-
- /**
- * The Sysfs class's address property name
- */
- public static final String SYSFS_PROPERTY_ADDRESS = "address";
-
- /**
- * The Sysfs class's command property name
- */
- public static final String SYSFS_PROPERTY_COMMAND = "command";
-
- /**
- * The Sysfs class's commands property name
- */
- public static final String SYSFS_PROPERTY_COMMANDS = "commands";
-
- /**
- * The Sysfs class's count_per_rot property name
- */
- public static final String SYSFS_PROPERTY_COUNT_PER_ROT = "count_per_rot";
-
- /**
- * The Sysfs class's driver_name property name
- */
- public static final String SYSFS_PROPERTY_DRIVER_NAME = "driver_name";
-
- /**
- * The Sysfs class's duty_cycle property name
- */
- public static final String SYSFS_PROPERTY_DUTY_CYCLE = "duty_cycle";
-
- /**
- * The Sysfs class's duty_cycle_sp property name
- */
- public static final String SYSFS_PROPERTY_DUTY_CYCLE_SP = "duty_cycle_sp";
-
- /**
- * The Sysfs class's polarity property name
- */
- public static final String SYSFS_PROPERTY_POLARITY = "polarity";
-
- /**
- * The Sysfs class's position property name
- */
- public static final String SYSFS_PROPERTY_POSITION = "position";
-
- /**
- * The Sysfs class's position_p property name
- */
- public static final String SYSFS_PROPERTY_POSITION_P = "hold_pid/Kp";
-
- /**
- * The Sysfs class's position_i property name
- */
- public static final String SYSFS_PROPERTY_POSITION_I = "hold_pid/Ki";
-
- /**
- * The Sysfs class's position_d property name
- */
- public static final String SYSFS_PROPERTY_POSITION_D = "hold_pid/Kd";
-
- /**
- * The Sysfs class's position_sp property name
- */
- public static final String SYSFS_PROPERTY_POSITION_SP = "position_sp";
-
- /**
- * The Sysfs class's speed property name
- */
- public static final String SYSFS_PROPERTY_SPEED = "speed";
-
- /**
- * The Sysfs class's speed_sp property name
- */
- public static final String SYSFS_PROPERTY_SPEED_SP = "speed_sp";
-
- /**
- * The Sysfs class's ramp_up_sp property name
- */
- public static final String SYSFS_PROPERTY_RAMP_UP_SP = "ramp_up_sp";
-
- /**
- * The Sysfs class's ramp_down_sp property name
- */
- public static final String SYSFS_PROPERTY_RAMP_DOWN_SP = "ramp_down_sp";
-
- /**
- * The Sysfs class's state property name
- */
- public static final String SYSFS_PROPERTY_STATE = "state";
-
- /**
- * The Sysfs class's stop_action property name
- */
- public static final String SYSFS_PROPERTY_STOP_ACTION = "stop_action";
-
- /**
- * The Sysfs class's stop_actions property name
- */
- public static final String SYSFS_PROPERTY_STOP_ACTIONS = "stop_actions";
-
- /**
- * The Sysfs class's time_sp property name
- */
- public static final String SYSFS_PROPERTY_TIME_SP = "time_sp";
-
- /**
- * The Sysfs class's run-forever command
- */
- public static final String SYSFS_COMMAND_RUN_FOREVER = "run-forever";
-
- /**
- * The Sysfs class's run-to-abs-pos command
- */
- public static final String SYSFS_COMMAND_RUN_TO_ABS_POS = "run-to-abs-pos";
-
- /**
- * The Sysfs class's run-to-rel-pos command
- */
- public static final String SYSFS_COMMAND_RUN_TO_REL_POS = "run-to-rel-pos";
-
- /**
- * The Sysfs class's run-timed command
- */
- public static final String SYSFS_COMMAND_RUN_TIMED = "run-timed";
-
- /**
- * The Sysfs class's run-direct command
- */
- public static final String SYSFS_COMMAND_RUN_DIRECT = "run-direct";
-
- /**
- * The Sysfs class's stop command
- */
- public static final String SYSFS_COMMAND_STOP = "stop";
-
- /**
- * The Sysfs class's reset command
- */
- public static final String SYSFS_COMMAND_RESET = "reset";
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String CLASS_NAME = "tacho-motor";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String CLASS_NAME_PREFIX = "motor";
-
-//-----------------------------------------------------------------------------
-
- private String address;
-
-//-----------------------------------------------------------------------------
-
- /***
- * Creates a new motor object.
- * @param portField a LegoPort field (e.g. LegoPort.INPUT_1)
- * @throws EV3LibraryException If the LegoPort specified goes wrong
- */
- public Motor(int portField) throws EV3LibraryException{
- this(new LegoPort(portField));
- }
-
- /***
- * Creates a new motor object.
- * @param port LegoPort
- * @throws EV3LibraryException If the LegoPort specified goes wrong
- */
- public Motor(LegoPort port) throws EV3LibraryException{
- this(port, CLASS_NAME_PREFIX);
- }
-
- /***
- * Creates a new motor object.
- * @param port LegoPort
- * @param class_name_prefix Specify a class name prefix (e.g. motor[N], which "motor" is the prefix)
- * @throws EV3LibraryException If the LegoPort specified goes wrong
- */
- public Motor(LegoPort port, String class_name_prefix) throws EV3LibraryException{
- super(port, CLASS_NAME, CLASS_NAME_PREFIX);
- address = port.getAddress();
-
- //Verify is the LegoPort connecting a motor / is a output
- if (!address.contains("out")){
- throw new InvalidPortException("The specified port (" + port.getAddress() + ") isn't a output.");
- } else if (!port.getStatus().equals(CLASS_NAME)){
- throw new InvalidPortException("The specified port (" + port.getAddress() + ") isn't a motor (" + port.getStatus() + ")");
- }
- }
-
-//-----------------------------------------------------------------------------
-
-//~autogen generic-get-set classes.motor>currentClass
- /***
- * Get the address of this motor.
- * @return LegoPort address described in String
- * @throws EV3LibraryException If the motor doesn't exist or IO ERROR
- */
- public String getAddress() throws EV3LibraryException{
- if (!this.isConnected()){
- return null;
- }
- return this.getAttribute(SYSFS_PROPERTY_ADDRESS);
- }
-
- /***
- * Generic method to send commands to the motor controller.
- * @param command Command that suits for the motor driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void sendCommand(String command) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_COMMAND, command);
- }
-
- /***
- * Cause the motor to run until another command is sent
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runForever() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RUN_FOREVER);
- }
-
- /***
- * Run to an absolute position specified by position_sp
- * and then stop using the command specified in stop_command
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runToAbsPos() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RUN_TO_ABS_POS);
- }
-
- /***
- * Run to a position relative to the current position value.
- * The new position will be current position + position_sp.
- * When the new position is reached, the motor will stop
- * using the command specified by stop_command.
- * @throws EV3LibraryException If I/O goes wrong.
- */
- public void runToRelPos() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RUN_TO_REL_POS);
- }
-
- /***
- * Run the motor for the amount of time specified in time_sp
- * and then stop the motor using the command specified by
- * stop_command
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runTimed() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RUN_TIMED);
- }
-
- /***
- * Run the motor at the duty cycle specified by duty_cycle_sp.
- * Unlike other run commands, changing duty_cycle_sp while
- * running will take effect immediately
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void runDirect() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RUN_DIRECT);
- }
-
- /**
- * Stop any of the run commands before they are complete using the command specified by stop_command.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void stop() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_STOP);
- }
-
- /**
- * Reset all of the motor parameter attributes to their default value. This will also have the effect of stopping the motor.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void reset() throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- sendCommand(SYSFS_COMMAND_RESET);
- }
-
- /**
- * Returns a list of commands that are supported by the motor controller.
- * Possible values are run-forever, run-to-abs-pos, run-to-rel-pos,
- * run-timed, run-direct, stop and reset. Not all commands may be supported.
- * @return A String Arrays with all the supported commands
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String[] getCommands() throws EV3LibraryException{
- if (!this.isConnected()){
- return null;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_COMMANDS);
- return Sysfs.separateSpace(str);
- }
-
- /**
- * Returns the number of tacho counts in one rotation of the motor.
- * Tacho counts are used by the position and speed attributes, so
- * you can use this value to convert rotations or degrees to tacho
- * counts. In the case of linear actuators, the units here will
- * be counts per centimeter.
- * @return Counts per cm
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getCountPerRot() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String countperrot = this.getAttribute(SYSFS_PROPERTY_COUNT_PER_ROT);
- return Integer.parseInt(countperrot);
- }
-
- //getCountPerM() Linear Motor (Just for mark down)
-
- /**
- * Returns the name of the driver that provides this tacho motor device.
- * @return The name of the driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getDriverName() throws EV3LibraryException{
- if (!this.isConnected()){
- return null;
- }
- return this.getAttribute(SYSFS_PROPERTY_DRIVER_NAME);
- }
-
-
- /**
- * Returns the current duty cycle of the motor. Units are percent. Values are -100 to 100.
- * @return Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDutyCycle() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String dutycycle = this.getAttribute(SYSFS_PROPERTY_DUTY_CYCLE);
- return Integer.parseInt(dutycycle);
- }
-
- /**
- * Writing sets the duty cycle setpoint. Reading returns the current value. Units are in percent.
- * Valid values are -100 to 100. A negative value causes the motor to rotate in reverse.
- * This value is only used when speed_regulation is off.
- * @return Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getDutyCycleSP() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String dutycyclesp = this.getAttribute(SYSFS_PROPERTY_DUTY_CYCLE_SP);
- return Integer.parseInt(dutycyclesp);
- }
-
- /**
- * Writing sets the duty cycle setpoint. Reading returns the current value. Units are in percent.
- * Valid values are -100 to 100. A negative value causes the motor to rotate in reverse.
- * This value is only used when speed_regulation is off.
- * @param sp Percentage
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setDutyCycleSP(int sp) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_DUTY_CYCLE_SP, Integer.toString(sp));
- }
-
- //getFullTravelCount() Linear Motor Only (Mark down)
-
- /**
- * Sets the polarity of the motor. With normal polarity, a positive duty cycle will cause the motor to rotate clockwise.
- * With inversed polarity, a positive duty cycle will cause the motor to rotate counter-clockwise. Valid values are normal and inversed.
- * @return The polarity of the motor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getPolarity() throws EV3LibraryException{
- if (!this.isConnected()){
- return null;
- }
- return this.getAttribute(SYSFS_PROPERTY_POLARITY);
- }
-
- /**
- * Sets the polarity of the motor. With normal polarity, a positive duty cycle will cause the motor to rotate clockwise. With inversed polarity,
- * a positive duty cycle will cause the motor to rotate counter-clockwise. Valid values are normal and inversed.
- * @param polarity The polarity of the motor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPolarity(String polarity) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POLARITY, polarity);
- }
-
- /**
- * Returns the current position of the motor in pulses of the rotary encoder. When the motor rotates clockwise, the position will increase. Likewise,
- * rotating counter-clockwise causes the position to decrease. Writing will set the position to that value.
- * @return The current position
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPosition() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute("position_p");
- return Integer.parseInt(str);
- }
-
- /**
- * Returns the current position of the motor in pulses of the rotary encoder. When the motor rotates clockwise, the position will increase.
- * Likewise, rotating counter-clockwise causes the position to decrease. Writing will set the position to that value.
- * @param position The current position
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition(int position) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POSITION, Integer.toString(position));
- }
-
- /**
- * The proportional constant for the position PID.
- * @return The proportional constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPosition_P() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_POSITION_P);
- return Integer.parseInt(str);
- }
-
- /**
- * The integral constant for the position PID.
- * @return The integral constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPosition_I() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_POSITION_I);
- return Integer.parseInt(str);
- }
-
- /**
- * The derivative constant for the position PID.
- * @return The derivative constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPosition_D() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_POSITION_D);
- return Integer.parseInt(str);
- }
-
- /**
- * The proportional constant for the position PID.
- * @param position_p The proportional constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition_P(int position_p) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POSITION_P, Integer.toString(position_p));
- }
-
- /**
- * The integral constant for the position PID.
- * @param position_i The integral constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition_I(int position_i) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POSITION_I, Integer.toString(position_i));
- }
-
- /**
- * The derivative constant for the position PID.
- * @param position_d The derivative constant for the position PID.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition_D(int position_d) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POSITION_D, Integer.toString(position_d));
- }
-
- /**
- * Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands. Reading returns the current value.
- * Units are in tacho counts. You can use the value returned by counts_per_rot to convert tacho counts to/from rotations or degrees.
- * @return The target position
- * @throws EV3LibraryException if I/O goes wrong
- */
- public int getPosition_SP() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_POSITION_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing specifies the target position for the run-to-abs-pos and run-to-rel-pos commands. Reading returns the current value.
- * Units are in tacho counts. You can use the value returned by counts_per_rot to convert tacho counts to/from rotations or degrees.
- * @param position_sp The target position
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition_SP(int position_sp) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_POSITION_SP, Integer.toString(position_sp));
- }
-
- /**
- * Returns the current motor speed in tacho counts per second. Note, this is not necessarily degrees
- * (although it is for LEGO motors). Use the count_per_rot attribute to convert this value to RPM or deg/sec.
- * @return The current speed
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getSpeed() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_SPEED);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the target speed in tacho counts per second used when speed_regulation is on.
- * Reading returns the current value. Use the count_per_rot attribute to convert RPM or deg/sec to tacho counts per second.
- * @return The target speed
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getSpeed_SP() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_SPEED);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the target speed in tacho counts per second used when speed_regulation is on. Reading returns the current value.
- * Use the count_per_rot attribute to convert RPM or deg/sec to tacho counts per second.
- * @param speed_sp The target speed
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setSpeed_SP(int speed_sp) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_SPEED_SP, Integer.toString(speed_sp));
- }
-
- /**
- * Writing sets the ramp up setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 0 to 100% duty
- * cycle over the span of this setpoint when starting the motor. If the maximum duty cycle is
- * limited by duty_cycle_sp or speed regulation,
- * the actual ramp time duration will be less than the setpoint.
- * @return The ramp-up set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getRamp_Up_SP() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_RAMP_UP_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the ramp up setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 0 to 100% duty
- * cycle over the span of this setpoint when starting the motor. If the maximum duty cycle is
- * limited by duty_cycle_sp or speed regulation,
- * the actual ramp time duration will be less than the setpoint.
- * @param ramp_up_sp The ramp-up set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setRamp_Up_SP(int ramp_up_sp) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_RAMP_UP_SP, Integer.toString(ramp_up_sp));
- }
-
- /**
- * Writing sets the ramp down setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 100% duty cycle down
- * to 0 over the span of this setpoint when stopping the motor. If the starting
- * duty cycle is less than 100%, the ramp time duration will be less than the full span of the setpoint.
- * @return The ramp-down set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getRamp_Down_SP() throws EV3LibraryException{
- if (!this.isConnected()){
- return -1;
- }
- String str = this.getAttribute(SYSFS_PROPERTY_RAMP_DOWN_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Writing sets the ramp down setpoint. Reading returns the current value. Units are in milliseconds.
- * When set to a value bigger than 0, the motor will ramp the power sent to the motor from 100% duty cycle down
- * to 0 over the span of this setpoint when stopping the motor. If the starting
- * duty cycle is less than 100%, the ramp time duration will be less than the full span of the setpoint.
- * @param ramp_down_sp The ramp-down set-point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setRamp_Down_SP(int ramp_down_sp) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_RAMP_DOWN_SP, Integer.toString(ramp_down_sp));
- }
-
- /**
- * This function returns a string that is likely a "spaced-array".- * getState() - *- * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list of state flags. String spaced-array - * @throws EV3LibraryException If I/O goes wrong - */ - public String getStateViaString() throws EV3LibraryException{ - if (!this.isConnected()){ - return null; - } - return this.getAttribute(SYSFS_PROPERTY_STATE); - } - - /** - * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list(String array) of state flags. - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getState() throws EV3LibraryException{ - if (!this.isConnected()){ - return null; - } - String str = getStateViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Reading returns the current stop command. Writing sets the stop command. The value determines the motors behavior when command is set to stop. - * Also, it determines the motors behavior when a run command completes. See stop_commands for a list of possible values. - * @return A stop command that listed using
getStopCommands()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getStopAction() throws EV3LibraryException{
- if (!this.isConnected()){
- return null;
- }
- return this.getAttribute(SYSFS_PROPERTY_STOP_ACTION);
- }
-
- /**
- * Reading returns the current stop command. Writing sets the stop command. The value determines the motors behavior when command is set to stop.
- * Also, it determines the motors behavior when a run command completes. See stop_commands for a list of possible values.
- * @param stop_action A stop command that listed using getStopCommands()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setStopAction(String stop_action) throws EV3LibraryException{
- if (!this.isConnected()){
- return;
- }
- this.setAttribute(SYSFS_PROPERTY_STOP_ACTION, stop_action);
- }
-
- /**
- * This function returns a string that is likely a "spaced-array".- * getStopCommands() - *- * Returns a list of stop modes supported by the motor controller. Possible values are coast, - * brake and hold. coast means that power will be removed from the motor and it will freely - * coast to a stop. brake means that power will be removed from the motor and a passive - * electrical load will be placed on the motor. This is usually done by shorting the motor - * terminals together. This load will absorb the energy from the rotation of the motors - * and cause the motor to stop more quickly than coasting. hold does not remove power from - * the motor. Instead it actively try to hold the motor at the current position. - * If an external force tries to turn the motor, the motor will 'push back' to maintain its position. - * @return A list of stop modes supported by the motor controller - * @throws EV3LibraryException If I/O goes wrong - */ - public String getStopCommandsViaString() throws EV3LibraryException{ - if (!this.isConnected()){ - return null; - } - return this.getAttribute(SYSFS_PROPERTY_STOP_ACTIONS); - } - - /** - * Returns a list of stop modes supported by the motor controller. Possible values are coast, - * brake and hold. coast means that power will be removed from the motor and it will freely - * coast to a stop. brake means that power will be removed from the motor and a passive - * electrical load will be placed on the motor. This is usually done by shorting the motor - * terminals together. This load will absorb the energy from the rotation of the motors - * and cause the motor to stop more quickly than coasting. hold does not remove power from - * the motor. Instead it actively try to hold the motor at the current position. - * If an external force tries to turn the motor, the motor will 'push back' to maintain its position. - * @return A list of stop modes supported by the motor controller - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getStopCommands() throws EV3LibraryException{ - if (!this.isConnected()){ - return null; - } - String str = getStopCommandsViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Writing specifies the amount of time the motor will run when using the run-timed command. Reading returns the current value. Units are in milliseconds. - * @return Amount of time in ms - * @throws EV3LibraryException If I/O goes wrong - */ - public int getTime_SP() throws EV3LibraryException{ - if (!this.isConnected()){ - return -1; - } - String str = this.getAttribute(SYSFS_PROPERTY_TIME_SP); - return Integer.parseInt(str); - } - - /** - * Writing specifies the amount of time the motor will run when using the run-timed command. Reading returns the current value. Units are in milliseconds. - * @param time_sp Amount of time in ms - * @throws EV3LibraryException If I/O goes wrong - */ - public void setTime_SP(int time_sp) throws EV3LibraryException{ - if (!this.isConnected()){ - return; - } - this.setAttribute(SYSFS_PROPERTY_TIME_SP, Integer.toString(time_sp)); - } - -//~autogen -} -//----------------------------------------------------------------------------- \ No newline at end of file diff --git a/src/main/java/org/ev3dev/hardware/motors/NXTMotor.java b/src/main/java/org/ev3dev/hardware/motors/NXTMotor.java deleted file mode 100644 index 499e8b8..0000000 --- a/src/main/java/org/ev3dev/hardware/motors/NXTMotor.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.ev3dev.hardware.motors; - -import java.io.IOException; - -import org.ev3dev.exception.InvalidMotorException; -import org.ev3dev.exception.InvalidPortException; -import org.ev3dev.hardware.ports.LegoPort; - -public class NXTMotor extends Motor { - - /** - * This device's default driver name - */ - public static final String DRIVER_NAME = "lego-nxt-motor"; - - public NXTMotor(int portField) throws InvalidPortException, IOException { - this(new LegoPort(portField)); - } - - public NXTMotor(LegoPort port) throws InvalidPortException, IOException { - super(port); - String drivername = port.getDriverName(); - if (!drivername.equals(DRIVER_NAME)){ - throw new InvalidMotorException("The port is not connected to a Lego NXT Motor (" + DRIVER_NAME + "): " + drivername); - } - } - -} diff --git a/src/main/java/org/ev3dev/hardware/motors/ServoMotor.java b/src/main/java/org/ev3dev/hardware/motors/ServoMotor.java deleted file mode 100644 index bd22e42..0000000 --- a/src/main/java/org/ev3dev/hardware/motors/ServoMotor.java +++ /dev/null @@ -1,300 +0,0 @@ -package org.ev3dev.hardware.motors; - -import org.ev3dev.exception.EV3LibraryException; -import org.ev3dev.exception.InvalidMotorException; -import org.ev3dev.exception.InvalidPortException; -import org.ev3dev.hardware.Device; -import org.ev3dev.hardware.ports.LegoPort; -import org.ev3dev.io.Sysfs; - -/** - * The servo motor class provides a uniform interface for using hobby type servo motors. - * @author Anthony - * - */ -public class ServoMotor extends Device{ - - /** - * The Sysfs class's
address property name
- */
- private static final String SYSFS_PROPERTY_ADDRESS = "address";
-
- /**
- * The Sysfs class's command property name
- */
- private static final String SYSFS_PROPERTY_COMMAND = "command";
-
- /**
- * The Sysfs class's driver_name property name
- */
- private static final String SYSFS_PROPERTY_DRIVER_NAME = "driver_name";
-
- /**
- * The Sysfs class's polarity property name
- */
- private static final String SYSFS_PROPERTY_POLARITY = "polarity";
-
- /**
- * The Sysfs class's position_sp property name
- */
- private static final String SYSFS_PROPERTY_POSITION_SP = "position_sp";
-
- /**
- * The Sysfs class's state property name
- */
- private static final String SYSFS_PROPERTY_STATE = "state";
-
- /**
- * The Sysfs class's max_pulse_sp property name
- */
- private static final String SYSFS_PROPERTY_MAX_PULSE_SP = "max_pulse_sp";
-
- /**
- * The Sysfs class's mid_pulse_sp property name
- */
- private static final String SYSFS_PROPERTY_MID_PULSE_SP = "mid_pulse_sp";
-
- /**
- * The Sysfs class's min_pulse_sp property name
- */
- private static final String SYSFS_PROPERTY_MIN_PULSE_SP = "min_pulse_sp";
-
- /**
- * The Sysfs class's rate_sp property name
- */
- private static final String SYSFS_PROPERTY_RATE_SP = "rate_sp";
-
- /**
- * The Sysfs class's run command
- */
- public static final String SYSFS_COMMAND_RUN = "run";
-
- /**
- * The Sysfs class's float command
- */
- public static final String SYSFS_COMMAND_FLOAT = "float";
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String CLASS_NAME = "servo-motor";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String CLASS_NAME_PREFIX = "motor";
-
- private String address;
-
- /***
- * Creates a new motor object.
- * @param port LegoPort
- * @throws InvalidPortException If the LegoPort isn't a OUTPUT, invalid or a tacho-motor.
- * @throws EV3LibraryException If the LegoPort specified goes wrong
- * @throws InvalidMotorException The specified motor wasn't a motor
- */
- public ServoMotor(LegoPort port) throws EV3LibraryException{
- super(port, CLASS_NAME, CLASS_NAME_PREFIX);
- address = port.getAddress();
-
- //Verify is the LegoPort connecting a motor / is a output
- if (!address.contains("out")){
- throw new InvalidPortException("The specified port (" + port.getAddress() + ") isn't a output.");
- } else if (!port.getStatus().equals(CLASS_NAME)){
- throw new InvalidMotorException("The specified port (" + port.getAddress() + ") isn't a motor (" + port.getStatus() + ")");
- }
- }
-
- /***
- * Get the address of this motor.
- * @return LegoPort address described in String
- * @throws EV3LibraryException If the motor doesn't exist or IO ERROR
- */
- public String getAddress() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_ADDRESS);
- }
-
- /***
- * Generic method to send commands to the motor controller.
- * @param command Command that suits for the motor driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void sendCommand(String command) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_COMMAND, command);
- }
-
- /***
- * Setting to run will cause the servo to be driven to the position_sp set in the position_sp attribute.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void run() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_RUN);
- }
-
- /***
- * Run to an absolute position specified by position_sp
- * and then stop using the command specified in stop_command
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void Float() throws EV3LibraryException{
- sendCommand(SYSFS_COMMAND_FLOAT);
- }
-
- /**
- * Returns the name of the driver that provides this tacho motor device.
- * @return The name of the driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getDriverName() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_DRIVER_NAME);
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp. Default value is 2400.
- * Valid values are 2300 to 2700. You must write to the position_sp attribute for changes to this attribute to take effect.
- * @return The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getMaxPulse_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_MAX_PULSE_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the maximum (clockwise) position_sp. Default value is 2400.
- * Valid values are 2300 to 2700. You must write to the position_sp attribute for changes to this attribute to take effect.
- * @param max_pulse_sp The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setMaxPulse_SP(int max_pulse_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_MAX_PULSE_SP, Integer.toString(max_pulse_sp));
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
- * Default value is 1500. Valid values are 1300 to 1700. For example, on a 180 degree servo, this would be 90 degrees.
- * On continuous rotation servo, this is the 'neutral' position_sp where the motor does not turn.
- * You must write to the position_sp attribute for changes to this attribute to take effect.
- * @return The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getMidPulse_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_MID_PULSE_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the mid position_sp.
- * Default value is 1500. Valid values are 1300 to 1700. For example, on a 180 degree servo, this would be 90 degrees.
- * On continuous rotation servo, this is the 'neutral' position_sp where the motor does not turn.
- * You must write to the position_sp attribute for changes to this attribute to take effect.
- * @param mid_pulse_sp The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setMidPulse_SP(int mid_pulse_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_MID_PULSE_SP, Integer.toString(mid_pulse_sp));
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
- * minimum (counter-clockwise) position_sp. Default value is 600. Valid values are 300 to 700.
- * You must write to the position_sp attribute for changes to this attribute to take effect.
- * @return The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getMinPulse_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_MIN_PULSE_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Used to set the pulse size in milliseconds for the signal that tells the servo to drive to the
- * minimum (counter-clockwise) position_sp. Default value is 600. Valid values are 300 to 700.
- * You must write to the position_sp attribute for changes to this attribute to take effect.
- * @param min_pulse_sp The pulse size in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setMinPulse_SP(int min_pulse_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_MIN_PULSE_SP, Integer.toString(min_pulse_sp));
- }
-
- /**
- * Sets the polarity of the servo. Valid values are normal and inversed. Setting the value to inversed will cause the position_sp value to be inversed.
- * i.e -100 will correspond to max_pulse_sp, and 100 will correspond to min_pulse_sp.
- * @return The polarity of the servo
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getPolarity() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_POLARITY);
- }
-
- /**
- * Sets the polarity of the servo. Valid values are normal and inversed. Setting the value to inversed will cause the position_sp value to be inversed.
- * i.e -100 will correspond to max_pulse_sp, and 100 will correspond to min_pulse_sp.
- * @param polarity The polarity of the servo
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPolarity(String polarity) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_POLARITY, polarity);
- }
-
- /**
- * Reading returns the current position_sp of the servo. Writing instructs the servo to move to the specified position_sp.
- * Units are percent. Valid values are -100 to 100 (-100% to 100%)
- * where -100 corresponds to min_pulse_sp, 0 corresponds to mid_pulse_sp and 100 corresponds to max_pulse_sp.
- * @return The current position_sp of the servo
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPosition_SP() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_POSITION_SP);
- return Integer.parseInt(str);
- }
-
- /**
- * Reading returns the current position_sp of the servo. Writing instructs the servo to move to the specified position_sp.
- * Units are percent. Valid values are -100 to 100 (-100% to 100%)
- * where -100 corresponds to min_pulse_sp, 0 corresponds to mid_pulse_sp and 100 corresponds to max_pulse_sp.
- * @param position_sp The current position_sp of the servo
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPosition_SP(int position_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_POSITION_SP, Integer.toString(position_sp));
- }
-
- /**
- * Sets the rate_sp at which the servo travels from 0 to 100.0% (half of the full range of the servo).
- * Units are in milliseconds. Example: Setting the rate_sp to 1000 means that it will take a 180 degree
- * servo 2 second to move from 0 to 180 degrees. Note: Some servo controllers may not support this
- * in which case reading and writing will fail with -EOPNOTSUPP.
- * In continuous rotation servos, this value will affect the rate_sp at which the speed ramps up or down.
- * @param rate_sp The rate_sp value
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setRate_SP(int rate_sp) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_RATE_SP, Integer.toString(rate_sp));
- }
-
- /**
- * This function returns a string that is likely a "spaced-array".- * getState() - *- * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list of state flags. String spaced-array - * @throws EV3LibraryException If I/O goes wrong - */ - public String getStateViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_STATE); - } - - /** - * Reading returns a list of state flags. Possible flags are running, ramping holding and stalled. - * @return A list(String array) of state flags. - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getState() throws EV3LibraryException{ - String str = getStateViaString(); - return Sysfs.separateSpace(str); - } -} diff --git a/src/main/java/org/ev3dev/hardware/motors/package-info.java b/src/main/java/org/ev3dev/hardware/motors/package-info.java deleted file mode 100644 index ec0e15d..0000000 --- a/src/main/java/org/ev3dev/hardware/motors/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Motor classes. e.g. Motor, DCMotor, ServoMotor etc.
- * LegoPort port = new LegoPort(LegoPort.OUTPUT_A); - * Motor motor = new Motor(port); - * motor.setDutyCycle_SP(50); //Set Speed - * motor.runForever(); //Run forever - *- */ -package org.ev3dev.hardware.motors; \ No newline at end of file diff --git a/src/main/java/org/ev3dev/hardware/package-info.java b/src/main/java/org/ev3dev/hardware/package-info.java deleted file mode 100644 index 8ef0581..0000000 --- a/src/main/java/org/ev3dev/hardware/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/*** - * Hardware classes of EV3, to interact with them. - * @author Anthony - * - */ -package org.ev3dev.hardware; \ No newline at end of file diff --git a/src/main/java/org/ev3dev/hardware/ports/LegoPort.java b/src/main/java/org/ev3dev/hardware/ports/LegoPort.java deleted file mode 100644 index 6ca28aa..0000000 --- a/src/main/java/org/ev3dev/hardware/ports/LegoPort.java +++ /dev/null @@ -1,202 +0,0 @@ -package org.ev3dev.hardware.ports; - -import java.io.IOException; - -import org.ev3dev.exception.EV3LibraryException; -import org.ev3dev.exception.InvalidPortException; -import org.ev3dev.io.Sysfs; - -/*** - * The lego-port class provides an interface for working with input and output ports that are compatible with LEGO MINDSTORMS RCX/NXT/EV3, - * LEGO WeDo and LEGO Power Functions sensors and motors. Supported devices include the LEGO MINDSTORMS EV3 Intelligent Brick, the LEGO - * WeDo USB hub and various sensor multiplexers from 3rd party manufacturers.
getModes()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setMode(String mode) throws EV3LibraryException{
- try {
- Sysfs.setAttribute(CLASS_NAME, "port" + port, "mode", mode);
- } catch (IOException e) {
- throw new EV3LibraryException("Set mode attribute failed", e);
- }
- }
-
- /**
- * For modes that support it, writing the name of a driver will cause a new device to be registered for that driver and
- * attached to this port. For example, since NXT/Analog sensors cannot be auto-detected, you must use this attribute to
- * load the correct driver. Returns -EOPNOTSUPP if setting a device is not supported.
- * @param driver A generic driver name
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setDevice(String driver) throws EV3LibraryException{
- try {
- Sysfs.setAttribute(CLASS_NAME, "port" + port, "set_device", driver);
- } catch (IOException e) {
- throw new EV3LibraryException("Set device attribute failed", e);
- }
- }
-
- /**
- * In most cases, reading status will return the same value as mode. In cases where there is an
- * auto mode additional values may be returned, such as no-device or error.
- * See individual port driver documentation for the full list of possible values.
- * @return The same as mode or some errors like: no-device or error.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getStatus() throws EV3LibraryException{
- String status;
- try {
- status = Sysfs.getAttribute(CLASS_NAME, "port" + port, "status");
- } catch (IOException e) {
- throw new EV3LibraryException("Get status attribute failed", e);
- }
- return status;
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/ports/MotorPort.java b/src/main/java/org/ev3dev/hardware/ports/MotorPort.java
deleted file mode 100644
index b4059cb..0000000
--- a/src/main/java/org/ev3dev/hardware/ports/MotorPort.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.ev3dev.hardware.ports;
-
-import org.ev3dev.exception.InvalidPortException;
-
-/***
- * MotorPort class for getting data from a specified motor port.fw_version property name
- */
- public static final String SYSFS_PROPERTY_FIRMWARE_VERSION = "fw_version";
-
- /**
- * The Sysfs class's poll_ms property name
- */
- public static final String SYSFS_PROPERTY_POLL_MS = "poll_ms";
-
- /**
- * This device's default driver name
- */
- public static final String DRIVER_NAME = "nxt-i2c-sensor";
-
- /**
- * Creates a new I2CSensor instance.
- * @param port LegoPort
- * @throws InvalidPortException If the specified port wasn't valid
- * @throws InvalidSensorException If the specified sensor wasn't a I2CSensor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public I2CSensor(LegoPort port) throws InvalidPortException, InvalidSensorException, EV3LibraryException {
- this(port, DRIVER_NAME);
- }
-
- /**
- * Creates a new I2CSensor instance, and an alternative driver name can be specified.
- * @param port LegoPort
- * @param target_driver_name The target driver name to be checked.
- * @throws InvalidPortException If the specified port wasn't valid
- * @throws InvalidSensorException If the specified sensor wasn't a I2CSensor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public I2CSensor(LegoPort port, String target_driver_name) throws InvalidPortException, InvalidSensorException, EV3LibraryException {
- super(port);
- if (!this.getDriverName().equals(target_driver_name)){
- throw new InvalidSensorException("The specified port is not a I2C sensor.");
- }
- }
-
- /**
- * Returns the firmware version of the sensor if available. Currently only I2C/NXT sensors support this.
- * @return The firmware version
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getFirmwareVersion() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_FIRMWARE_VERSION);
- }
-
- /**
- * Returns the polling period of the sensor in milliseconds. Writing sets the polling period. Setting to 0 disables polling.
- * Minimum value is hard coded as 50 msec. Returns -EOPNOTSUPP if changing polling is not supported.
- * Currently only I2C/NXT sensors support changing the polling period.
- * @return The polling period in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getPollMs() throws EV3LibraryException{
- String str = this.getAttribute(SYSFS_PROPERTY_POLL_MS);
- return Integer.parseInt(str);
- }
-
- /**
- * Sets the polling period of the sensor in milliseconds. Writing sets the polling period. Setting to 0 disables polling.
- * Minimum value is hard coded as 50 msec. Returns -EOPNOTSUPP if changing polling is not supported.
- * Currently only I2C/NXT sensors support changing the polling period.
- * @param ms The polling period in milliseconds
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setPollMs(int ms) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_POLL_MS, Integer.toString(ms));
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/InfraredSensor.java b/src/main/java/org/ev3dev/hardware/sensors/InfraredSensor.java
deleted file mode 100644
index 8f28447..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/InfraredSensor.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.ev3dev.hardware.sensors;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidModeException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.exception.InvalidSensorException;
-import org.ev3dev.hardware.ports.LegoPort;
-
-/**
- * LEGO EV3 infrared sensor.
- * @author Anthony
- *
- */
-public class InfraredSensor extends Sensor {
-
- /**
- * Proximity required Sysfs mode
- */
- public static final String SYSFS_PROXIMITY_REQUIRED_MODE = "IR-PROX";
-
- /**
- * Proximity Sysfs value index
- */
- public static final int SYSFS_PROXIMITY_VALUE_INDEX = 0;
-
- /**
- * This device's default driver name
- */
- public static final String DRIVER_NAME = "lego-ev3-ir";
-
- private boolean autoSwitchMode = true;
-
- /**
- * Creates a new InfraredSensor instance.
- * @param port LegoPort
- * @throws InvalidPortException If the specified port wasn't valid
- * @throws InvalidSensorException If the specified sensor wasn't a InfraredSensor
- * @throws EV3LibraryException If I/O goes wrong
- */
- public InfraredSensor(LegoPort port) throws EV3LibraryException, InvalidPortException, InvalidSensorException {
- super(port);
- if (!this.getDriverName().equals(DRIVER_NAME)){
- throw new InvalidSensorException("Can't create a InfraredSensor instance if the port isn't connected a infrared sensor!");
- }
- }
-
- /**
- * A measurement of the distance between the sensor and the remote, as a percentage. 100% is approximately 70cm/27in.
- * @return A measurement of the distance
- * @throws EV3LibraryException If I/O goes wrong
- * @throws InvalidModeException The mode selected wasn't valid, or Auto Switch Mode has disabled.
- */
- public int getProximity() throws InvalidModeException, EV3LibraryException{
- if (!this.getMode().equals(SYSFS_PROXIMITY_REQUIRED_MODE)){
- if (autoSwitchMode){
- this.setMode(SYSFS_PROXIMITY_REQUIRED_MODE);
- } else {
- throw new InvalidModeException("[Auto-switch is off] You are not using a correct mode(" + SYSFS_PROXIMITY_REQUIRED_MODE + ")! Yours: " + this.getMode());
- }
- }
- String str = this.getAttribute("value" + SYSFS_PROXIMITY_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Set Auto Switch Mode to be enabled or disabled.address property name
- */
- public static final String SYSFS_PROPERTY_ADDRESS = "address";
-
- /**
- * The Sysfs class's command property name
- */
- public static final String SYSFS_PROPERTY_COMMAND = "command";
-
- /**
- * The Sysfs class's commands property name
- */
- public static final String SYSFS_PROPERTY_COMMANDS = "commands";
-
- /**
- * The Sysfs class's driver_name property name
- */
- public static final String SYSFS_PROPERTY_DRIVER_NAME = "driver_name";
-
- /**
- * The Sysfs class's decimals property name
- */
- public static final String SYSFS_PROPERTY_DECIMALS = "decimals";
-
- /**
- * The Sysfs class's mode property name
- */
- public static final String SYSFS_PROPERTY_MODE = "mode";
-
- /**
- * The Sysfs class's modes property name
- */
- public static final String SYSFS_PROPERTY_MODES = "modes";
-
- /**
- * The Sysfs class's num_values property name
- */
- public static final String SYSFS_PROPERTY_NUM_VALUES = "num_values";
-
- /**
- * The Sysfs class's units property name
- */
- public static final String SYSFS_PROPERTY_UNITS = "units";
-
- /**
- * This Sysfs's class name (e.g. /sys/class/lego-sensor, and lego-sensor is the class name)
- */
- public static final String CLASS_NAME = "lego-sensor";
-
- /**
- * This Sysfs's class name prefix (e.g. /sys/class/lego-sensor/sensor0, and sensor is the class name prefix without the [N] value.)
- */
- public static final String CLASS_NAME_PREFIX = "sensor";
-
- /**
- * Creates a new Sensor instance using a LegoPort
- * @param port LegoPort
- * @throws EV3LibraryException If I/O goes wrong
- * @throws InvalidPortException If the specified LegoPort was invalid
- */
- public Sensor(LegoPort port) throws EV3LibraryException{
- super(port, CLASS_NAME, CLASS_NAME_PREFIX);
- }
-
- /**
- * Returns the name of the port that the sensor is connected to, e.g. ev3:in1.
- * I2C sensors also include the I2C address (decimal), e.g. ev3:in1:i2c8.
- * @return A sensor address
- * @throws EV3LibraryException If I/O goes wrong
- */
- public String getAddress() throws EV3LibraryException{
- return this.getAttribute(SYSFS_PROPERTY_ADDRESS);
- }
-
- /***
- * Generic method to send commands to the sensor controller.
- * @param command Command that suits for the sensor driver
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void sendCommand(String command) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_COMMAND, command);
- }
-
- /**
- * This function returns a String instead of a String Array- * getCommands() - *- * Returns a list of the valid commands for the sensor. Returns -EOPNOTSUPP if no commands are supported. - * @return A list of valid commands - * @throws EV3LibraryException If I/O goes wrong - */ - public String getCommandsViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_COMMANDS); - } - - /** - * Returns a list of the valid commands for the sensor. Returns -EOPNOTSUPP if no commands are supported. - * @return A list of valid commands - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getCommands() throws EV3LibraryException{ - String str = getCommandsViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Returns the number of decimal places for the values in the value[N] attributes of the current mode. - * @return The number of decimal places - * @throws EV3LibraryException If I/O goes wrong - */ - public int getDecimals() throws EV3LibraryException{ - String str = this.getAttribute(SYSFS_PROPERTY_DECIMALS); - return Integer.parseInt(str); - } - - /** - * Returns the name of the sensor device/driver. See the list of [supported sensors] for a complete list of drivers. - * @return The name of the sensor device or driver - * @throws EV3LibraryException If I/O goes wrong - */ - public String getDriverName() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_DRIVER_NAME); - } - - /** - * Returns the current mode. Writing one of the values returned by modes sets the sensor to that mode. - * @return The current mode - * @throws EV3LibraryException If I/O goes wrong - */ - public String getMode() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_MODE); - } - - /** - * Sets the current mode. Writing one of the values returned by modes sets the sensor to that mode. - * @param mode The mode listed using
getModes()
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setMode(String mode) throws EV3LibraryException{
- this.setAttribute(SYSFS_PROPERTY_MODE, mode);
- }
-
- /**
- * This function returns a String instead of a array.- * getModes() - *- * Returns a list of the valid modes for the sensor. - * @return A list of valid modes for the sensor - * @throws EV3LibraryException If I/O goes wrong - */ - public String getModesViaString() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_MODES); - } - - /** - * Returns a list of the valid modes for the sensor. - * @return A list of valid modes for the sensor - * @throws EV3LibraryException If I/O goes wrong - */ - public String[] getModes() throws EV3LibraryException{ - String str = getModesViaString(); - return Sysfs.separateSpace(str); - } - - /** - * Returns the number of value[N] attributes that will return a valid value for the current mode. - * @return The number if value[N] attributes - * @throws EV3LibraryException If I/O goes wrong - */ - public int getNumValues() throws EV3LibraryException{ - String str = this.getAttribute(SYSFS_PROPERTY_NUM_VALUES); - return Integer.parseInt(str); - } - - /** - * Returns the units of the measured value for the current mode. May return empty string - * @return The units of measured value - * @throws EV3LibraryException If I/O goes wrong - */ - public String getUnits() throws EV3LibraryException{ - return this.getAttribute(SYSFS_PROPERTY_UNITS); - } - -} diff --git a/src/main/java/org/ev3dev/hardware/sensors/SoundSensor.java b/src/main/java/org/ev3dev/hardware/sensors/SoundSensor.java deleted file mode 100644 index 8f4455b..0000000 --- a/src/main/java/org/ev3dev/hardware/sensors/SoundSensor.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.ev3dev.hardware.sensors; - -import org.ev3dev.exception.EV3LibraryException; -import org.ev3dev.exception.InvalidModeException; -import org.ev3dev.exception.InvalidPortException; -import org.ev3dev.exception.InvalidSensorException; -import org.ev3dev.hardware.ports.LegoPort; - -/** - * LEGO NXT Sound Sensor - * @author Anthony - * - */ -public class SoundSensor extends Sensor { - - /** - * Sound pressure Sysfs required mode - */ - public static final String SYSFS_SOUND_PRESSURE_REQUIRED_MODE = "DB"; - - /** - * Sound pressure Sysfs value index - */ - public static final int SYSFS_SOUND_PRESSURE_VALUE_INDEX = 0; - - /** - * Sound pressure Low Sysfs required mode - */ - public static final String SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE = "DBA"; - - /** - * Sound pressure Low Sysfs value index - */ - public static final int SYSFS_SOUND_PRESSURE_LOW_VALUE_INDEX = 0; - - /** - * This device's default driver name - */ - public static final String DRIVER_NAME = "lego-nxt-sound"; - - public boolean autoSwitchMode = true; - - /** - * Creates a new SoundSensor instance. - * @param port LegoPort - * @throws InvalidPortException If the specified port wasn't valid - * @throws InvalidSensorException If the specified sensor wasn't a SoundSensor - * @throws EV3LibraryException If I/O goes wrong - */ - public SoundSensor(LegoPort port) throws EV3LibraryException, InvalidPortException, InvalidSensorException { - super(port); - if(!this.getDriverName().equals(DRIVER_NAME)){ - throw new InvalidSensorException("Can't create a SoundSensor instance if the port isn't connected to a sound sensor!"); - } - } - - /** - * A measurement of the measured sound pressure level, as a percent. Uses a flat weighting. - * @return The measured sound pressure level - * @throws EV3LibraryException If I/O goes wrong - * @throws InvalidModeException The mode selected wasn't valid, or Auto Switch Mode has disabled. - */ - public float getSoundPressure() throws InvalidModeException, EV3LibraryException{ - if (!this.getMode().equals(SYSFS_SOUND_PRESSURE_REQUIRED_MODE)){ - if (autoSwitchMode){ - this.setMode(SYSFS_SOUND_PRESSURE_REQUIRED_MODE); - } else { - throw new InvalidModeException("[Auto-switch is off] You are not using a correct mode(" + SYSFS_SOUND_PRESSURE_REQUIRED_MODE + ")! Yours: " + this.getMode()); - } - } - String str = this.getAttribute("value" + SYSFS_SOUND_PRESSURE_VALUE_INDEX); - return Float.parseFloat(str); - } - - /** - * A measurement of the measured sound pressure level, as a percent. Uses A-weighting, which focuses on levels up to 55 dB. - * @return The measured sound pressure level, A-weighting. - * @throws EV3LibraryException If I/O goes wrong - * @throws InvalidModeException The mode selected wasn't valid, or Auto Switch Mode has disabled. - */ - public float getSoundPressureLow() throws InvalidModeException, EV3LibraryException{ - if (!this.getMode().equals(SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE)){ - if (autoSwitchMode){ - this.setMode(SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE); - } else { - throw new InvalidModeException("[Auto-switch is off] You are not using a correct mode(" + SYSFS_SOUND_PRESSURE_LOW_REQUIRED_MODE + ")! Yours: " + this.getMode()); - } - } - String str = this.getAttribute("value" + SYSFS_SOUND_PRESSURE_LOW_VALUE_INDEX); - return Float.parseFloat(str); - } - - /** - * Set Auto Switch Mode to be enabled or disabled.
ALL Mode - All
- */
- public static final String MODE_ALL = "ALL";
-
- /**
- * ALL Mode - Signature low byte Sysfs value index
- */
- public static final int MODE_ALL_SIG_LOW_BYTE_VALUE_INDEX = 0;
-
- /**
- * ALL Mode - Signature high byte Sysfs value index
- */
- public static final int MODE_ALL_SIG_HIGH_BYTE_VALUE_INDEX = 1;
-
- /**
- * ALL Mode - X Sysfs value index
- */
- public static final int MODE_ALL_X_VALUE_INDEX = 2;
-
- /**
- * ALL Mode - Y Sysfs value index
- */
- public static final int MODE_ALL_Y_VALUE_INDEX = 3;
-
- /**
- * ALL Mode - Width Sysfs value index
- */
- public static final int MODE_ALL_WIDTH_VALUE_INDEX = 4;
-
- /**
- * ALL Mode - Height Sysfs value index
- */
- public static final int MODE_ALL_HEIGHT_VALUE_INDEX = 5;
-
- /**
- * SIG[N] Mode (All signature modes) - Count Sysfs value index
- */
- public static final int MODE_SIG_COUNT_VALUE_INDEX = 0;
-
- /**
- * SIG[N] Mode (All signature modes) - X Sysfs value index
- */
- public static final int MODE_SIG_X_VALUE_INDEX = 1;
-
- /**
- * SIG[N] Mode (All signature modes) - Y Sysfs value index
- */
- public static final int MODE_SIG_Y_VALUE_INDEX = 2;
-
- /**
- * SIG[N] Mode (All signature modes) - Width Sysfs value index
- */
- public static final int MODE_SIG_WIDTH_VALUE_INDEX = 3;
-
- /**
- * SIG[N] Mode (All signature modes) - Height Sysfs value index
- */
- public static final int MODE_SIG_HEIGHT_VALUE_INDEX = 4;
-
- /**
- * The prefix of modes SIG[N], where SIG is the prefix.
- */
- public static final String PREFIX_MODE_SIG = "SIG";
-
- /**
- * SIG1 Mode - Signature #1
- */
- public static final String MODE_SIG1 = "SIG1";
-
- /**
- * SIG2 Mode - Signature #2
- */
- public static final String MODE_SIG2 = "SIG2";
-
- /**
- * SIG3 Mode - Signature #3
- */
- public static final String MODE_SIG3 = "SIG3";
-
- /**
- * SIG4 Mode - Signature #4
- */
- public static final String MODE_SIG4 = "SIG4";
-
- /**
- * SIG5 Mode - Signature #5
- */
- public static final String MODE_SIG5 = "SIG5";
-
- /**
- * SIG6 Mode - Signature #6
- */
- public static final String MODE_SIG6 = "SIG6";
-
- /**
- * SIG7 Mode - Signature #7
- */
- public static final String MODE_SIG7 = "SIG7";
-
- /**
- * Vendor ID
- */
- public static final String VENDOR_ID = "Pixy";
-
- /**
- * Product ID
- */
- public static final String PRODUCT_ID = "Pixy";
-
- /**
- * Pixy Cmucam 5 Sensor driver name
- */
- public static final String DRIVER_NAME = "pixy-lego";
-
- /**
- * Address
- */
- public static final byte ADDRESS = 0x01;
-
- /**
- * Creates a new Pixy Cmucam 5 instnace
- * @param port The LegoPort instance
- * @throws EV3LibraryException If I/O goes wrong
- */
- public PixyCmucam5Sensor(LegoPort port) throws EV3LibraryException {
- super(port, DRIVER_NAME);
- }
-
- /**
- * Returns the vendor id
- * @return Vendor Id
- */
- public String getVendorId(){
- return VENDOR_ID;
- }
-
- /**
- * Returns the product id
- * @return Product Id
- */
- public String getProductId(){
- return PRODUCT_ID;
- }
-
- /**
- * Set mode to ALL.ModeAll instance for communication.
- * @return ModeAll instance
- */
- public ModeAll modeAll(){
- setMode(MODE_ALL);
- return new ModeAll(MODE_ALL);
- }
-
- /**
- * Set mode to SIG[N], where [N] is the integer parameter specifiedModeSig instance for communication.
- * @param sigcount The value [N] of mode SIG[N]. (e.g. SIG1 specify 1)
- * @return ModeSig instance
- */
- public ModeSig modeSig(int sigcount){
- setMode(PREFIX_MODE_SIG + sigcount);
- return new ModeSig(PREFIX_MODE_SIG + sigcount);
- }
-
- /**
- * Set mode to SIG1ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig1(){
- return modeSig(1);
- }
-
- /**
- * Set mode to SIG2ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig2(){
- return modeSig(2);
- }
-
- /**
- * Set mode to SIG3ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig3(){
- return modeSig(3);
- }
-
- /**
- * Set mode to SIG4ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig4(){
- return modeSig(4);
- }
-
- /**
- * Set mode to SIG5ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig5(){
- return modeSig(5);
- }
-
- /**
- * Set mode to SIG6ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig6(){
- return modeSig(6);
- }
-
- /**
- * Set mode to SIG7ModeSig instance for communication.
- * @return ModeSig instance
- */
- public ModeSig modeSig7(){
- return modeSig(7);
- }
-
- /**
- * A class to communicate with Pixy Cmucam 5 using mode ALL
- * @author Anthony
- *
- */
- public class ModeAll {
-
- private final String mode;
-
- private boolean autoSwitchMode = true;
-
- private ModeAll(String mode){
- this.mode = mode;
- }
-
- /**
- * Check mode and switch automatically if autoSwitchMode is falseEV3LibraryException will be thrown.
- *
- * Formerly called Fix Mode.
- * @throws EV3LibraryException
- */
- private void fixMode() throws EV3LibraryException{
- String currMode = getMode();
- if (!currMode.equals(mode)){
- if (autoSwitchMode){
- setMode(mode);
- } else {
- throw new EV3LibraryException("[Auto Switch Mode Off] You cannot use this function of mode " + mode + " with the current mode: " + currMode);
- }
- }
- }
-
- /**
- * Sets whether it should switch mode automatically if the mode is invalid.
- * By default, it will auto switch mode.
- * @param autoSwitchMode Switch or not
- */
- public void setAutoSwitchMode(boolean autoSwitchMode){
- this.autoSwitchMode = autoSwitchMode;
- }
-
- /**
- * Returns whether it will auto switch mode or not.
- * @return Boolean
- */
- public boolean isAutoSwitchMode(){
- return autoSwitchMode;
- }
-
- /**
- * Get the signature low byte
- * @return A byte representing the signature low byte
- * @throws EV3LibraryException If I/O goes wrong
- */
- public byte getSignatureLowByte() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_SIG_LOW_BYTE_VALUE_INDEX);
- return Byte.parseByte(str);
- }
-
- /**
- * Get the signature high byte
- * @return A byte representing the signature high byte
- * @throws EV3LibraryException If I/O goes wrong
- */
- public byte getSignatureHighByte() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_SIG_HIGH_BYTE_VALUE_INDEX);
- return Byte.parseByte(str);
- }
-
- /**
- * Get the X point
- * @return X point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getX() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_X_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the Y point
- * @return Y point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getY() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_Y_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the width
- * @return Width
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getWidth() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_WIDTH_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the height
- * @return Height
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getHeight() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_ALL_HEIGHT_VALUE_INDEX);
- return Integer.parseInt(str);
- }
- }
-
- /**
- * A class to communicate with Pixy Cmucam 5 using mode SIG[N]
- * @author Anthony
- *
- */
- public class ModeSig {
-
- private final String mode;
-
- private boolean autoSwitchMode = true;
-
- private ModeSig(String mode){
- this.mode = mode;
- }
-
- /**
- * Check mode and switch automatically if autoSwitchMode is false
- * Otherwise, EV3LibraryException will be thrown.
- *
- * Formerly called Fix Mode.
- * @throws EV3LibraryException
- */
- private void fixMode() throws EV3LibraryException{
- String currMode = getMode();
- if (!currMode.equals(mode)){
- if (autoSwitchMode){
- setMode(mode);
- } else {
- throw new EV3LibraryException("[Auto Switch Mode Off] You cannot use this function of mode " + mode + " with the current mode: " + currMode);
- }
- }
- }
-
- /**
- * Sets whether it should switch mode automatically if the mode is invalid.
- * By default, it will auto switch mode.
- * @param autoSwitchMode Switch or not
- */
- public void setAutoSwitchMode(boolean autoSwitchMode){
- this.autoSwitchMode = autoSwitchMode;
- }
-
- /**
- * Returns whether it will auto switch mode or not.
- * @return Boolean
- */
- public boolean isAutoSwitchMode(){
- return autoSwitchMode;
- }
-
- /**
- * Get the count
- * @return Count
- * @throws EV3LibraryException If I/O goes wrong
- */
- public byte getCount() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_SIG_COUNT_VALUE_INDEX);
- return Byte.parseByte(str);
- }
-
- /**
- * Get the X point
- * @return X point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getX() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_SIG_X_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the Y point
- * @return Y point
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getY() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_SIG_Y_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the width
- * @return Width
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getWidth() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_SIG_WIDTH_VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Get the height
- * @return Height
- * @throws EV3LibraryException If I/O goes wrong
- */
- public int getHeight() throws EV3LibraryException{
- fixMode();
- String str = getAttribute("value" + MODE_SIG_HEIGHT_VALUE_INDEX);
- return Integer.parseInt(str);
- }
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/di/DflexSensor.java b/src/main/java/org/ev3dev/hardware/sensors/di/DflexSensor.java
deleted file mode 100644
index b441dd1..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/di/DflexSensor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.ev3dev.hardware.sensors.di;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.hardware.sensors.generic.NXTAnalogSensor;
-
-public class DflexSensor extends NXTAnalogSensor {
-
- /**
- * FLEX Mode - Flex
- */
- public static final String MODE_FLEX = "FLEX";
-
- /**
- * FLEX Mode - Flex Sysfs value index
- */
- public static final int MODE_FLEX_VALUE_INDEX = 0;
-
- /**
- * dFlex Sensor driver name
- */
- public static final String DRIVER_NAME = "di-dflex";
-
- /**
- * Creates a DflexSensor instance.
- * @param port The LegoPort instance
- * @throws EV3LibraryException If I/O goes wrong
- */
- public DflexSensor(LegoPort port) throws EV3LibraryException {
- super(port, DRIVER_NAME);
- }
-
- /**
- * Flex
- * @return an integer from 0-100
- */
- public int getFlex(){
- return Integer.parseInt(this.getAttribute("value" + MODE_FLEX_VALUE_INDEX));
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/fatcatlab/ADCAdapter.java b/src/main/java/org/ev3dev/hardware/sensors/fatcatlab/ADCAdapter.java
deleted file mode 100644
index ca32e5d..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/fatcatlab/ADCAdapter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.ev3dev.hardware.sensors.fatcatlab;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidModeException;
-import org.ev3dev.exception.InvalidSensorException;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.hardware.sensors.Sensor;
-
-public class ADCAdapter extends Sensor {
-
- /**
- * Channel 1 voltage Mode
- */
- public static final String MODE_CH1_VOLTAGE = "CH1-VOLTAGE";
-
- /**
- * Channel 1 voltage mode Sysfs value index
- */
- public static final int INDEX_MODE_CH1_VOLTAGE = 0;
-
- /**
- * Channel 2 voltage Mode
- */
- public static final String MODE_CH2_VOLTAGE = "CH2-VOLTAGE";
-
- /**
- * Channel 2 voltage mode Sysfs value index
- */
- public static final int INDEX_MODE_CH2_VOLTAGE = 0;
-
- /**
- * All channels voltage Mode
- */
- public static final String MODE_ALL_VOLTAGE = "VOLTAGE";
-
- /**
- * All channels mode channel 1 voltage Sysfs value index
- */
- public static final int INDEX_MODE_ALL_CH1_VOLTAGE = 0;
-
- /**
- * All channels mode channel 2 voltage Sysfs value index
- */
- public static final int INDEX_MODE_ALL_CH2_VOLTAGE = 1;
-
- /**
- * The property "valueX" prefix
- */
- public static final String PROPERTY_PREFIX = "value";
-
- /**
- * This device's default driver name
- */
- public static final String DRIVER_NAME = "fcl-adc";
-
- /**
- * Creates a new ADCAdapter instance
- * @param port LegoPort
- * @throws EV3LibraryException If I/O goes wrong
- */
- public ADCAdapter(LegoPort port) throws EV3LibraryException {
- super(port);
- if(!this.getDriverName().equals(DRIVER_NAME)){
- throw new InvalidSensorException("Can't create a ADCAdapter instance if the port isn't connected to a light sensor!");
- }
- }
-
- /**
- * Set the device mode as Channel 1 Voltage Mode
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsCh1() throws EV3LibraryException{
- setMode(MODE_CH1_VOLTAGE);
- }
-
- /**
- * Set the device mode as Channel 2 Voltage Mode
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsCh2() throws EV3LibraryException{
- setMode(MODE_CH2_VOLTAGE);
- }
-
- /**
- * Set the device mode as All Channels Voltage Mode
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsAllCh() throws EV3LibraryException{
- setMode(MODE_ALL_VOLTAGE);
- }
-
- /**
- * Gets the voltage in millivolts from channel 1. The device mode must be CH1-VOLTAGE or VOLTAGE. Otherwise, a InvalidModeException will be thrown.
- * @return millivolts in Integer
- * @throws EV3LibraryException If the mode is invalid or I/O goes wrong
- */
- public int getCh1Volt() throws EV3LibraryException{
- String mode = getAttribute(SYSFS_PROPERTY_MODE);
- if (mode.equals(MODE_CH1_VOLTAGE) || mode.equals(MODE_ALL_VOLTAGE)){
- String str = getAttribute(PROPERTY_PREFIX + INDEX_MODE_CH1_VOLTAGE);
- return Integer.parseInt(str);
- } else {
- throw new InvalidModeException("The Channel 1 voltage property cannot be accessed if the mode is not \"" + MODE_CH1_VOLTAGE + "\" or \"" + MODE_ALL_VOLTAGE + "\"");
- }
- }
-
- /**
- * Gets the voltage in millivolts from channel 2. The device mode must be CH2-VOLTAGE or VOLTAGE. Otherwise, a InvalidModeException will be thrown.
- * @return millivolts in Integer
- * @throws EV3LibraryException If the mode is invalid or I/O goes wrong
- */
- public int getCh2Volt() throws EV3LibraryException{
- String mode = getAttribute(SYSFS_PROPERTY_MODE);
- if (mode.equals(MODE_CH2_VOLTAGE) || mode.equals(MODE_ALL_VOLTAGE)){
- String str = getAttribute(PROPERTY_PREFIX + (mode.equals(MODE_ALL_VOLTAGE) ? INDEX_MODE_ALL_CH2_VOLTAGE : INDEX_MODE_CH1_VOLTAGE));
- return Integer.parseInt(str);
- } else {
- throw new InvalidModeException("The Channel 2 voltage property cannot be accessed if the mode is not \"" + MODE_CH2_VOLTAGE + "\" or \"" + MODE_ALL_VOLTAGE + "\"");
- }
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/generic/EV3AnalogSensor.java b/src/main/java/org/ev3dev/hardware/sensors/generic/EV3AnalogSensor.java
deleted file mode 100644
index c93248e..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/generic/EV3AnalogSensor.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.ev3dev.hardware.sensors.generic;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.hardware.sensors.Sensor;
-
-/**
- * Generic EV3 Analog Sensor driver
- * @author Anthony
- *
- */
-public class EV3AnalogSensor extends Sensor {
-
- /**
- * ANALOG Mode - Raw analog value
- */
- public static final String MODE_ANALOG = "ANALOG";
-
- /**
- * The Sysfs value index
- */
- public static final int VALUE_INDEX = 0;
-
- /**
- * The EV3 Analog sensor driver name
- */
- public static final String DRIVER_NAME = "ev3-analog";
-
- /**
- * Creates a new EV3 analog sensor
- * @param port The LegoPort instance
- * @param typeId The sensor type ID, see here for more details.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public EV3AnalogSensor(LegoPort port, String typeId) throws EV3LibraryException{
- super(port);
- String drivername = port.getDriverName();
- if (!drivername.equals(DRIVER_NAME + "-" + typeId)){
- throw new EV3LibraryException("The port is not connected to a EV3 analog sensor with type id \"" + typeId + "\": " + drivername);
- }
- }
-
- /**
- * Set mode as ANALOG Mode - Raw analog value
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAnalog() throws EV3LibraryException{
- setMode(MODE_ANALOG);
- }
-
- /**
- * Returns the raw analog voltage / value (0-5000).
- *
- * This function does not calculate decimal places.
- * @throws EV3LibraryException If I/O goes wrong
- * @return The voltage
- */
- public int getRawValue() throws EV3LibraryException{
- String str = getAttribute("value" + VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Returns the raw analog voltage / value (0-5000), and with decimal places
- * @throws EV3LibraryException If I/O goes wrong
- * @return The voltage
- */
- public float getValue() throws EV3LibraryException{
- float out = getRawValue();
-
- int dec = getDecimals();
- for (int i = 1; i <= dec; i++){
- out /= 10;
- }
-
- return out;
- }
-
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/generic/NXTAnalogSensor.java b/src/main/java/org/ev3dev/hardware/sensors/generic/NXTAnalogSensor.java
deleted file mode 100644
index 5aaaa7d..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/generic/NXTAnalogSensor.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.ev3dev.hardware.sensors.generic;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.hardware.sensors.Sensor;
-
-/**
- * Generic NXT Analog Sensor driver
- * @author Anthony
- *
- */
-public class NXTAnalogSensor extends Sensor {
-
- /**
- * ANALOG-0 Mode - Raw analog value
- */
- public static final String MODE_ANALOG_0 = "ANALOG-0";
-
- /**
- * ANALOG-1 Mode - Raw analog value, Pin 5 high
- */
- public static final String MODE_ANALOG_1 = "ANALOG-1";
-
- /**
- * The Sysfs value index
- */
- public static final int VALUE_INDEX = 0;
-
- /**
- * The NXT Analog sensor driver name
- */
- public static final String DRIVER_NAME = "nxt-analog";
-
- /**
- * Creates a new NXT analog sensor.
- * @param port The LegoPort instance
- * @throws EV3LibraryException If I/O goes wrong
- */
- public NXTAnalogSensor(LegoPort port) throws EV3LibraryException{
- this(port, DRIVER_NAME);
- }
-
- /**
- * Creates a new NXT analog sensor, and an alternative driver name can be specified.
- * @param port The LegoPort instance
- * @param target_driver_name The target driver name to be checked.
- * @throws EV3LibraryException If I/O goes wrong
- */
- public NXTAnalogSensor(LegoPort port, String target_driver_name) throws EV3LibraryException{
- super(port);
- String drivername = port.getDriverName();
- if (!drivername.equals(target_driver_name)){
- throw new EV3LibraryException("The port is not connected to a NXT analog sensor: " + drivername);
- }
- }
-
- /**
- * Set mode as ANALOG-0 Mode - Raw analog value
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAnalog0() throws EV3LibraryException{
- setMode(MODE_ANALOG_0);
- }
-
- /**
- * Set mode as ANALOG-1 Mode - Raw analog value, Pin 5 high
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAnalog1() throws EV3LibraryException{
- setMode(MODE_ANALOG_1);
- }
-
- /**
- * Returns the raw analog voltage / value (0-5000).
- * Both mode uses the same value index (value0)
- *
- * This function does not calculate decimal places.
- * @throws EV3LibraryException If I/O goes wrong
- * @return The voltage
- */
- public int getRawValue() throws EV3LibraryException{
- String str = getAttribute("value" + VALUE_INDEX);
- return Integer.parseInt(str);
- }
-
- /**
- * Returns the raw analog voltage / value (0-5000), and with decimal places
- * Both mode uses the same value index (value0)
- * @throws EV3LibraryException If I/O goes wrong
- * @return The voltage
- */
- public float getValue() throws EV3LibraryException{
- float out = getRawValue();
-
- int dec = getDecimals();
- for (int i = 1; i <= dec; i++){
- out /= 10;
- }
-
- return out;
- }
-
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/hitechnic/HTNXTColorSensor.java b/src/main/java/org/ev3dev/hardware/sensors/hitechnic/HTNXTColorSensor.java
deleted file mode 100644
index 832f475..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/hitechnic/HTNXTColorSensor.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.ev3dev.hardware.sensors.hitechnic;
-
-import org.ev3dev.exception.EV3LibraryException;
-import org.ev3dev.exception.InvalidPortException;
-import org.ev3dev.exception.InvalidSensorException;
-import org.ev3dev.hardware.ports.LegoPort;
-import org.ev3dev.hardware.sensors.I2CSensor;
-
-public class HTNXTColorSensor extends I2CSensor {
-
- /**
- * HiTechnic NXT Color sensor
- */
- public static final String DRIVER_NAME = "ht-nxt-color";
-
- /**
- * The vendor id of this sensor
- */
- public static final String VENDOR_ID = "HiTechnic";
-
- /**
- * The product id of this sensor
- */
- public static final String PRODUCT_ID = "Color";
-
- /**
- * Mode "Color"
- */
- public static final String MODE_COLOR = "COLOR";
-
- /**
- * Mode "Red component"
- */
- public static final String MODE_RED = "RED";
-
- /**
- * Mode "Green component"
- */
- public static final String MODE_GREEN = "GREEN";
-
- /**
- * Mode "Blue component"
- */
- public static final String MODE_BLUE = "BLUE";
-
- /**
- * Mode "Raw values"
- */
- public static final String MODE_RAW = "RAW";
-
- /**
- * Mode "Normalized values"
- */
- public static final String MODE_NORM = "NORM";
-
- /**
- * Mode "All values"
- */
- public static final String MODE_ALL = "ALL";
-
- /**
- * Color (0 to 17) Sysfs value index of mode "Color"
- */
- public static final int INDEX_MODE_COLOR_COLOR = 0;
-
- /**
- * Reflected light intensity (0 to 255) Sysfs value index of mode "Red","Green","Blue"
- */
- public static final int INDEX_REFLECTED = 0;
-
- /**
- * Red component color value (0 to 255) Sysfs value index of mode "Raw","Normalized values"
- */
- public static final int INDEX_RED_COMP = 0;
-
- /**
- * Green component color value (0 to 255) Sysfs value index of mode "Raw","Normalized values"
- */
- public static final int INDEX_GREEN_COMP = 1;
-
- /**
- * Blue component color value (0 to 255) Sysfs value index of mode "Raw","Normalized values"
- */
- public static final int INDEX_BLUE_COMP = 2;
-
- /**
- * ??? (Unknown) component color value (0 to 255) Sysfs value index of mode "Normalized values"
- */
- public static final int INDEX_MODE_NORM_UNKNOWN = 3;
-
- /**
- * Color value (0 to 17) Sysfs value index of mode "All"
- */
- public static final int INDEX_MODE_ALL_COLOR = 0;
-
- /**
- * Red component color value (0 to 255) Sysfs value index of mode "All"
- */
- public static final int INDEX_MODE_ALL_RED = 1;
-
- /**
- * Green component color value (0 to 255) Sysfs value index of mode "All"
- */
- public static final int INDEX_MODE_ALL_GREEN = 2;
-
- /**
- * Blue component color value (0 to 255) Sysfs value index of mode "All"
- */
- public static final int INDEX_MODE_ALL_BLUE = 3;
-
- /**
- * The attribute prefix before the value index
- */
- public static final String VALUE_PREFIX = "value";
-
- /**
- * I2C Address
- */
- public static final byte address = 0x01;
-
- /**
- * Creates a HTNXTColorSensor instance.
- * @param port The LegoPort instance
- * @throws EV3LibraryException If I/O goes wrong
- */
- public HTNXTColorSensor(LegoPort port) throws EV3LibraryException {
- super(port, DRIVER_NAME);
- }
-
- /**
- * Set mode as mode "Color"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsColor() throws EV3LibraryException {
- setMode(MODE_COLOR);
- }
-
- /**
- * Set mode as mode "Red"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsRed() throws EV3LibraryException {
- setMode(MODE_RED);
- }
-
- /**
- * Set mode as mode "Green"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsGreen() throws EV3LibraryException{
- setMode(MODE_GREEN);
- }
-
- /**
- * Set mode as mode "Blue"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsBlue() throws EV3LibraryException{
- setMode(MODE_BLUE);
- }
-
- /**
- * Set mode as mode "Raw"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsRaw() throws EV3LibraryException{
- setMode(MODE_RAW);
- }
-
- /**
- * Set mode as mode "Normalized values"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsNorm() throws EV3LibraryException{
- setMode(MODE_NORM);
- }
-
- /**
- * Set mode as mode "All"
- * @throws EV3LibraryException If I/O goes wrong
- */
- public void setModeAsAll() throws EV3LibraryException{
- setMode(MODE_ALL);
- }
-
- /**
- * This function requires mode COLOR or ALL.
- *
- * Get the color value from 0 to 17. Color values chart can be found at http://www.ev3dev.org/docs/sensors/hitechnic-nxt-color-sensor/
- * @return a integer from 0 to 17
- */
- public int getColor(){
- String str = getAttribute(VALUE_PREFIX + INDEX_MODE_COLOR_COLOR);
- return Integer.parseInt(str);
- }
-
- /**
- * This function requires mode RED, GREEN or BLUE.
- *
- * Get the reflected color intensity.
- * @return a integer from 0 to 255
- */
- public int getReflectedLightIntensity(){
- String str = getAttribute(VALUE_PREFIX + INDEX_REFLECTED);
- return Integer.parseInt(str);
- }
-
- /**
- * This function requires mode RAW, NORM or ALL.
- *
- * Get the red component
- * @return
- */
- public int getRedComponent(){
- String mode = getMode();
- String str;
- if (mode.equals(MODE_ALL)){
- str = getAttribute(VALUE_PREFIX + INDEX_MODE_ALL_RED);
- } else if (mode.equals(MODE_RAW) || mode.equals(MODE_NORM)){
- str = getAttribute(VALUE_PREFIX + INDEX_RED_COMP);
- } else {
- throw new EV3LibraryException("The function does not support with the current mode: " + mode);
- }
- return Integer.parseInt(str);
- }
-}
diff --git a/src/main/java/org/ev3dev/hardware/sensors/package-info.java b/src/main/java/org/ev3dev/hardware/sensors/package-info.java
deleted file mode 100644
index 7868f13..0000000
--- a/src/main/java/org/ev3dev/hardware/sensors/package-info.java
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Sensor classes. e.g. Sensor, TouchSensor, ColorSensor, UltrasonicSensor etc.
- * Example:
- *
- * LegoPort port = new LegoPort(LegoPort.INPUT_1);
- * TouchSensor sensor = new TouchSensor(port);
- * while(true){
- * if(sensor.isPressed()){
- * System.out.println("Pressed!");
- * }
- * }
- *
- * @author Anthony
- *
- */
-package org.ev3dev.hardware.sensors;
\ No newline at end of file
diff --git a/src/main/java/org/ev3dev/io/Sysfs.java b/src/main/java/org/ev3dev/io/Sysfs.java
deleted file mode 100644
index 90bc93f..0000000
--- a/src/main/java/org/ev3dev/io/Sysfs.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package org.ev3dev.io;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-/***
- * A class for reading/writing to the EV3 driver system classes
- * @author Anthony
- *
- */
-public class Sysfs {
-
- /**
- * The default ev3dev Sysfs class path (/sys/class/)
- */
- public static final String DEFAULT_SYSTEM_CLASS_PATH = "/sys/class/";
-
- private static String SYSTEM_CLASS_PATH = DEFAULT_SYSTEM_CLASS_PATH;
-
- /**
- * Get all sub-class files
- * @param class_name Main Class Name
- * @return File Array
- */
- public static File[] getAllSubClass(String class_name){
- File file = new File(SYSTEM_CLASS_PATH + class_name);
- File[] files = file.listFiles();
- return files;
- }
-
- /**
- * Returns the current ev3dev Sysfs path.
- * @return the current Sysfs path
- */
- public static String getSysfsPath(){
- return SYSTEM_CLASS_PATH;
- }
-
- /**
- * Modify the current ev3dev Sysfs path in this library instance to be used. This is probably used for debugging purpose. Any invalid modification to the path will break the library.
- * @param path The file-system path to be used
- */
- public static void setSysfsPath(String path){
- SYSTEM_CLASS_PATH = path;
- }
-
- /**
- * Sets the current ev3dev Sysfs path to default
- */
- public static void resetSysfsPath(){
- SYSTEM_CLASS_PATH = DEFAULT_SYSTEM_CLASS_PATH;
- }
-
- /***
- * Reads the property of the class specified.
- * @param class_name The class name
- * @param property The property name of the class.
- * @return The value of the property
- * @throws FileNotFoundException If the specified class isn't exist.
- * @throws IOException If the API couldn't read the class's property
- */
- public static String getAttribute(String class_name, String property) throws FileNotFoundException, IOException{
- File file = new File(SYSTEM_CLASS_PATH + class_name + "/" + property);
- class_name = class_name.toLowerCase();
- property = property.toLowerCase();
- FileInputStream in = new FileInputStream(file);
- StringBuilder sb = new StringBuilder();
- BufferedReader br = null;
- String line;
- try {
- br = new BufferedReader(new InputStreamReader(in));
- while ((line = br.readLine()) != null) {
- sb.append(line);
- }
-
- } catch (IOException e) {
- throw e;
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- throw e;
- }
- }
- }
- return sb.toString();
- }
-
- /***
- * Reads the property of the class and subclass specified.
- * @param class_name The class name.
- * @param subclass The Sub-class name.
- * @param property The property name of the class
- * @return The value of the property
- * @throws FileNotFoundException If the specified class isn't exist.
- * @throws IOException If the API couldn't read the class's property
- */
- public static String getAttribute(String class_name, String subclass, String property) throws FileNotFoundException, IOException{
- return getAttribute(class_name, subclass + "/" + property);
- }
-
- /***
- * Writes the property of the class and subclass specified.
- * @param class_name The class name.
- * @param subclass The Sub-class name.
- * @param property The property name of the class
- * @param new_value The new value of the property
- * @throws FileNotFoundException If the specified class isn't exist.
- * @throws IOException If the API couldn't read the class's property
- */
- public static void setAttribute(String class_name, String subclass, String property, String new_value) throws FileNotFoundException, IOException{
- setAttribute(class_name, subclass + "/" + property, new_value);
- }
-
- /***
- * Writes the property of the class specified.
- * @param class_name The class name.
- * @param property The property name of the class
- * @param new_value The new value of the property
- * @throws FileNotFoundException If the specified class isn't exist.
- * @throws IOException If the API couldn't read the class's property
- */
- public static void setAttribute(String class_name, String property, String new_value) throws FileNotFoundException, IOException{
- PrintWriter out = new PrintWriter(SYSTEM_CLASS_PATH + class_name + "/" + property);
- out.write(new_value);
- out.flush();
- out.close();
- }
-
- /***
- * A function to separate space from a spaced-array.
- * @param space_array A string
- * @return A array of the string/space-array
- */
- public static String[] separateSpace(String space_array){
- int i;
- int j;
- String sep;
- List list = new ArrayList(50);
- for (i = 0; i < space_array.length(); i++){
- for (j = i; j < space_array.length(); j++){
- if (space_array.charAt(j) == ' '){
- break;
- }
- }
- if (j == space_array.length()){
- break;
- }
- sep = space_array.substring(i, j + 1);
- list.add(sep);
- i = j;
- }
- Object[] objarr = list.toArray();
- String[] strarr = new String[objarr.length];
- for (i = 0; i < strarr.length; i++){
- strarr[i] = (String) objarr[i];
- }
- return strarr;
- }
-
- private static String readFile(File file) throws IOException{
- FileInputStream in = new FileInputStream(file);
- StringBuilder sb = new StringBuilder();
- BufferedReader br = null;
- String line;
- try {
- br = new BufferedReader(new InputStreamReader(in));
- while ((line = br.readLine()) != null) {
- sb.append(line);
- }
-
- } catch (IOException e) {
- throw e;
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- throw e;
- }
- }
- }
- return sb.toString();
- }
-
- /**
- * Search the full class name, using a class name, FS folder prefix and an address
- * @param classname The class Name (e.g. lego-port, tacho-motor)
- * @param fsFolderPrefix The FS folder prefix, without the value [N] (e.g. motor, sensor)
- * @param address Port address (e.g. outA, in1)
- * @return The full FS class folder name, with the same port address, if none, returns null
- */
- public static String searchClassFullName(String classname, String fsFolderPrefix, String address){
- File[] sub = Sysfs.getAllSubClass(classname);
- File file;
- String data;
- for (File asub : sub){
- file = new File(asub.getAbsolutePath() + "/address");
- try {
- data = readFile(file);
- if(data.equals(address)){
- return asub.getName();
- }
- } catch (Exception ignore){}
- }
- return null;
- }
-}
diff --git a/src/main/java/org/ev3dev/io/package-info.java b/src/main/java/org/ev3dev/io/package-info.java
deleted file mode 100644
index 7039aed..0000000
--- a/src/main/java/org/ev3dev/io/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * API I/O Controls
- * @author Anthony
- *
- */
-package org.ev3dev.io;
\ No newline at end of file
diff --git a/src/main/java/org/ev3dev/package-info.java b/src/main/java/org/ev3dev/package-info.java
deleted file mode 100644
index 5962920..0000000
--- a/src/main/java/org/ev3dev/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Main package of ev3dev language binding
- * @author Anthony
- *
- */
-package org.ev3dev;
\ No newline at end of file
diff --git a/vendor/bootstrap-social/bootstrap-social.css b/vendor/bootstrap-social/bootstrap-social.css
new file mode 100644
index 0000000..b22f7be
--- /dev/null
+++ b/vendor/bootstrap-social/bootstrap-social.css
@@ -0,0 +1,101 @@
+/*
+ * Social Buttons for Bootstrap
+ *
+ * Copyright 2013-2014 Panayiotis Lipiridis
+ * Licensed under the MIT License
+ *
+ * https://github.com/lipis/bootstrap-social
+ */
+
+.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}
+.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}
+.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}
+.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}
+.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}
+.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg :first-child{line-height:45px;width:45px;font-size:1.8em}
+.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm :first-child{line-height:28px;width:28px;font-size:1.4em}
+.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs :first-child{line-height:20px;width:20px;font-size:1.2em}
+.btn-social-icon :first-child{border:none;text-align:center;width:100% !important}
+.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}
+.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}
+.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}
+.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:hover,.btn-adn:focus,.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}
+.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}
+.btn-adn.disabled,.btn-adn[disabled],fieldset[disabled] .btn-adn,.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled:active,.btn-adn[disabled]:active,fieldset[disabled] .btn-adn:active,.btn-adn.disabled.active,.btn-adn[disabled].active,fieldset[disabled] .btn-adn.active{background-color:#d87a68;border-color:rgba(0,0,0,0.2)}
+.btn-adn .badge{color:#d87a68;background-color:#fff}
+.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover,.btn-bitbucket:focus,.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}
+.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}
+.btn-bitbucket.disabled,.btn-bitbucket[disabled],fieldset[disabled] .btn-bitbucket,.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled:active,.btn-bitbucket[disabled]:active,fieldset[disabled] .btn-bitbucket:active,.btn-bitbucket.disabled.active,.btn-bitbucket[disabled].active,fieldset[disabled] .btn-bitbucket.active{background-color:#205081;border-color:rgba(0,0,0,0.2)}
+.btn-bitbucket .badge{color:#205081;background-color:#fff}
+.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover,.btn-dropbox:focus,.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}
+.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}
+.btn-dropbox.disabled,.btn-dropbox[disabled],fieldset[disabled] .btn-dropbox,.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled:active,.btn-dropbox[disabled]:active,fieldset[disabled] .btn-dropbox:active,.btn-dropbox.disabled.active,.btn-dropbox[disabled].active,fieldset[disabled] .btn-dropbox.active{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}
+.btn-dropbox .badge{color:#1087dd;background-color:#fff}
+.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover,.btn-facebook:focus,.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}
+.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}
+.btn-facebook.disabled,.btn-facebook[disabled],fieldset[disabled] .btn-facebook,.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled:active,.btn-facebook[disabled]:active,fieldset[disabled] .btn-facebook:active,.btn-facebook.disabled.active,.btn-facebook[disabled].active,fieldset[disabled] .btn-facebook.active{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}
+.btn-facebook .badge{color:#3b5998;background-color:#fff}
+.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover,.btn-flickr:focus,.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}
+.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}
+.btn-flickr.disabled,.btn-flickr[disabled],fieldset[disabled] .btn-flickr,.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled:active,.btn-flickr[disabled]:active,fieldset[disabled] .btn-flickr:active,.btn-flickr.disabled.active,.btn-flickr[disabled].active,fieldset[disabled] .btn-flickr.active{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}
+.btn-flickr .badge{color:#ff0084;background-color:#fff}
+.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover,.btn-foursquare:focus,.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}
+.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}
+.btn-foursquare.disabled,.btn-foursquare[disabled],fieldset[disabled] .btn-foursquare,.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled:active,.btn-foursquare[disabled]:active,fieldset[disabled] .btn-foursquare:active,.btn-foursquare.disabled.active,.btn-foursquare[disabled].active,fieldset[disabled] .btn-foursquare.active{background-color:#f94877;border-color:rgba(0,0,0,0.2)}
+.btn-foursquare .badge{color:#f94877;background-color:#fff}
+.btn-github{color:#fff;background-color:#444;border-color:rgba(0,0,0,0.2)}.btn-github:hover,.btn-github:focus,.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}
+.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}
+.btn-github.disabled,.btn-github[disabled],fieldset[disabled] .btn-github,.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled:active,.btn-github[disabled]:active,fieldset[disabled] .btn-github:active,.btn-github.disabled.active,.btn-github[disabled].active,fieldset[disabled] .btn-github.active{background-color:#444;border-color:rgba(0,0,0,0.2)}
+.btn-github .badge{color:#444;background-color:#fff}
+.btn-google-plus{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google-plus:hover,.btn-google-plus:focus,.btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}
+.btn-google-plus:active,.btn-google-plus.active,.open>.dropdown-toggle.btn-google-plus{background-image:none}
+.btn-google-plus.disabled,.btn-google-plus[disabled],fieldset[disabled] .btn-google-plus,.btn-google-plus.disabled:hover,.btn-google-plus[disabled]:hover,fieldset[disabled] .btn-google-plus:hover,.btn-google-plus.disabled:focus,.btn-google-plus[disabled]:focus,fieldset[disabled] .btn-google-plus:focus,.btn-google-plus.disabled:active,.btn-google-plus[disabled]:active,fieldset[disabled] .btn-google-plus:active,.btn-google-plus.disabled.active,.btn-google-plus[disabled].active,fieldset[disabled] .btn-google-plus.active{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}
+.btn-google-plus .badge{color:#dd4b39;background-color:#fff}
+.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover,.btn-instagram:focus,.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}
+.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}
+.btn-instagram.disabled,.btn-instagram[disabled],fieldset[disabled] .btn-instagram,.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled:active,.btn-instagram[disabled]:active,fieldset[disabled] .btn-instagram:active,.btn-instagram.disabled.active,.btn-instagram[disabled].active,fieldset[disabled] .btn-instagram.active{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}
+.btn-instagram .badge{color:#3f729b;background-color:#fff}
+.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover,.btn-linkedin:focus,.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}
+.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}
+.btn-linkedin.disabled,.btn-linkedin[disabled],fieldset[disabled] .btn-linkedin,.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled:active,.btn-linkedin[disabled]:active,fieldset[disabled] .btn-linkedin:active,.btn-linkedin.disabled.active,.btn-linkedin[disabled].active,fieldset[disabled] .btn-linkedin.active{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}
+.btn-linkedin .badge{color:#007bb6;background-color:#fff}
+.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover,.btn-microsoft:focus,.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}
+.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}
+.btn-microsoft.disabled,.btn-microsoft[disabled],fieldset[disabled] .btn-microsoft,.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled:active,.btn-microsoft[disabled]:active,fieldset[disabled] .btn-microsoft:active,.btn-microsoft.disabled.active,.btn-microsoft[disabled].active,fieldset[disabled] .btn-microsoft.active{background-color:#2672ec;border-color:rgba(0,0,0,0.2)}
+.btn-microsoft .badge{color:#2672ec;background-color:#fff}
+.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:hover,.btn-openid:focus,.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}
+.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}
+.btn-openid.disabled,.btn-openid[disabled],fieldset[disabled] .btn-openid,.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled:active,.btn-openid[disabled]:active,fieldset[disabled] .btn-openid:active,.btn-openid.disabled.active,.btn-openid[disabled].active,fieldset[disabled] .btn-openid.active{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}
+.btn-openid .badge{color:#f7931e;background-color:#fff}
+.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover,.btn-pinterest:focus,.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}
+.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}
+.btn-pinterest.disabled,.btn-pinterest[disabled],fieldset[disabled] .btn-pinterest,.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled:active,.btn-pinterest[disabled]:active,fieldset[disabled] .btn-pinterest:active,.btn-pinterest.disabled.active,.btn-pinterest[disabled].active,fieldset[disabled] .btn-pinterest.active{background-color:#cb2027;border-color:rgba(0,0,0,0.2)}
+.btn-pinterest .badge{color:#cb2027;background-color:#fff}
+.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover,.btn-reddit:focus,.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}
+.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}
+.btn-reddit.disabled,.btn-reddit[disabled],fieldset[disabled] .btn-reddit,.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled:active,.btn-reddit[disabled]:active,fieldset[disabled] .btn-reddit:active,.btn-reddit.disabled.active,.btn-reddit[disabled].active,fieldset[disabled] .btn-reddit.active{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}
+.btn-reddit .badge{color:#eff7ff;background-color:#000}
+.btn-soundcloud{color:#fff;background-color:#f50;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover,.btn-soundcloud:focus,.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}
+.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}
+.btn-soundcloud.disabled,.btn-soundcloud[disabled],fieldset[disabled] .btn-soundcloud,.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled:active,.btn-soundcloud[disabled]:active,fieldset[disabled] .btn-soundcloud:active,.btn-soundcloud.disabled.active,.btn-soundcloud[disabled].active,fieldset[disabled] .btn-soundcloud.active{background-color:#f50;border-color:rgba(0,0,0,0.2)}
+.btn-soundcloud .badge{color:#f50;background-color:#fff}
+.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover,.btn-tumblr:focus,.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}
+.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}
+.btn-tumblr.disabled,.btn-tumblr[disabled],fieldset[disabled] .btn-tumblr,.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled:active,.btn-tumblr[disabled]:active,fieldset[disabled] .btn-tumblr:active,.btn-tumblr.disabled.active,.btn-tumblr[disabled].active,fieldset[disabled] .btn-tumblr.active{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}
+.btn-tumblr .badge{color:#2c4762;background-color:#fff}
+.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover,.btn-twitter:focus,.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}
+.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}
+.btn-twitter.disabled,.btn-twitter[disabled],fieldset[disabled] .btn-twitter,.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled:active,.btn-twitter[disabled]:active,fieldset[disabled] .btn-twitter:active,.btn-twitter.disabled.active,.btn-twitter[disabled].active,fieldset[disabled] .btn-twitter.active{background-color:#55acee;border-color:rgba(0,0,0,0.2)}
+.btn-twitter .badge{color:#55acee;background-color:#fff}
+.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover,.btn-vimeo:focus,.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}
+.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}
+.btn-vimeo.disabled,.btn-vimeo[disabled],fieldset[disabled] .btn-vimeo,.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled:active,.btn-vimeo[disabled]:active,fieldset[disabled] .btn-vimeo:active,.btn-vimeo.disabled.active,.btn-vimeo[disabled].active,fieldset[disabled] .btn-vimeo.active{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}
+.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}
+.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:hover,.btn-vk:focus,.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}
+.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}
+.btn-vk.disabled,.btn-vk[disabled],fieldset[disabled] .btn-vk,.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled:active,.btn-vk[disabled]:active,fieldset[disabled] .btn-vk:active,.btn-vk.disabled.active,.btn-vk[disabled].active,fieldset[disabled] .btn-vk.active{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}
+.btn-vk .badge{color:#587ea3;background-color:#fff}
+.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover,.btn-yahoo:focus,.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}
+.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}
+.btn-yahoo.disabled,.btn-yahoo[disabled],fieldset[disabled] .btn-yahoo,.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled:active,.btn-yahoo[disabled]:active,fieldset[disabled] .btn-yahoo:active,.btn-yahoo.disabled.active,.btn-yahoo[disabled].active,fieldset[disabled] .btn-yahoo.active{background-color:#720e9e;border-color:rgba(0,0,0,0.2)}
+.btn-yahoo .badge{color:#720e9e;background-color:#fff}
diff --git a/vendor/bootstrap-social/bootstrap-social.less b/vendor/bootstrap-social/bootstrap-social.less
new file mode 100644
index 0000000..82c91f5
--- /dev/null
+++ b/vendor/bootstrap-social/bootstrap-social.less
@@ -0,0 +1,114 @@
+/*
+ * Social Buttons for Bootstrap
+ *
+ * Copyright 2013-2014 Panayiotis Lipiridis
+ * Licensed under the MIT License
+ *
+ * https://github.com/lipis/bootstrap-social
+ */
+
+@bs-height-base: (@line-height-computed + @padding-base-vertical * 2);
+@bs-height-lg: (floor(@font-size-large * @line-height-base) + @padding-large-vertical * 2);
+@bs-height-sm: (floor(@font-size-small * 1.5) + @padding-small-vertical * 2);
+@bs-height-xs: (floor(@font-size-small * 1.2) + @padding-small-vertical + 1);
+
+.btn-social {
+ position: relative;
+ padding-left: (@bs-height-base + @padding-base-horizontal);
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ > :first-child {
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ width: @bs-height-base;
+ line-height: (@bs-height-base + 2);
+ font-size: 1.6em;
+ text-align: center;
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
+ }
+ &.btn-lg {
+ padding-left: (@bs-height-lg + @padding-large-horizontal);
+ :first-child {
+ line-height: @bs-height-lg;
+ width: @bs-height-lg;
+ font-size: 1.8em;
+ }
+ }
+ &.btn-sm {
+ padding-left: (@bs-height-sm + @padding-small-horizontal);
+ :first-child {
+ line-height: @bs-height-sm;
+ width: @bs-height-sm;
+ font-size: 1.4em;
+ }
+ }
+ &.btn-xs {
+ padding-left: (@bs-height-xs + @padding-small-horizontal);
+ :first-child {
+ line-height: @bs-height-xs;
+ width: @bs-height-xs;
+ font-size: 1.2em;
+ }
+ }
+}
+
+.btn-social-icon {
+ .btn-social;
+ height: (@bs-height-base + 2);
+ width: (@bs-height-base + 2);
+ padding: 0;
+ :first-child {
+ border: none;
+ text-align: center;
+ width: 100%!important;
+ }
+ &.btn-lg {
+ height: @bs-height-lg;
+ width: @bs-height-lg;
+ padding-left: 0;
+ padding-right: 0;
+ }
+ &.btn-sm {
+ height: (@bs-height-sm + 2);
+ width: (@bs-height-sm + 2);
+ padding-left: 0;
+ padding-right: 0;
+ }
+ &.btn-xs {
+ height: (@bs-height-xs + 2);
+ width: (@bs-height-xs + 2);
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+.btn-social(@color-bg, @color: #fff) {
+ background-color: @color-bg;
+ .button-variant(@color, @color-bg, rgba(0,0,0,.2));
+}
+
+
+.btn-adn { .btn-social(#d87a68); }
+.btn-bitbucket { .btn-social(#205081); }
+.btn-dropbox { .btn-social(#1087dd); }
+.btn-facebook { .btn-social(#3b5998); }
+.btn-flickr { .btn-social(#ff0084); }
+.btn-foursquare { .btn-social(#f94877); }
+.btn-github { .btn-social(#444444); }
+.btn-google-plus { .btn-social(#dd4b39); }
+.btn-instagram { .btn-social(#3f729b); }
+.btn-linkedin { .btn-social(#007bb6); }
+.btn-microsoft { .btn-social(#2672ec); }
+.btn-openid { .btn-social(#f7931e); }
+.btn-pinterest { .btn-social(#cb2027); }
+.btn-reddit { .btn-social(#eff7ff, #000); }
+.btn-soundcloud { .btn-social(#ff5500); }
+.btn-tumblr { .btn-social(#2c4762); }
+.btn-twitter { .btn-social(#55acee); }
+.btn-vimeo { .btn-social(#1ab7ea); }
+.btn-vk { .btn-social(#587ea3); }
+.btn-yahoo { .btn-social(#720e9e); }
diff --git a/vendor/bootstrap-social/bootstrap-social.scss b/vendor/bootstrap-social/bootstrap-social.scss
new file mode 100644
index 0000000..667543f
--- /dev/null
+++ b/vendor/bootstrap-social/bootstrap-social.scss
@@ -0,0 +1,114 @@
+/*
+ * Social Buttons for Bootstrap
+ *
+ * Copyright 2013-2014 Panayiotis Lipiridis
+ * Licensed under the MIT License
+ *
+ * https://github.com/lipis/bootstrap-social
+ */
+
+$bs-height-base: ($line-height-computed + $padding-base-vertical * 2);
+$bs-height-lg: (floor($font-size-large * $line-height-base) + $padding-large-vertical * 2);
+$bs-height-sm: (floor($font-size-small * 1.5) + $padding-small-vertical * 2);
+$bs-height-xs: (floor($font-size-small * 1.2) + $padding-small-vertical + 1);
+
+.btn-social {
+ position: relative;
+ padding-left: ($bs-height-base + $padding-base-horizontal);
+ text-align: left;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ > :first-child {
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ width: $bs-height-base;
+ line-height: ($bs-height-base + 2);
+ font-size: 1.6em;
+ text-align: center;
+ border-right: 1px solid rgba(0, 0, 0, 0.2);
+ }
+ &.btn-lg {
+ padding-left: ($bs-height-lg + $padding-large-horizontal);
+ :first-child {
+ line-height: $bs-height-lg;
+ width: $bs-height-lg;
+ font-size: 1.8em;
+ }
+ }
+ &.btn-sm {
+ padding-left: ($bs-height-sm + $padding-small-horizontal);
+ :first-child {
+ line-height: $bs-height-sm;
+ width: $bs-height-sm;
+ font-size: 1.4em;
+ }
+ }
+ &.btn-xs {
+ padding-left: ($bs-height-xs + $padding-small-horizontal);
+ :first-child {
+ line-height: $bs-height-xs;
+ width: $bs-height-xs;
+ font-size: 1.2em;
+ }
+ }
+}
+
+.btn-social-icon {
+ @extend .btn-social;
+ height: ($bs-height-base + 2);
+ width: ($bs-height-base + 2);
+ padding: 0;
+ :first-child {
+ border: none;
+ text-align: center;
+ width: 100%!important;
+ }
+ &.btn-lg {
+ height: $bs-height-lg;
+ width: $bs-height-lg;
+ padding-left: 0;
+ padding-right: 0;
+ }
+ &.btn-sm {
+ height: ($bs-height-sm + 2);
+ width: ($bs-height-sm + 2);
+ padding-left: 0;
+ padding-right: 0;
+ }
+ &.btn-xs {
+ height: ($bs-height-xs + 2);
+ width: ($bs-height-xs + 2);
+ padding-left: 0;
+ padding-right: 0;
+ }
+}
+
+@mixin btn-social($color-bg, $color: #fff) {
+ background-color: $color-bg;
+ @include button-variant($color, $color-bg, rgba(0,0,0,.2));
+}
+
+
+.btn-adn { @include btn-social(#d87a68); }
+.btn-bitbucket { @include btn-social(#205081); }
+.btn-dropbox { @include btn-social(#1087dd); }
+.btn-facebook { @include btn-social(#3b5998); }
+.btn-flickr { @include btn-social(#ff0084); }
+.btn-foursquare { @include btn-social(#f94877); }
+.btn-github { @include btn-social(#444444); }
+.btn-google-plus { @include btn-social(#dd4b39); }
+.btn-instagram { @include btn-social(#3f729b); }
+.btn-linkedin { @include btn-social(#007bb6); }
+.btn-microsoft { @include btn-social(#2672ec); }
+.btn-openid { @include btn-social(#f7931e); }
+.btn-pinterest { @include btn-social(#cb2027); }
+.btn-reddit { @include btn-social(#eff7ff, #000); }
+.btn-soundcloud { @include btn-social(#ff5500); }
+.btn-tumblr { @include btn-social(#2c4762); }
+.btn-twitter { @include btn-social(#55acee); }
+.btn-vimeo { @include btn-social(#1ab7ea); }
+.btn-vk { @include btn-social(#587ea3); }
+.btn-yahoo { @include btn-social(#720e9e); }
diff --git a/vendor/bootstrap/css/bootstrap.css b/vendor/bootstrap/css/bootstrap.css
new file mode 100644
index 0000000..6167622
--- /dev/null
+++ b/vendor/bootstrap/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/vendor/bootstrap/css/bootstrap.min.css b/vendor/bootstrap/css/bootstrap.min.css
new file mode 100644
index 0000000..ed3905e
--- /dev/null
+++ b/vendor/bootstrap/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/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot b/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..b93a495
Binary files /dev/null and b/vendor/bootstrap/fonts/glyphicons-halflings-regular.eot differ
diff --git a/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg b/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/vendor/bootstrap/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+
+
+
\ No newline at end of file
diff --git a/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf b/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..1413fc6
Binary files /dev/null and b/vendor/bootstrap/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff b/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..9e61285
Binary files /dev/null and b/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff differ
diff --git a/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000..64539b5
Binary files /dev/null and b/vendor/bootstrap/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/vendor/bootstrap/js/bootstrap.js b/vendor/bootstrap/js/bootstrap.js
new file mode 100644
index 0000000..8a2e99a
--- /dev/null
+++ b/vendor/bootstrap/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 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')
+ }
+}(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)
+ }
+ }
+ })
+
+}(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)
+
+}(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))
+ })
+
+}(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())
+ })
+ })
+
+}(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)
+ })
+
+}(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)
+
+}(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)
+ })
+
+}(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: '',
+ 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
+ }
+
+}(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: ''
+ })
+
+
+ // 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
+ }
+
+}(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())
+ })
+ })
+
+}(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)
+
+}(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)
+ })
+ })
+
+}(jQuery);
diff --git a/vendor/bootstrap/js/bootstrap.min.js b/vendor/bootstrap/js/bootstrap.min.js
new file mode 100644
index 0000000..9bcd2fc
--- /dev/null
+++ b/vendor/bootstrap/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 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")}(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)}})})}(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)}(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))})}(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())})})}(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)})}(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&&jdocument.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',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-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.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}}(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:''}),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}}(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[a]&&(void 0===e[a+1]||b .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)}(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=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)})})}(jQuery);
\ No newline at end of file
diff --git a/vendor/datatables-plugins/dataTables.bootstrap.css b/vendor/datatables-plugins/dataTables.bootstrap.css
new file mode 100644
index 0000000..f65e264
--- /dev/null
+++ b/vendor/datatables-plugins/dataTables.bootstrap.css
@@ -0,0 +1,314 @@
+div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+
+div.dataTables_length select {
+ width: 75px;
+ display: inline-block;
+}
+
+div.dataTables_filter {
+ text-align: right;
+}
+
+div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+
+div.dataTables_filter input {
+ margin-left: 0.5em;
+ display: inline-block;
+}
+
+div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+}
+
+div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+
+div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_length,
+ div.dataTables_filter,
+ div.dataTables_info,
+ div.dataTables_paginate {
+ text-align: center;
+ }
+}
+
+
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+}
+
+table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; }
+table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; }
+table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; }
+
+table.dataTable thead .sorting_asc_disabled { background: url('../images/sort_asc_disabled.png') no-repeat center right; }
+table.dataTable thead .sorting_desc_disabled { background: url('../images/sort_desc_disabled.png') no-repeat center right; }
+
+table.dataTable thead > tr > th {
+ padding-left: 18px;
+ padding-right: 18px;
+}
+
+table.dataTable th:active {
+ outline: none;
+}
+
+/* Scrolling */
+div.dataTables_scrollHead table {
+ margin-bottom: 0 !important;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+div.dataTables_scrollHead table thead tr:last-child th:first-child,
+div.dataTables_scrollHead table thead tr:last-child td:first-child {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody tbody tr:first-child th,
+div.dataTables_scrollBody tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+/* Frustratingly the border-collapse:collapse used by Bootstrap makes the column
+ width calculations when using scrolling impossible to align columns. We have
+ to use separate
+ */
+table.table-bordered.dataTable {
+ border-collapse: separate !important;
+}
+table.table-bordered thead th,
+table.table-bordered thead td {
+ border-left-width: 0;
+ border-top-width: 0;
+}
+table.table-bordered tbody th,
+table.table-bordered tbody td {
+ border-left-width: 0;
+ border-bottom-width: 0;
+}
+table.table-bordered th:last-child,
+table.table-bordered td:last-child {
+ border-right-width: 0;
+}
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+
+
+
+/*
+ * TableTools styles
+ */
+.table.dataTable tbody tr.active td,
+.table.dataTable tbody tr.active th {
+ background-color: #08C;
+ color: white;
+}
+
+.table.dataTable tbody tr.active:hover td,
+.table.dataTable tbody tr.active:hover th {
+ background-color: #0075b0 !important;
+}
+
+.table.dataTable tbody tr.active th > a,
+.table.dataTable tbody tr.active td > a {
+ color: white;
+}
+
+.table-striped.dataTable tbody tr.active:nth-child(odd) td,
+.table-striped.dataTable tbody tr.active:nth-child(odd) th {
+ background-color: #017ebc;
+}
+
+table.DTTT_selectable tbody tr {
+ cursor: pointer;
+}
+
+div.DTTT .btn:hover {
+ text-decoration: none !important;
+}
+
+ul.DTTT_dropdown.dropdown-menu {
+ z-index: 2003;
+}
+
+ul.DTTT_dropdown.dropdown-menu a {
+ color: #333 !important; /* needed only when demo_page.css is included */
+}
+
+ul.DTTT_dropdown.dropdown-menu li {
+ position: relative;
+}
+
+ul.DTTT_dropdown.dropdown-menu li:hover a {
+ background-color: #0088cc;
+ color: white !important;
+}
+
+div.DTTT_collection_background {
+ z-index: 2002;
+}
+
+/* TableTools information display */
+div.DTTT_print_info {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 400px;
+ height: 150px;
+ margin-left: -200px;
+ margin-top: -75px;
+ text-align: center;
+ color: #333;
+ padding: 10px 30px;
+ opacity: 0.95;
+
+ background-color: white;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ border-radius: 6px;
+
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
+}
+
+div.DTTT_print_info h6 {
+ font-weight: normal;
+ font-size: 28px;
+ line-height: 28px;
+ margin: 1em;
+}
+
+div.DTTT_print_info p {
+ font-size: 14px;
+ line-height: 20px;
+}
+
+div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ height: 60px;
+ margin-left: -50%;
+ margin-top: -25px;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));
+ background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: -o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+ background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);
+}
+
+
+
+/*
+ * FixedColumns styles
+ */
+div.DTFC_LeftHeadWrapper table,
+div.DTFC_LeftFootWrapper table,
+div.DTFC_RightHeadWrapper table,
+div.DTFC_RightFootWrapper table,
+table.DTFC_Cloned tr.even {
+ background-color: white;
+ margin-bottom: 0;
+}
+
+div.DTFC_RightHeadWrapper table ,
+div.DTFC_LeftHeadWrapper table {
+ border-bottom: none !important;
+ margin-bottom: 0 !important;
+ border-top-right-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
+div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper table,
+div.DTFC_LeftBodyWrapper table {
+ border-top: none;
+ margin: 0 !important;
+}
+
+div.DTFC_RightBodyWrapper tbody tr:first-child th,
+div.DTFC_RightBodyWrapper tbody tr:first-child td,
+div.DTFC_LeftBodyWrapper tbody tr:first-child th,
+div.DTFC_LeftBodyWrapper tbody tr:first-child td {
+ border-top: none;
+}
+
+div.DTFC_RightFootWrapper table,
+div.DTFC_LeftFootWrapper table {
+ border-top: none;
+ margin-top: 0 !important;
+}
+
+
+/*
+ * FixedHeader styles
+ */
+div.FixedHeader_Cloned table {
+ margin: 0 !important
+}
+
diff --git a/vendor/datatables-plugins/dataTables.bootstrap.js b/vendor/datatables-plugins/dataTables.bootstrap.js
new file mode 100644
index 0000000..2c6959d
--- /dev/null
+++ b/vendor/datatables-plugins/dataTables.bootstrap.js
@@ -0,0 +1,186 @@
+/*! DataTables Bootstrap 3 integration
+ * ©2011-2014 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
+ * for further information.
+ */
+(function(window, document, undefined){
+
+var factory = function( $, DataTable ) {
+"use strict";
+
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ "<'row'<'col-sm-6'l><'col-sm-6'f>>" +
+ "<'row'<'col-sm-12'tr>>" +
+ "<'row'<'col-sm-6'i><'col-sm-6'p>>",
+ renderer: 'bootstrap'
+} );
+
+
+/* Default class modification */
+$.extend( DataTable.ext.classes, {
+ sWrapper: "dataTables_wrapper form-inline dt-bootstrap",
+ sFilterInput: "form-control input-sm",
+ sLengthSelect: "form-control input-sm"
+} );
+
+
+/* Bootstrap paging button renderer */
+DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
+ var api = new DataTable.Api( settings );
+ var classes = settings.oClasses;
+ var lang = settings.oLanguage.oPaginate;
+ var btnDisplay, btnClass;
+
+ var attach = function( container, buttons ) {
+ var i, ien, node, button;
+ var clickHandler = function ( e ) {
+ e.preventDefault();
+ if ( !$(e.currentTarget).hasClass('disabled') ) {
+ api.page( e.data.action ).draw( false );
+ }
+ };
+
+ for ( i=0, ien=buttons.length ; i 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'previous':
+ btnDisplay = lang.sPrevious;
+ btnClass = button + (page > 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'next':
+ btnDisplay = lang.sNext;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ case 'last':
+ btnDisplay = lang.sLast;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ default:
+ btnDisplay = button + 1;
+ btnClass = page === button ?
+ 'active' : '';
+ break;
+ }
+
+ if ( btnDisplay ) {
+ node = $('', {
+ 'class': classes.sPageButton+' '+btnClass,
+ 'aria-controls': settings.sTableId,
+ 'tabindex': settings.iTabIndex,
+ 'id': idx === 0 && typeof button === 'string' ?
+ settings.sTableId +'_'+ button :
+ null
+ } )
+ .append( $('', {
+ 'href': '#'
+ } )
+ .html( btnDisplay )
+ )
+ .appendTo( container );
+
+ settings.oApi._fnBindAction(
+ node, {action: button}, clickHandler
+ );
+ }
+ }
+ }
+ };
+
+ attach(
+ $(host).empty().html('
').children('ul'),
+ buttons
+ );
+};
+
+
+/*
+ * TableTools Bootstrap compatibility
+ * Required TableTools 2.1+
+ */
+if ( DataTable.TableTools ) {
+ // Set the classes that TableTools uses to something suitable for Bootstrap
+ $.extend( true, DataTable.TableTools.classes, {
+ "container": "DTTT btn-group",
+ "buttons": {
+ "normal": "btn btn-default",
+ "disabled": "disabled"
+ },
+ "collection": {
+ "container": "DTTT_dropdown dropdown-menu",
+ "buttons": {
+ "normal": "",
+ "disabled": "disabled"
+ }
+ },
+ "print": {
+ "info": "DTTT_print_info"
+ },
+ "select": {
+ "row": "active"
+ }
+ } );
+
+ // Have the collection use a bootstrap compatible drop down
+ $.extend( true, DataTable.TableTools.DEFAULTS.oTags, {
+ "collection": {
+ "container": "ul",
+ "button": "li",
+ "liner": "a"
+ }
+ } );
+}
+
+}; // /factory
+
+
+// Define as an AMD module if possible
+if ( typeof define === 'function' && define.amd ) {
+ define( ['jquery', 'datatables'], factory );
+}
+else if ( typeof exports === 'object' ) {
+ // Node/CommonJS
+ factory( require('jquery'), require('datatables') );
+}
+else if ( jQuery ) {
+ // Otherwise simply initialise as normal, stopping multiple evaluation
+ factory( jQuery, jQuery.fn.dataTable );
+}
+
+
+})(window, document);
+
diff --git a/vendor/datatables-plugins/dataTables.bootstrap.min.js b/vendor/datatables-plugins/dataTables.bootstrap.min.js
new file mode 100644
index 0000000..f0d09b9
--- /dev/null
+++ b/vendor/datatables-plugins/dataTables.bootstrap.min.js
@@ -0,0 +1,8 @@
+/*!
+ DataTables Bootstrap 3 integration
+ ©2011-2014 SpryMedia Ltd - datatables.net/license
+*/
+(function(){var f=function(c,b){c.extend(!0,b.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-6'i><'col-sm-6'p>>",renderer:"bootstrap"});c.extend(b.ext.classes,{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm"});b.ext.renderer.pageButton.bootstrap=function(g,f,p,k,h,l){var q=new b.Api(g),r=g.oClasses,i=g.oLanguage.oPaginate,d,e,o=function(b,f){var j,m,n,a,k=function(a){a.preventDefault();
+c(a.currentTarget).hasClass("disabled")||q.page(a.data.action).draw(!1)};j=0;for(m=f.length;j",{"class":r.sPageButton+" "+
+e,"aria-controls":g.sTableId,tabindex:g.iTabIndex,id:0===p&&"string"===typeof a?g.sTableId+"_"+a:null}).append(c("",{href:"#"}).html(d)).appendTo(b),g.oApi._fnBindAction(n,{action:a},k))}};o(c(f).empty().html('
').children("ul"),k)};b.TableTools&&(c.extend(!0,b.TableTools.classes,{container:"DTTT btn-group",buttons:{normal:"btn btn-default",disabled:"disabled"},collection:{container:"DTTT_dropdown dropdown-menu",buttons:{normal:"",disabled:"disabled"}},print:{info:"DTTT_print_info"},
+select:{row:"active"}}),c.extend(!0,b.TableTools.DEFAULTS.oTags,{collection:{container:"ul",button:"li",liner:"a"}}))};"function"===typeof define&&define.amd?define(["jquery","datatables"],f):"object"===typeof exports?f(require("jquery"),require("datatables")):jQuery&&f(jQuery,jQuery.fn.dataTable)})(window,document);
diff --git a/vendor/datatables-plugins/index.html b/vendor/datatables-plugins/index.html
new file mode 100644
index 0000000..efe78b7
--- /dev/null
+++ b/vendor/datatables-plugins/index.html
@@ -0,0 +1,442 @@
+
+
+
+
+
+ DataTables Bootstrap 3 example
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Rendering engine
+ Browser
+ Platform(s)
+ Engine version
+ CSS grade
+
+
+
+
+ Trident
+ Internet
+ Explorer 4.0
+ Win 95+
+ 4
+ X
+
+
+ Trident
+ Internet
+ Explorer 5.0
+ Win 95+
+ 5
+ C
+
+
+ Trident
+ Internet
+ Explorer 5.5
+ Win 95+
+ 5.5
+ A
+
+
+ Trident
+ Internet
+ Explorer 6
+ Win 98+
+ 6
+ A
+
+
+ Trident
+ Internet Explorer 7
+ Win XP SP2+
+ 7
+ A
+
+
+ Trident
+ AOL browser (AOL desktop)
+ Win XP
+ 6
+ A
+
+
+ Gecko
+ Firefox 1.0
+ Win 98+ / OSX.2+
+ 1.7
+ A
+
+
+ Gecko
+ Firefox 1.5
+ Win 98+ / OSX.2+
+ 1.8
+ A
+
+
+ Gecko
+ Firefox 2.0
+ Win 98+ / OSX.2+
+ 1.8
+ A
+
+
+ Gecko
+ Firefox 3.0
+ Win 2k+ / OSX.3+
+ 1.9
+ A
+
+
+ Gecko
+ Camino 1.0
+ OSX.2+
+ 1.8
+ A
+
+
+ Gecko
+ Camino 1.5
+ OSX.3+
+ 1.8
+ A
+
+
+ Gecko
+ Netscape 7.2
+ Win 95+ / Mac OS 8.6-9.2
+ 1.7
+ A
+
+
+ Gecko
+ Netscape Browser 8
+ Win 98SE+
+ 1.7
+ A
+
+
+ Gecko
+ Netscape Navigator 9
+ Win 98+ / OSX.2+
+ 1.8
+ A
+
+
+ Gecko
+ Mozilla 1.0
+ Win 95+ / OSX.1+
+ 1
+ A
+
+
+ Gecko
+ Mozilla 1.1
+ Win 95+ / OSX.1+
+ 1.1
+ A
+
+
+ Gecko
+ Mozilla 1.2
+ Win 95+ / OSX.1+
+ 1.2
+ A
+
+
+ Gecko
+ Mozilla 1.3
+ Win 95+ / OSX.1+
+ 1.3
+ A
+
+
+ Gecko
+ Mozilla 1.4
+ Win 95+ / OSX.1+
+ 1.4
+ A
+
+
+ Gecko
+ Mozilla 1.5
+ Win 95+ / OSX.1+
+ 1.5
+ A
+
+
+ Gecko
+ Mozilla 1.6
+ Win 95+ / OSX.1+
+ 1.6
+ A
+
+
+ Gecko
+ Mozilla 1.7
+ Win 98+ / OSX.1+
+ 1.7
+ A
+
+
+ Gecko
+ Mozilla 1.8
+ Win 98+ / OSX.1+
+ 1.8
+ A
+
+
+ Gecko
+ Seamonkey 1.1
+ Win 98+ / OSX.2+
+ 1.8
+ A
+
+
+ Gecko
+ Epiphany 2.20
+ Gnome
+ 1.8
+ A
+
+
+ Webkit
+ Safari 1.2
+ OSX.3
+ 125.5
+ A
+
+
+ Webkit
+ Safari 1.3
+ OSX.3
+ 312.8
+ A
+
+
+ Webkit
+ Safari 2.0
+ OSX.4+
+ 419.3
+ A
+
+
+ Webkit
+ Safari 3.0
+ OSX.4+
+ 522.1
+ A
+
+
+ Webkit
+ OmniWeb 5.5
+ OSX.4+
+ 420
+ A
+
+
+ Webkit
+ iPod Touch / iPhone
+ iPod
+ 420.1
+ A
+
+
+ Webkit
+ S60
+ S60
+ 413
+ A
+
+
+ Presto
+ Opera 7.0
+ Win 95+ / OSX.1+
+ -
+ A
+
+
+ Presto
+ Opera 7.5
+ Win 95+ / OSX.2+
+ -
+ A
+
+
+ Presto
+ Opera 8.0
+ Win 95+ / OSX.2+
+ -
+ A
+
+
+ Presto
+ Opera 8.5
+ Win 95+ / OSX.2+
+ -
+ A
+
+
+ Presto
+ Opera 9.0
+ Win 95+ / OSX.3+
+ -
+ A
+
+
+ Presto
+ Opera 9.2
+ Win 88+ / OSX.3+
+ -
+ A
+
+
+ Presto
+ Opera 9.5
+ Win 88+ / OSX.3+
+ -
+ A
+
+
+ Presto
+ Opera for Wii
+ Wii
+ -
+ A
+
+
+ Presto
+ Nokia N800
+ N800
+ -
+ A
+
+
+ Presto
+ Nintendo DS browser
+ Nintendo DS
+ 8.5
+ C/A1
+
+
+ KHTML
+ Konqureror 3.1
+ KDE 3.1
+ 3.1
+ C
+
+
+ KHTML
+ Konqureror 3.3
+ KDE 3.3
+ 3.3
+ A
+
+
+ KHTML
+ Konqureror 3.5
+ KDE 3.5
+ 3.5
+ A
+
+
+ Tasman
+ Internet Explorer 4.5
+ Mac OS 8-9
+ -
+ X
+
+
+ Tasman
+ Internet Explorer 5.1
+ Mac OS 7.6-9
+ 1
+ C
+
+
+ Tasman
+ Internet Explorer 5.2
+ Mac OS 8-X
+ 1
+ C
+
+
+ Misc
+ NetFront 3.1
+ Embedded devices
+ -
+ C
+
+
+ Misc
+ NetFront 3.4
+ Embedded devices
+ -
+ A
+
+
+ Misc
+ Dillo 0.8
+ Embedded devices
+ -
+ X
+
+
+ Misc
+ Links
+ Text only
+ -
+ X
+
+
+ Misc
+ Lynx
+ Text only
+ -
+ X
+
+
+ Misc
+ IE Mobile
+ Windows Mobile 6
+ -
+ C
+
+
+ Misc
+ PSP browser
+ PSP
+ -
+ C
+
+
+ Other browsers
+ All others
+ -
+ -
+ U
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/vendor/datatables-responsive/dataTables.responsive.css b/vendor/datatables-responsive/dataTables.responsive.css
new file mode 100644
index 0000000..1060f9c
--- /dev/null
+++ b/vendor/datatables-responsive/dataTables.responsive.css
@@ -0,0 +1,106 @@
+table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child {
+ position: relative;
+ padding-left: 30px;
+ cursor: pointer;
+}
+table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before {
+ top: 8px;
+ left: 4px;
+ height: 16px;
+ width: 16px;
+ display: block;
+ position: absolute;
+ color: white;
+ border: 2px solid white;
+ border-radius: 16px;
+ text-align: center;
+ line-height: 14px;
+ box-shadow: 0 0 3px #444;
+ box-sizing: content-box;
+ content: '+';
+ background-color: #31b131;
+}
+table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child.dataTables_empty:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child.dataTables_empty:before {
+ display: none;
+}
+table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before,
+table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before {
+ content: '-';
+ background-color: #d33333;
+}
+table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before {
+ display: none;
+}
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child,
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child {
+ padding-left: 27px;
+}
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before,
+table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before {
+ top: 5px;
+ left: 4px;
+ height: 14px;
+ width: 14px;
+ border-radius: 14px;
+ line-height: 12px;
+}
+table.dataTable.dtr-column > tbody > tr > td.control,
+table.dataTable.dtr-column > tbody > tr > th.control {
+ position: relative;
+ cursor: pointer;
+}
+table.dataTable.dtr-column > tbody > tr > td.control:before,
+table.dataTable.dtr-column > tbody > tr > th.control:before {
+ top: 50%;
+ left: 50%;
+ height: 16px;
+ width: 16px;
+ margin-top: -10px;
+ margin-left: -10px;
+ display: block;
+ position: absolute;
+ color: white;
+ border: 2px solid white;
+ border-radius: 16px;
+ text-align: center;
+ line-height: 14px;
+ box-shadow: 0 0 3px #444;
+ box-sizing: content-box;
+ content: '+';
+ background-color: #31b131;
+}
+table.dataTable.dtr-column > tbody > tr.parent td.control:before,
+table.dataTable.dtr-column > tbody > tr.parent th.control:before {
+ content: '-';
+ background-color: #d33333;
+}
+table.dataTable > tbody > tr.child {
+ padding: 0.5em 1em;
+}
+table.dataTable > tbody > tr.child:hover {
+ background: transparent !important;
+}
+table.dataTable > tbody > tr.child ul {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+table.dataTable > tbody > tr.child ul li {
+ border-bottom: 1px solid #efefef;
+ padding: 0.5em 0;
+}
+table.dataTable > tbody > tr.child ul li:first-child {
+ padding-top: 0;
+}
+table.dataTable > tbody > tr.child ul li:last-child {
+ border-bottom: none;
+}
+table.dataTable > tbody > tr.child span.dtr-title {
+ display: inline-block;
+ min-width: 75px;
+ font-weight: bold;
+}
diff --git a/vendor/datatables-responsive/dataTables.responsive.js b/vendor/datatables-responsive/dataTables.responsive.js
new file mode 100644
index 0000000..5b4743f
--- /dev/null
+++ b/vendor/datatables-responsive/dataTables.responsive.js
@@ -0,0 +1,873 @@
+/*! Responsive 1.0.6
+ * 2014-2015 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * @summary Responsive
+ * @description Responsive tables plug-in for DataTables
+ * @version 1.0.6
+ * @file dataTables.responsive.js
+ * @author SpryMedia Ltd (www.sprymedia.co.uk)
+ * @contact www.sprymedia.co.uk/contact
+ * @copyright Copyright 2014-2015 SpryMedia Ltd.
+ *
+ * This source file is free software, available under the following license:
+ * MIT license - http://datatables.net/license/mit
+ *
+ * This source file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
+ *
+ * For details please refer to: http://www.datatables.net
+ */
+
+(function(window, document, undefined) {
+
+
+var factory = function( $, DataTable ) {
+"use strict";
+
+/**
+ * Responsive is a plug-in for the DataTables library that makes use of
+ * DataTables' ability to change the visibility of columns, changing the
+ * visibility of columns so the displayed columns fit into the table container.
+ * The end result is that complex tables will be dynamically adjusted to fit
+ * into the viewport, be it on a desktop, tablet or mobile browser.
+ *
+ * Responsive for DataTables has two modes of operation, which can used
+ * individually or combined:
+ *
+ * * Class name based control - columns assigned class names that match the
+ * breakpoint logic can be shown / hidden as required for each breakpoint.
+ * * Automatic control - columns are automatically hidden when there is no
+ * room left to display them. Columns removed from the right.
+ *
+ * In additional to column visibility control, Responsive also has built into
+ * options to use DataTables' child row display to show / hide the information
+ * from the table that has been hidden. There are also two modes of operation
+ * for this child row display:
+ *
+ * * Inline - when the control element that the user can use to show / hide
+ * child rows is displayed inside the first column of the table.
+ * * Column - where a whole column is dedicated to be the show / hide control.
+ *
+ * Initialisation of Responsive is performed by:
+ *
+ * * Adding the class `responsive` or `dt-responsive` to the table. In this case
+ * Responsive will automatically be initialised with the default configuration
+ * options when the DataTable is created.
+ * * Using the `responsive` option in the DataTables configuration options. This
+ * can also be used to specify the configuration options, or simply set to
+ * `true` to use the defaults.
+ *
+ * @class
+ * @param {object} settings DataTables settings object for the host table
+ * @param {object} [opts] Configuration options
+ * @requires jQuery 1.7+
+ * @requires DataTables 1.10.1+
+ *
+ * @example
+ * $('#example').DataTable( {
+ * responsive: true
+ * } );
+ * } );
+ */
+var Responsive = function ( settings, opts ) {
+ // Sanity check that we are using DataTables 1.10 or newer
+ if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.1' ) ) {
+ throw 'DataTables Responsive requires DataTables 1.10.1 or newer';
+ }
+
+ this.s = {
+ dt: new DataTable.Api( settings ),
+ columns: []
+ };
+
+ // Check if responsive has already been initialised on this table
+ if ( this.s.dt.settings()[0].responsive ) {
+ return;
+ }
+
+ // details is an object, but for simplicity the user can give it as a string
+ if ( opts && typeof opts.details === 'string' ) {
+ opts.details = { type: opts.details };
+ }
+
+ this.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts );
+ settings.responsive = this;
+ this._constructor();
+};
+
+Responsive.prototype = {
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Constructor
+ */
+
+ /**
+ * Initialise the Responsive instance
+ *
+ * @private
+ */
+ _constructor: function ()
+ {
+ var that = this;
+ var dt = this.s.dt;
+
+ dt.settings()[0]._responsive = this;
+
+ // Use DataTables' private throttle function to avoid processor thrashing
+ $(window).on( 'resize.dtr orientationchange.dtr', dt.settings()[0].oApi._fnThrottle( function () {
+ that._resize();
+ } ) );
+
+ // Destroy event handler
+ dt.on( 'destroy.dtr', function () {
+ $(window).off( 'resize.dtr orientationchange.dtr draw.dtr' );
+ } );
+
+ // Reorder the breakpoints array here in case they have been added out
+ // of order
+ this.c.breakpoints.sort( function (a, b) {
+ return a.width < b.width ? 1 :
+ a.width > b.width ? -1 : 0;
+ } );
+
+ // Determine which columns are already hidden, and should therefore
+ // remain hidden. todo - should this be done? See thread 22677
+ //
+ // this.s.alwaysHidden = dt.columns(':hidden').indexes();
+
+ this._classLogic();
+ this._resizeAuto();
+
+ // Details handler
+ var details = this.c.details;
+ if ( details.type ) {
+ that._detailsInit();
+ this._detailsVis();
+
+ dt.on( 'column-visibility.dtr', function () {
+ that._detailsVis();
+ } );
+
+ // Redraw the details box on each draw. This is used until
+ // DataTables implements a native `updated` event for rows
+ dt.on( 'draw.dtr', function () {
+ dt.rows( {page: 'current'} ).iterator( 'row', function ( settings, idx ) {
+ var row = dt.row( idx );
+
+ if ( row.child.isShown() ) {
+ var info = that.c.details.renderer( dt, idx );
+ row.child( info, 'child' ).show();
+ }
+ } );
+ } );
+
+ $(dt.table().node()).addClass( 'dtr-'+details.type );
+ }
+
+ // First pass - draw the table for the current viewport size
+ this._resize();
+ },
+
+
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Private methods
+ */
+
+ /**
+ * Calculate the visibility for the columns in a table for a given
+ * breakpoint. The result is pre-determined based on the class logic if
+ * class names are used to control all columns, but the width of the table
+ * is also used if there are columns which are to be automatically shown
+ * and hidden.
+ *
+ * @param {string} breakpoint Breakpoint name to use for the calculation
+ * @return {array} Array of boolean values initiating the visibility of each
+ * column.
+ * @private
+ */
+ _columnsVisiblity: function ( breakpoint )
+ {
+ var dt = this.s.dt;
+ var columns = this.s.columns;
+ var i, ien;
+
+ // Class logic - determine which columns are in this breakpoint based
+ // on the classes. If no class control (i.e. `auto`) then `-` is used
+ // to indicate this to the rest of the function
+ var display = $.map( columns, function ( col ) {
+ return col.auto && col.minWidth === null ?
+ false :
+ col.auto === true ?
+ '-' :
+ $.inArray( breakpoint, col.includeIn ) !== -1;
+ } );
+
+ // Auto column control - first pass: how much width is taken by the
+ // ones that must be included from the non-auto columns
+ var requiredWidth = 0;
+ for ( i=0, ien=display.length ; i= size ) {
+ add( colIdx, breakpoints[i].name );
+ }
+ }
+ }
+ else if ( operator === 'not-' ) {
+ // Add all but this breakpoint (xxx need extra information)
+
+ for ( i=0, ien=breakpoints.length ; i=0 ; i-- ) {
+ if ( width <= breakpoints[i].width ) {
+ breakpoint = breakpoints[i].name;
+ break;
+ }
+ }
+
+ // Show the columns for that break point
+ var columnsVis = this._columnsVisiblity( breakpoint );
+
+ // Set the class before the column visibility is changed so event
+ // listeners know what the state is. Need to determine if there are
+ // any columns that are not visible but can be shown
+ var collapsedClass = false;
+ for ( i=0, ien=columns.length ; i ')
+ .append( cells )
+ .appendTo( clonedHeader );
+
+ // In the inline case extra padding is applied to the first column to
+ // give space for the show / hide icon. We need to use this in the
+ // calculation
+ if ( this.c.details.type === 'inline' ) {
+ $(clonedTable).addClass( 'dtr-inline collapsed' );
+ }
+
+ var inserted = $('')
+ .css( {
+ width: 1,
+ height: 1,
+ overflow: 'hidden'
+ } )
+ .append( clonedTable );
+
+ // Remove columns which are not to be included
+ inserted.find('th.never, td.never').remove();
+
+ inserted.insertBefore( dt.table().node() );
+
+ // The cloned header now contains the smallest that each column can be
+ dt.columns().eq(0).each( function ( idx ) {
+ columns[idx].minWidth = cells[ idx ].offsetWidth || 0;
+ } );
+
+ inserted.remove();
+ }
+};
+
+
+/**
+ * List of default breakpoints. Each item in the array is an object with two
+ * properties:
+ *
+ * * `name` - the breakpoint name.
+ * * `width` - the breakpoint width
+ *
+ * @name Responsive.breakpoints
+ * @static
+ */
+Responsive.breakpoints = [
+ { name: 'desktop', width: Infinity },
+ { name: 'tablet-l', width: 1024 },
+ { name: 'tablet-p', width: 768 },
+ { name: 'mobile-l', width: 480 },
+ { name: 'mobile-p', width: 320 }
+];
+
+
+/**
+ * Responsive default settings for initialisation
+ *
+ * @namespace
+ * @name Responsive.defaults
+ * @static
+ */
+Responsive.defaults = {
+ /**
+ * List of breakpoints for the instance. Note that this means that each
+ * instance can have its own breakpoints. Additionally, the breakpoints
+ * cannot be changed once an instance has been creased.
+ *
+ * @type {Array}
+ * @default Takes the value of `Responsive.breakpoints`
+ */
+ breakpoints: Responsive.breakpoints,
+
+ /**
+ * Enable / disable auto hiding calculations. It can help to increase
+ * performance slightly if you disable this option, but all columns would
+ * need to have breakpoint classes assigned to them
+ *
+ * @type {Boolean}
+ * @default `true`
+ */
+ auto: true,
+
+ /**
+ * Details control. If given as a string value, the `type` property of the
+ * default object is set to that value, and the defaults used for the rest
+ * of the object - this is for ease of implementation.
+ *
+ * The object consists of the following properties:
+ *
+ * * `renderer` - function that is called for display of the child row data.
+ * The default function will show the data from the hidden columns
+ * * `target` - Used as the selector for what objects to attach the child
+ * open / close to
+ * * `type` - `false` to disable the details display, `inline` or `column`
+ * for the two control types
+ *
+ * @type {Object|string}
+ */
+ details: {
+ renderer: function ( api, rowIdx ) {
+ var data = api.cells( rowIdx, ':hidden' ).eq(0).map( function ( cell ) {
+ var header = $( api.column( cell.column ).header() );
+ var idx = api.cell( cell ).index();
+
+ if ( header.hasClass( 'control' ) || header.hasClass( 'never' ) ) {
+ return '';
+ }
+
+ // Use a non-public DT API method to render the data for display
+ // This needs to be updated when DT adds a suitable method for
+ // this type of data retrieval
+ var dtPrivate = api.settings()[0];
+ var cellData = dtPrivate.oApi._fnGetCellData(
+ dtPrivate, idx.row, idx.column, 'display'
+ );
+ var title = header.text();
+ if ( title ) {
+ title = title + ':';
+ }
+
+ return ''+
+ ''+
+ title+
+ ' '+
+ ''+
+ cellData+
+ ''+
+ ' ';
+ } ).toArray().join('');
+
+ return data ?
+ $('
').append( data ) :
+ false;
+ },
+
+ target: 0,
+
+ type: 'inline'
+ }
+};
+
+
+/*
+ * API
+ */
+var Api = $.fn.dataTable.Api;
+
+// Doesn't do anything - work around for a bug in DT... Not documented
+Api.register( 'responsive()', function () {
+ return this;
+} );
+
+Api.register( 'responsive.index()', function ( li ) {
+ li = $(li);
+
+ return {
+ column: li.data('dtr-index'),
+ row: li.parent().data('dtr-index')
+ };
+} );
+
+Api.register( 'responsive.rebuild()', function () {
+ return this.iterator( 'table', function ( ctx ) {
+ if ( ctx._responsive ) {
+ ctx._responsive._classLogic();
+ }
+ } );
+} );
+
+Api.register( 'responsive.recalc()', function () {
+ return this.iterator( 'table', function ( ctx ) {
+ if ( ctx._responsive ) {
+ ctx._responsive._resizeAuto();
+ ctx._responsive._resize();
+ }
+ } );
+} );
+
+
+/**
+ * Version information
+ *
+ * @name Responsive.version
+ * @static
+ */
+Responsive.version = '1.0.6';
+
+
+$.fn.dataTable.Responsive = Responsive;
+$.fn.DataTable.Responsive = Responsive;
+
+// Attach a listener to the document which listens for DataTables initialisation
+// events so we can automatically initialise
+$(document).on( 'init.dt.dtr', function (e, settings, json) {
+ if ( e.namespace !== 'dt' ) {
+ return;
+ }
+
+ if ( $(settings.nTable).hasClass( 'responsive' ) ||
+ $(settings.nTable).hasClass( 'dt-responsive' ) ||
+ settings.oInit.responsive ||
+ DataTable.defaults.responsive
+ ) {
+ var init = settings.oInit.responsive;
+
+ if ( init !== false ) {
+ new Responsive( settings, $.isPlainObject( init ) ? init : {} );
+ }
+ }
+} );
+
+return Responsive;
+}; // /factory
+
+
+// Define as an AMD module if possible
+if ( typeof define === 'function' && define.amd ) {
+ define( ['jquery', 'datatables'], factory );
+}
+else if ( typeof exports === 'object' ) {
+ // Node/CommonJS
+ factory( require('jquery'), require('datatables') );
+}
+else if ( jQuery && !jQuery.fn.dataTable.Responsive ) {
+ // Otherwise simply initialise as normal, stopping multiple evaluation
+ factory( jQuery, jQuery.fn.dataTable );
+}
+
+
+})(window, document);
diff --git a/vendor/datatables-responsive/dataTables.responsive.scss b/vendor/datatables-responsive/dataTables.responsive.scss
new file mode 100644
index 0000000..ed657ff
--- /dev/null
+++ b/vendor/datatables-responsive/dataTables.responsive.scss
@@ -0,0 +1,149 @@
+
+//
+// Mixins
+//
+@mixin control() {
+ display: block;
+ position: absolute;
+ color: white;
+ border: 2px solid white;
+ border-radius: 16px;
+ text-align: center;
+ line-height: 14px;
+ box-shadow: 0 0 3px #444;
+ box-sizing: content-box;
+}
+
+@mixin control-open() {
+ content: '+';
+ background-color: #31b131;
+}
+
+@mixin control-close() {
+ content: '-';
+ background-color: #d33333;
+}
+
+
+//
+// Table styles
+//
+table.dataTable {
+ // Styling for the `inline` type
+ &.dtr-inline.collapsed > tbody {
+ > tr > td:first-child,
+ > tr > th:first-child {
+ position: relative;
+ padding-left: 30px;
+ cursor: pointer;
+
+ &:before {
+ top: 8px;
+ left: 4px;
+ height: 16px;
+ width: 16px;
+ @include control;
+ @include control-open;
+ }
+
+ &.dataTables_empty:before {
+ display: none;
+ }
+ }
+
+ > tr.parent {
+ > td:first-child:before,
+ > th:first-child:before {
+ @include control-close;
+ }
+ }
+
+ > tr.child td:before {
+ display: none;
+ }
+ }
+
+ // DataTables' `compact` styling
+ &.dtr-inline.collapsed.compact > tbody {
+ > tr > td:first-child,
+ > tr > th:first-child {
+ padding-left: 27px;
+
+ &:before {
+ top: 5px;
+ left: 4px;
+ height: 14px;
+ width: 14px;
+ border-radius: 14px;
+ line-height: 12px;
+ }
+ }
+ }
+
+
+ // Styling for the `column` type
+ &.dtr-column > tbody {
+ > tr > td.control,
+ > tr > th.control {
+ position: relative;
+ cursor: pointer;
+
+ &:before {
+ top: 50%;
+ left: 50%;
+ height: 16px;
+ width: 16px;
+ margin-top: -10px;
+ margin-left: -10px;
+ @include control;
+ @include control-open;
+ }
+ }
+
+ > tr.parent {
+ td.control:before,
+ th.control:before {
+ @include control-close;
+ }
+ }
+ }
+
+
+ // Child row styling
+ > tbody > tr.child {
+ padding: 0.5em 1em;
+
+ &:hover {
+ background: transparent !important;
+ }
+
+ ul {
+ display: inline-block;
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+
+ li {
+ border-bottom: 1px solid #efefef;
+ padding: 0.5em 0;
+
+ &:first-child {
+ padding-top: 0;
+ }
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+ }
+
+ span.dtr-title {
+ display: inline-block;
+ min-width: 75px;
+ font-weight: bold;
+ }
+
+ span.dtr-data {}
+ }
+}
+
diff --git a/vendor/datatables/css/dataTables.bootstrap.css b/vendor/datatables/css/dataTables.bootstrap.css
new file mode 100644
index 0000000..60bef77
--- /dev/null
+++ b/vendor/datatables/css/dataTables.bootstrap.css
@@ -0,0 +1,185 @@
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+ border-collapse: separate !important;
+}
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+table.dataTable td.dataTables_empty,
+table.dataTable th.dataTables_empty {
+ text-align: center;
+}
+table.dataTable.nowrap th,
+table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_length select {
+ width: 75px;
+ display: inline-block;
+}
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ margin-left: 0.5em;
+ display: inline-block;
+ width: auto;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1em 0;
+}
+
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 30px;
+}
+table.dataTable thead > tr > th:active,
+table.dataTable thead > tr > td:active {
+ outline: none;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+ position: relative;
+}
+table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+ position: absolute;
+ bottom: 8px;
+ right: 8px;
+ display: block;
+ font-family: 'Glyphicons Halflings';
+ opacity: 0.5;
+}
+table.dataTable thead .sorting:after {
+ opacity: 0.2;
+ content: "\e150";
+ /* sort */
+}
+table.dataTable thead .sorting_asc:after {
+ content: "\e155";
+ /* sort-by-attributes */
+}
+table.dataTable thead .sorting_desc:after {
+ content: "\e156";
+ /* sort-by-attributes-alt */
+}
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+ color: #eee;
+}
+
+div.dataTables_scrollHead table.dataTable {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+div.dataTables_scrollBody table thead .sorting:after,
+div.dataTables_scrollBody table thead .sorting_asc:after,
+div.dataTables_scrollBody table thead .sorting_desc:after {
+ display: none;
+}
+div.dataTables_scrollBody table tbody tr:first-child th,
+div.dataTables_scrollBody table tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_wrapper div.dataTables_length,
+ div.dataTables_wrapper div.dataTables_filter,
+ div.dataTables_wrapper div.dataTables_info,
+ div.dataTables_wrapper div.dataTables_paginate {
+ text-align: center;
+ }
+}
+table.dataTable.table-condensed > thead > tr > th {
+ padding-right: 20px;
+}
+table.dataTable.table-condensed .sorting:after,
+table.dataTable.table-condensed .sorting_asc:after,
+table.dataTable.table-condensed .sorting_desc:after {
+ top: 6px;
+ right: 6px;
+}
+
+table.table-bordered.dataTable th,
+table.table-bordered.dataTable td {
+ border-left-width: 0;
+}
+table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
+table.table-bordered.dataTable td:last-child,
+table.table-bordered.dataTable td:last-child {
+ border-right-width: 0;
+}
+table.table-bordered.dataTable tbody th,
+table.table-bordered.dataTable tbody td {
+ border-bottom-width: 0;
+}
+
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+div.table-responsive > div.dataTables_wrapper > div.row {
+ margin: 0;
+}
+div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
+ padding-left: 0;
+}
+div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
+ padding-right: 0;
+}
diff --git a/vendor/datatables/css/dataTables.bootstrap.min.css b/vendor/datatables/css/dataTables.bootstrap.min.css
new file mode 100644
index 0000000..16ed637
--- /dev/null
+++ b/vendor/datatables/css/dataTables.bootstrap.min.css
@@ -0,0 +1 @@
+table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:8px;right:8px;display:block;font-family:'Glyphicons Halflings';opacity:0.5}table.dataTable thead .sorting:after{opacity:0.2;content:"\e150"}table.dataTable thead .sorting_asc:after{content:"\e155"}table.dataTable thead .sorting_desc:after{content:"\e156"}table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{color:#eee}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
diff --git a/vendor/datatables/css/dataTables.bootstrap4.css b/vendor/datatables/css/dataTables.bootstrap4.css
new file mode 100644
index 0000000..c2c4ffb
--- /dev/null
+++ b/vendor/datatables/css/dataTables.bootstrap4.css
@@ -0,0 +1,193 @@
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+ border-collapse: separate !important;
+}
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+table.dataTable td.dataTables_empty,
+table.dataTable th.dataTables_empty {
+ text-align: center;
+}
+table.dataTable.nowrap th,
+table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_length select {
+ width: 75px;
+ display: inline-block;
+}
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ margin-left: 0.5em;
+ display: inline-block;
+ width: auto;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 0.85em;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1em 0;
+}
+
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 30px;
+}
+table.dataTable thead > tr > th:active,
+table.dataTable thead > tr > td:active {
+ outline: none;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+ position: relative;
+}
+table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:before,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:after {
+ position: absolute;
+ bottom: 0.9em;
+ display: block;
+ opacity: 0.3;
+}
+table.dataTable thead .sorting:before,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_desc:before,
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:before {
+ right: 1em;
+ content: "\2191";
+}
+table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+ right: 0.5em;
+ content: "\2193";
+}
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_desc:after {
+ opacity: 1;
+}
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:after {
+ opacity: 0;
+}
+
+div.dataTables_scrollHead table.dataTable {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+div.dataTables_scrollBody table thead .sorting:after,
+div.dataTables_scrollBody table thead .sorting_asc:after,
+div.dataTables_scrollBody table thead .sorting_desc:after {
+ display: none;
+}
+div.dataTables_scrollBody table tbody tr:first-child th,
+div.dataTables_scrollBody table tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_wrapper div.dataTables_length,
+ div.dataTables_wrapper div.dataTables_filter,
+ div.dataTables_wrapper div.dataTables_info,
+ div.dataTables_wrapper div.dataTables_paginate {
+ text-align: center;
+ }
+}
+table.dataTable.table-condensed > thead > tr > th {
+ padding-right: 20px;
+}
+table.dataTable.table-condensed .sorting:after,
+table.dataTable.table-condensed .sorting_asc:after,
+table.dataTable.table-condensed .sorting_desc:after {
+ top: 6px;
+ right: 6px;
+}
+
+table.table-bordered.dataTable th,
+table.table-bordered.dataTable td {
+ border-left-width: 0;
+}
+table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
+table.table-bordered.dataTable td:last-child,
+table.table-bordered.dataTable td:last-child {
+ border-right-width: 0;
+}
+table.table-bordered.dataTable tbody th,
+table.table-bordered.dataTable tbody td {
+ border-bottom-width: 0;
+}
+
+div.dataTables_scrollHead table.table-bordered {
+ border-bottom-width: 0;
+}
+
+div.table-responsive > div.dataTables_wrapper > div.row {
+ margin: 0;
+}
+div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:first-child {
+ padding-left: 0;
+}
+div.table-responsive > div.dataTables_wrapper > div.row > div[class^="col-"]:last-child {
+ padding-right: 0;
+}
diff --git a/vendor/datatables/css/dataTables.bootstrap4.min.css b/vendor/datatables/css/dataTables.bootstrap4.min.css
new file mode 100644
index 0000000..881beb3
--- /dev/null
+++ b/vendor/datatables/css/dataTables.bootstrap4.min.css
@@ -0,0 +1 @@
+table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important;border-collapse:separate !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:0.85em;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:0.9em;display:block;opacity:0.3}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.table-condensed>thead>tr>th{padding-right:20px}table.dataTable.table-condensed .sorting:after,table.dataTable.table-condensed .sorting_asc:after,table.dataTable.table-condensed .sorting_desc:after{top:6px;right:6px}table.table-bordered.dataTable th,table.table-bordered.dataTable td{border-left-width:0}table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable th:last-child,table.table-bordered.dataTable td:last-child,table.table-bordered.dataTable td:last-child{border-right-width:0}table.table-bordered.dataTable tbody th,table.table-bordered.dataTable tbody td{border-bottom-width:0}div.dataTables_scrollHead table.table-bordered{border-bottom-width:0}div.table-responsive>div.dataTables_wrapper>div.row{margin:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:first-child{padding-left:0}div.table-responsive>div.dataTables_wrapper>div.row>div[class^="col-"]:last-child{padding-right:0}
diff --git a/vendor/datatables/css/dataTables.foundation.css b/vendor/datatables/css/dataTables.foundation.css
new file mode 100644
index 0000000..24f8d04
--- /dev/null
+++ b/vendor/datatables/css/dataTables.foundation.css
@@ -0,0 +1,116 @@
+table.dataTable {
+ clear: both;
+ margin: 0.5em 0 !important;
+ max-width: none !important;
+ width: 100%;
+}
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+table.dataTable td.dataTables_empty,
+table.dataTable th.dataTables_empty {
+ text-align: center;
+}
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper {
+ position: relative;
+}
+div.dataTables_wrapper div.dataTables_length label {
+ float: left;
+ text-align: left;
+ margin-bottom: 0;
+}
+div.dataTables_wrapper div.dataTables_length select {
+ width: 75px;
+ margin-bottom: 0;
+}
+div.dataTables_wrapper div.dataTables_filter label {
+ float: right;
+ margin-bottom: 0;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ display: inline-block !important;
+ width: auto !important;
+ margin-bottom: 0;
+ margin-left: 0.5em;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 2px;
+}
+div.dataTables_wrapper div.dataTables_paginate {
+ float: right;
+ margin: 0;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1rem 0;
+}
+
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 1.5rem;
+}
+table.dataTable thead > tr > th:active,
+table.dataTable thead > tr > td:active {
+ outline: none;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc {
+ cursor: pointer;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ background-repeat: no-repeat;
+ background-position: center right;
+}
+table.dataTable thead .sorting {
+ background-image: url("../images/sort_both.png");
+}
+table.dataTable thead .sorting_asc {
+ background-image: url("../images/sort_asc.png");
+}
+table.dataTable thead .sorting_desc {
+ background-image: url("../images/sort_desc.png");
+}
+table.dataTable thead .sorting_asc_disabled {
+ background-image: url("../images/sort_asc_disabled.png");
+}
+table.dataTable thead .sorting_desc_disabled {
+ background-image: url("../images/sort_desc_disabled.png");
+}
+
+div.dataTables_scrollHead table {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+div.dataTables_scrollBody table tbody tr:first-child th,
+div.dataTables_scrollBody table tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
diff --git a/vendor/datatables/css/dataTables.foundation.min.css b/vendor/datatables/css/dataTables.foundation.min.css
new file mode 100644
index 0000000..9aef3da
--- /dev/null
+++ b/vendor/datatables/css/dataTables.foundation.min.css
@@ -0,0 +1 @@
+table.dataTable{clear:both;margin:0.5em 0 !important;max-width:none !important;width:100%}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper{position:relative}div.dataTables_wrapper div.dataTables_length label{float:left;text-align:left;margin-bottom:0}div.dataTables_wrapper div.dataTables_length select{width:75px;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter label{float:right;margin-bottom:0}div.dataTables_wrapper div.dataTables_filter input{display:inline-block !important;width:auto !important;margin-bottom:0;margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:2px}div.dataTables_wrapper div.dataTables_paginate{float:right;margin:0}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1rem 0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:1.5rem}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}div.dataTables_scrollHead table{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}
diff --git a/vendor/datatables/css/dataTables.jqueryui.css b/vendor/datatables/css/dataTables.jqueryui.css
new file mode 100644
index 0000000..3397b7c
--- /dev/null
+++ b/vendor/datatables/css/dataTables.jqueryui.css
@@ -0,0 +1,481 @@
+/*
+ * Table styles
+ */
+table.dataTable {
+ width: 100%;
+ margin: 0 auto;
+ clear: both;
+ border-collapse: separate;
+ border-spacing: 0;
+ /*
+ * Header and footer styles
+ */
+ /*
+ * Body styles
+ */
+}
+table.dataTable thead th,
+table.dataTable tfoot th {
+ font-weight: bold;
+}
+table.dataTable thead th,
+table.dataTable thead td {
+ padding: 10px 18px;
+}
+table.dataTable thead th:active,
+table.dataTable thead td:active {
+ outline: none;
+}
+table.dataTable tfoot th,
+table.dataTable tfoot td {
+ padding: 10px 18px 6px 18px;
+}
+table.dataTable tbody tr {
+ background-color: #ffffff;
+}
+table.dataTable tbody tr.selected {
+ background-color: #B0BED9;
+}
+table.dataTable tbody th,
+table.dataTable tbody td {
+ padding: 8px 10px;
+}
+table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
+ border-top: 1px solid #ddd;
+}
+table.dataTable.row-border tbody tr:first-child th,
+table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
+table.dataTable.display tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+ border-top: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+ border-left: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr:first-child th,
+table.dataTable.cell-border tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
+ background-color: #f9f9f9;
+}
+table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
+ background-color: #acbad4;
+}
+table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
+ background-color: #f6f6f6;
+}
+table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
+ background-color: #aab7d1;
+}
+table.dataTable.order-column tbody tr > .sorting_1,
+table.dataTable.order-column tbody tr > .sorting_2,
+table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
+table.dataTable.display tbody tr > .sorting_2,
+table.dataTable.display tbody tr > .sorting_3 {
+ background-color: #fafafa;
+}
+table.dataTable.order-column tbody tr.selected > .sorting_1,
+table.dataTable.order-column tbody tr.selected > .sorting_2,
+table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
+table.dataTable.display tbody tr.selected > .sorting_2,
+table.dataTable.display tbody tr.selected > .sorting_3 {
+ background-color: #acbad5;
+}
+table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
+ background-color: #f1f1f1;
+}
+table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
+ background-color: #f3f3f3;
+}
+table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
+ background-color: whitesmoke;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
+ background-color: #a6b4cd;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
+ background-color: #a8b5cf;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
+ background-color: #a9b7d1;
+}
+table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
+ background-color: #fafafa;
+}
+table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
+ background-color: #fcfcfc;
+}
+table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
+ background-color: #fefefe;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
+ background-color: #acbad5;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
+ background-color: #aebcd6;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
+ background-color: #afbdd8;
+}
+table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
+ background-color: #eaeaea;
+}
+table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
+ background-color: #ececec;
+}
+table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
+ background-color: #efefef;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
+ background-color: #a2aec7;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
+ background-color: #a3b0c9;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
+ background-color: #a5b2cb;
+}
+table.dataTable.no-footer {
+ border-bottom: 1px solid #111;
+}
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+table.dataTable.compact thead th,
+table.dataTable.compact thead td {
+ padding: 4px 17px 4px 4px;
+}
+table.dataTable.compact tfoot th,
+table.dataTable.compact tfoot td {
+ padding: 4px;
+}
+table.dataTable.compact tbody th,
+table.dataTable.compact tbody td {
+ padding: 4px;
+}
+table.dataTable th.dt-left,
+table.dataTable td.dt-left {
+ text-align: left;
+}
+table.dataTable th.dt-center,
+table.dataTable td.dt-center,
+table.dataTable td.dataTables_empty {
+ text-align: center;
+}
+table.dataTable th.dt-right,
+table.dataTable td.dt-right {
+ text-align: right;
+}
+table.dataTable th.dt-justify,
+table.dataTable td.dt-justify {
+ text-align: justify;
+}
+table.dataTable th.dt-nowrap,
+table.dataTable td.dt-nowrap {
+ white-space: nowrap;
+}
+table.dataTable thead th.dt-head-left,
+table.dataTable thead td.dt-head-left,
+table.dataTable tfoot th.dt-head-left,
+table.dataTable tfoot td.dt-head-left {
+ text-align: left;
+}
+table.dataTable thead th.dt-head-center,
+table.dataTable thead td.dt-head-center,
+table.dataTable tfoot th.dt-head-center,
+table.dataTable tfoot td.dt-head-center {
+ text-align: center;
+}
+table.dataTable thead th.dt-head-right,
+table.dataTable thead td.dt-head-right,
+table.dataTable tfoot th.dt-head-right,
+table.dataTable tfoot td.dt-head-right {
+ text-align: right;
+}
+table.dataTable thead th.dt-head-justify,
+table.dataTable thead td.dt-head-justify,
+table.dataTable tfoot th.dt-head-justify,
+table.dataTable tfoot td.dt-head-justify {
+ text-align: justify;
+}
+table.dataTable thead th.dt-head-nowrap,
+table.dataTable thead td.dt-head-nowrap,
+table.dataTable tfoot th.dt-head-nowrap,
+table.dataTable tfoot td.dt-head-nowrap {
+ white-space: nowrap;
+}
+table.dataTable tbody th.dt-body-left,
+table.dataTable tbody td.dt-body-left {
+ text-align: left;
+}
+table.dataTable tbody th.dt-body-center,
+table.dataTable tbody td.dt-body-center {
+ text-align: center;
+}
+table.dataTable tbody th.dt-body-right,
+table.dataTable tbody td.dt-body-right {
+ text-align: right;
+}
+table.dataTable tbody th.dt-body-justify,
+table.dataTable tbody td.dt-body-justify {
+ text-align: justify;
+}
+table.dataTable tbody th.dt-body-nowrap,
+table.dataTable tbody td.dt-body-nowrap {
+ white-space: nowrap;
+}
+
+table.dataTable,
+table.dataTable th,
+table.dataTable td {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+/*
+ * Control feature layout
+ */
+.dataTables_wrapper {
+ position: relative;
+ clear: both;
+ *zoom: 1;
+ zoom: 1;
+}
+.dataTables_wrapper .dataTables_length {
+ float: left;
+}
+.dataTables_wrapper .dataTables_filter {
+ float: right;
+ text-align: right;
+}
+.dataTables_wrapper .dataTables_filter input {
+ margin-left: 0.5em;
+}
+.dataTables_wrapper .dataTables_info {
+ clear: both;
+ float: left;
+ padding-top: 0.755em;
+}
+.dataTables_wrapper .dataTables_paginate {
+ float: right;
+ text-align: right;
+ padding-top: 0.25em;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button {
+ box-sizing: border-box;
+ display: inline-block;
+ min-width: 1.5em;
+ padding: 0.5em 1em;
+ margin-left: 2px;
+ text-align: center;
+ text-decoration: none !important;
+ cursor: pointer;
+ *cursor: hand;
+ color: #333 !important;
+ border: 1px solid transparent;
+ border-radius: 2px;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
+ color: #333 !important;
+ border: 1px solid #979797;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
+ /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
+ cursor: default;
+ color: #666 !important;
+ border: 1px solid transparent;
+ background: transparent;
+ box-shadow: none;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
+ color: white !important;
+ border: 1px solid #111;
+ background-color: #585858;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #585858 0%, #111 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, #585858 0%, #111 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, #585858 0%, #111 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, #585858 0%, #111 100%);
+ /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:active {
+ outline: none;
+ background-color: #2b2b2b;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
+ /* W3C */
+ box-shadow: inset 0 0 3px #111;
+}
+.dataTables_wrapper .dataTables_paginate .ellipsis {
+ padding: 0 1em;
+}
+.dataTables_wrapper .dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ height: 40px;
+ margin-left: -50%;
+ margin-top: -25px;
+ padding-top: 20px;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+}
+.dataTables_wrapper .dataTables_length,
+.dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info,
+.dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+ color: #333;
+}
+.dataTables_wrapper .dataTables_scroll {
+ clear: both;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
+ *margin-top: -1px;
+ -webkit-overflow-scrolling: touch;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td {
+ vertical-align: middle;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
+ height: 0;
+ overflow: hidden;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dataTables_wrapper.no-footer .dataTables_scrollBody {
+ border-bottom: 1px solid #111;
+}
+.dataTables_wrapper.no-footer div.dataTables_scrollHead table,
+.dataTables_wrapper.no-footer div.dataTables_scrollBody table {
+ border-bottom: none;
+}
+.dataTables_wrapper:after {
+ visibility: hidden;
+ display: block;
+ content: "";
+ clear: both;
+ height: 0;
+}
+
+@media screen and (max-width: 767px) {
+ .dataTables_wrapper .dataTables_info,
+ .dataTables_wrapper .dataTables_paginate {
+ float: none;
+ text-align: center;
+ }
+ .dataTables_wrapper .dataTables_paginate {
+ margin-top: 0.5em;
+ }
+}
+@media screen and (max-width: 640px) {
+ .dataTables_wrapper .dataTables_length,
+ .dataTables_wrapper .dataTables_filter {
+ float: none;
+ text-align: center;
+ }
+ .dataTables_wrapper .dataTables_filter {
+ margin-top: 0.5em;
+ }
+}
+table.dataTable thead th div.DataTables_sort_wrapper {
+ position: relative;
+}
+table.dataTable thead th div.DataTables_sort_wrapper span {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ right: -18px;
+}
+table.dataTable thead th.ui-state-default,
+table.dataTable tfoot th.ui-state-default {
+ border-left-width: 0;
+}
+table.dataTable thead th.ui-state-default:first-child,
+table.dataTable tfoot th.ui-state-default:first-child {
+ border-left-width: 1px;
+}
+
+/*
+ * Control feature layout
+ */
+.dataTables_wrapper .dataTables_paginate .fg-button {
+ box-sizing: border-box;
+ display: inline-block;
+ min-width: 1.5em;
+ padding: 0.5em;
+ margin-left: 2px;
+ text-align: center;
+ text-decoration: none !important;
+ cursor: pointer;
+ *cursor: hand;
+ border: 1px solid transparent;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:active {
+ outline: none;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:first-child {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:last-child {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.dataTables_wrapper .ui-widget-header {
+ font-weight: normal;
+}
+.dataTables_wrapper .ui-toolbar {
+ padding: 8px;
+}
+.dataTables_wrapper.no-footer .dataTables_scrollBody {
+ border-bottom: none;
+}
+.dataTables_wrapper .dataTables_length,
+.dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info,
+.dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+ color: inherit;
+}
diff --git a/vendor/datatables/css/dataTables.jqueryui.min.css b/vendor/datatables/css/dataTables.jqueryui.min.css
new file mode 100644
index 0000000..a1ec199
--- /dev/null
+++ b/vendor/datatables/css/dataTables.jqueryui.min.css
@@ -0,0 +1 @@
+table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}table.dataTable thead th div.DataTables_sort_wrapper{position:relative}table.dataTable thead th div.DataTables_sort_wrapper span{position:absolute;top:50%;margin-top:-8px;right:-18px}table.dataTable thead th.ui-state-default,table.dataTable tfoot th.ui-state-default{border-left-width:0}table.dataTable thead th.ui-state-default:first-child,table.dataTable tfoot th.ui-state-default:first-child{border-left-width:1px}.dataTables_wrapper .dataTables_paginate .fg-button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .fg-button:active{outline:none}.dataTables_wrapper .dataTables_paginate .fg-button:first-child{border-top-left-radius:3px;border-bottom-left-radius:3px}.dataTables_wrapper .dataTables_paginate .fg-button:last-child{border-top-right-radius:3px;border-bottom-right-radius:3px}.dataTables_wrapper .ui-widget-header{font-weight:normal}.dataTables_wrapper .ui-toolbar{padding:8px}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:none}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:inherit}
diff --git a/vendor/datatables/css/dataTables.material.css b/vendor/datatables/css/dataTables.material.css
new file mode 100644
index 0000000..c00f2e9
--- /dev/null
+++ b/vendor/datatables/css/dataTables.material.css
@@ -0,0 +1,87 @@
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ margin-left: 0.5em;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 10px;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ text-align: center;
+}
+div.dataTables_wrapper div.dataTables_paginate {
+ text-align: right;
+}
+div.dataTables_wrapper div.mdl-grid.dt-table {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+div.dataTables_wrapper div.mdl-grid.dt-table > div.mdl-cell {
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 30px;
+}
+table.dataTable thead > tr > th:active,
+table.dataTable thead > tr > td:active {
+ outline: none;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ cursor: pointer;
+ position: relative;
+}
+table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:before,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:after {
+ position: absolute;
+ bottom: 11px;
+ display: block;
+ opacity: 0.3;
+ font-size: 1.3em;
+}
+table.dataTable thead .sorting:before,
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_desc:before,
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:before {
+ right: 1em;
+ content: "\2191";
+}
+table.dataTable thead .sorting:after,
+table.dataTable thead .sorting_asc:after,
+table.dataTable thead .sorting_desc:after,
+table.dataTable thead .sorting_asc_disabled:after,
+table.dataTable thead .sorting_desc_disabled:after {
+ right: 0.5em;
+ content: "\2193";
+}
+table.dataTable thead .sorting_asc:before,
+table.dataTable thead .sorting_desc:after {
+ opacity: 1;
+}
+table.dataTable thead .sorting_asc_disabled:before,
+table.dataTable thead .sorting_desc_disabled:after {
+ opacity: 0;
+}
diff --git a/vendor/datatables/css/dataTables.material.min.css b/vendor/datatables/css/dataTables.material.min.css
new file mode 100644
index 0000000..5935ac4
--- /dev/null
+++ b/vendor/datatables/css/dataTables.material.min.css
@@ -0,0 +1 @@
+div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:10px;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;text-align:center}div.dataTables_wrapper div.dataTables_paginate{text-align:right}div.dataTables_wrapper div.mdl-grid.dt-table{padding-top:0;padding-bottom:0}div.dataTables_wrapper div.mdl-grid.dt-table>div.mdl-cell{margin-top:0;margin-bottom:0}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th:active,table.dataTable thead>tr>td:active{outline:none}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;position:relative}table.dataTable thead .sorting:before,table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{position:absolute;bottom:11px;display:block;opacity:0.3;font-size:1.3em}table.dataTable thead .sorting:before,table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before,table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:before{right:1em;content:"\2191"}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after,table.dataTable thead .sorting_asc_disabled:after,table.dataTable thead .sorting_desc_disabled:after{right:0.5em;content:"\2193"}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:after{opacity:1}table.dataTable thead .sorting_asc_disabled:before,table.dataTable thead .sorting_desc_disabled:after{opacity:0}
diff --git a/vendor/datatables/css/dataTables.semanticui.css b/vendor/datatables/css/dataTables.semanticui.css
new file mode 100644
index 0000000..69ecaf8
--- /dev/null
+++ b/vendor/datatables/css/dataTables.semanticui.css
@@ -0,0 +1,103 @@
+/*
+ * Styling for DataTables with Semantic UI
+ */
+table.dataTable.table {
+ margin: 0;
+}
+table.dataTable.table thead th,
+table.dataTable.table thead td {
+ position: relative;
+}
+table.dataTable.table thead th.sorting, table.dataTable.table thead th.sorting_asc, table.dataTable.table thead th.sorting_desc,
+table.dataTable.table thead td.sorting,
+table.dataTable.table thead td.sorting_asc,
+table.dataTable.table thead td.sorting_desc {
+ padding-right: 20px;
+}
+table.dataTable.table thead th.sorting:after, table.dataTable.table thead th.sorting_asc:after, table.dataTable.table thead th.sorting_desc:after,
+table.dataTable.table thead td.sorting:after,
+table.dataTable.table thead td.sorting_asc:after,
+table.dataTable.table thead td.sorting_desc:after {
+ position: absolute;
+ top: 12px;
+ right: 8px;
+ display: block;
+ font-family: Icons;
+}
+table.dataTable.table thead th.sorting:after,
+table.dataTable.table thead td.sorting:after {
+ content: "\f0dc";
+ color: #ddd;
+ font-size: 0.8em;
+}
+table.dataTable.table thead th.sorting_asc:after,
+table.dataTable.table thead td.sorting_asc:after {
+ content: "\f0de";
+}
+table.dataTable.table thead th.sorting_desc:after,
+table.dataTable.table thead td.sorting_desc:after {
+ content: "\f0dd";
+}
+table.dataTable.table td,
+table.dataTable.table th {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+table.dataTable.table td.dataTables_empty,
+table.dataTable.table th.dataTables_empty {
+ text-align: center;
+}
+table.dataTable.table.nowrap th,
+table.dataTable.table.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.dataTables_length select {
+ vertical-align: middle;
+ min-height: 2.7142em;
+}
+div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown {
+ min-width: 0;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ margin-left: 0.5em;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 13px;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ text-align: center;
+}
+div.dataTables_wrapper div.row.dt-table {
+ padding: 0;
+}
+div.dataTables_wrapper div.dataTables_scrollHead table.dataTable {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+ border-bottom: none;
+}
+div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,
+div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,
+div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after {
+ display: none;
+}
+div.dataTables_wrapper div.dataTables_scrollBody table.dataTable {
+ border-radius: 0;
+ border-top: none;
+ border-bottom-width: 0;
+}
+div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer {
+ border-bottom-width: 1px;
+}
+div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0;
+ border-top: none;
+}
diff --git a/vendor/datatables/css/dataTables.semanticui.min.css b/vendor/datatables/css/dataTables.semanticui.min.css
new file mode 100644
index 0000000..4df32da
--- /dev/null
+++ b/vendor/datatables/css/dataTables.semanticui.min.css
@@ -0,0 +1 @@
+table.dataTable.table{margin:0}table.dataTable.table thead th,table.dataTable.table thead td{position:relative}table.dataTable.table thead th.sorting,table.dataTable.table thead th.sorting_asc,table.dataTable.table thead th.sorting_desc,table.dataTable.table thead td.sorting,table.dataTable.table thead td.sorting_asc,table.dataTable.table thead td.sorting_desc{padding-right:20px}table.dataTable.table thead th.sorting:after,table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting:after,table.dataTable.table thead td.sorting_asc:after,table.dataTable.table thead td.sorting_desc:after{position:absolute;top:12px;right:8px;display:block;font-family:Icons}table.dataTable.table thead th.sorting:after,table.dataTable.table thead td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em}table.dataTable.table thead th.sorting_asc:after,table.dataTable.table thead td.sorting_asc:after{content:"\f0de"}table.dataTable.table thead th.sorting_desc:after,table.dataTable.table thead td.sorting_desc:after{content:"\f0dd"}table.dataTable.table td,table.dataTable.table th{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}table.dataTable.table td.dataTables_empty,table.dataTable.table th.dataTables_empty{text-align:center}table.dataTable.table.nowrap th,table.dataTable.table.nowrap td{white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{vertical-align:middle;min-height:2.7142em}div.dataTables_wrapper div.dataTables_length .ui.selection.dropdown{min-width:0}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em}div.dataTables_wrapper div.dataTables_info{padding-top:13px;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;text-align:center}div.dataTables_wrapper div.row.dt-table{padding:0}div.dataTables_wrapper div.dataTables_scrollHead table.dataTable{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:none}div.dataTables_wrapper div.dataTables_scrollBody thead .sorting:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_asc:after,div.dataTables_wrapper div.dataTables_scrollBody thead .sorting_desc:after{display:none}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable{border-radius:0;border-top:none;border-bottom-width:0}div.dataTables_wrapper div.dataTables_scrollBody table.dataTable.no-footer{border-bottom-width:1px}div.dataTables_wrapper div.dataTables_scrollFoot table.dataTable{border-top-right-radius:0;border-top-left-radius:0;border-top:none}
diff --git a/vendor/datatables/css/dataTables.uikit.css b/vendor/datatables/css/dataTables.uikit.css
new file mode 100644
index 0000000..8e1e21e
--- /dev/null
+++ b/vendor/datatables/css/dataTables.uikit.css
@@ -0,0 +1,146 @@
+table.dataTable {
+ clear: both;
+ margin-top: 6px !important;
+ margin-bottom: 6px !important;
+ max-width: none !important;
+}
+table.dataTable td,
+table.dataTable th {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+table.dataTable td.dataTables_empty,
+table.dataTable th.dataTables_empty {
+ text-align: center;
+}
+table.dataTable.nowrap th,
+table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+
+div.dataTables_wrapper div.row.uk-grid.dt-merge-grid {
+ margin-top: 5px;
+}
+div.dataTables_wrapper div.dataTables_length label {
+ font-weight: normal;
+ text-align: left;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_length select {
+ width: 75px;
+ display: inline-block;
+}
+div.dataTables_wrapper div.dataTables_filter {
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_filter label {
+ font-weight: normal;
+ white-space: nowrap;
+ text-align: left;
+}
+div.dataTables_wrapper div.dataTables_filter input {
+ margin-left: 0.5em;
+ display: inline-block;
+ width: auto;
+}
+div.dataTables_wrapper div.dataTables_info {
+ padding-top: 8px;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_paginate {
+ margin: 0;
+ white-space: nowrap;
+ text-align: right;
+}
+div.dataTables_wrapper div.dataTables_paginate ul.pagination {
+ margin: 2px 0;
+ white-space: nowrap;
+}
+div.dataTables_wrapper div.dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 200px;
+ margin-left: -100px;
+ margin-top: -26px;
+ text-align: center;
+ padding: 1em 0;
+}
+
+table.dataTable thead > tr > th,
+table.dataTable thead > tr > td {
+ position: relative;
+}
+table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting,
+table.dataTable thead > tr > td.sorting_asc,
+table.dataTable thead > tr > td.sorting_desc,
+table.dataTable thead > tr > td.sorting {
+ padding-right: 30px;
+}
+table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after,
+table.dataTable thead > tr > td.sorting:after,
+table.dataTable thead > tr > td.sorting_asc:after,
+table.dataTable thead > tr > td.sorting_desc:after {
+ position: absolute;
+ top: 7px;
+ right: 8px;
+ display: block;
+ font-family: 'FontAwesome';
+}
+table.dataTable thead > tr > th.sorting:after,
+table.dataTable thead > tr > td.sorting:after {
+ content: "\f0dc";
+ color: #ddd;
+ font-size: 0.8em;
+ padding-top: 0.12em;
+}
+table.dataTable thead > tr > th.sorting_asc:after,
+table.dataTable thead > tr > td.sorting_asc:after {
+ content: "\f0de";
+}
+table.dataTable thead > tr > th.sorting_desc:after,
+table.dataTable thead > tr > td.sorting_desc:after {
+ content: "\f0dd";
+}
+
+div.dataTables_scrollHead table.dataTable {
+ margin-bottom: 0 !important;
+}
+
+div.dataTables_scrollBody table {
+ border-top: none;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+div.dataTables_scrollBody table thead .sorting:after,
+div.dataTables_scrollBody table thead .sorting_asc:after,
+div.dataTables_scrollBody table thead .sorting_desc:after {
+ display: none;
+}
+div.dataTables_scrollBody table tbody tr:first-child th,
+div.dataTables_scrollBody table tbody tr:first-child td {
+ border-top: none;
+}
+
+div.dataTables_scrollFoot table {
+ margin-top: 0 !important;
+ border-top: none;
+}
+
+@media screen and (max-width: 767px) {
+ div.dataTables_wrapper div.dataTables_length,
+ div.dataTables_wrapper div.dataTables_filter,
+ div.dataTables_wrapper div.dataTables_info,
+ div.dataTables_wrapper div.dataTables_paginate {
+ text-align: center;
+ }
+}
+table.dataTable.uk-table-condensed > thead > tr > th {
+ padding-right: 20px;
+}
+table.dataTable.uk-table-condensed .sorting:after,
+table.dataTable.uk-table-condensed .sorting_asc:after,
+table.dataTable.uk-table-condensed .sorting_desc:after {
+ top: 6px;
+ right: 6px;
+}
diff --git a/vendor/datatables/css/dataTables.uikit.min.css b/vendor/datatables/css/dataTables.uikit.min.css
new file mode 100644
index 0000000..0818eed
--- /dev/null
+++ b/vendor/datatables/css/dataTables.uikit.min.css
@@ -0,0 +1 @@
+table.dataTable{clear:both;margin-top:6px !important;margin-bottom:6px !important;max-width:none !important}table.dataTable td,table.dataTable th{-webkit-box-sizing:content-box;box-sizing:content-box}table.dataTable td.dataTables_empty,table.dataTable th.dataTables_empty{text-align:center}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}div.dataTables_wrapper div.row.uk-grid.dt-merge-grid{margin-top:5px}div.dataTables_wrapper div.dataTables_length label{font-weight:normal;text-align:left;white-space:nowrap}div.dataTables_wrapper div.dataTables_length select{width:75px;display:inline-block}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter label{font-weight:normal;white-space:nowrap;text-align:left}div.dataTables_wrapper div.dataTables_filter input{margin-left:0.5em;display:inline-block;width:auto}div.dataTables_wrapper div.dataTables_info{padding-top:8px;white-space:nowrap}div.dataTables_wrapper div.dataTables_paginate{margin:0;white-space:nowrap;text-align:right}div.dataTables_wrapper div.dataTables_paginate ul.pagination{margin:2px 0;white-space:nowrap}div.dataTables_wrapper div.dataTables_processing{position:absolute;top:50%;left:50%;width:200px;margin-left:-100px;margin-top:-26px;text-align:center;padding:1em 0}table.dataTable thead>tr>th,table.dataTable thead>tr>td{position:relative}table.dataTable thead>tr>th.sorting_asc,table.dataTable thead>tr>th.sorting_desc,table.dataTable thead>tr>th.sorting,table.dataTable thead>tr>td.sorting_asc,table.dataTable thead>tr>td.sorting_desc,table.dataTable thead>tr>td.sorting{padding-right:30px}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting:after,table.dataTable thead>tr>td.sorting_asc:after,table.dataTable thead>tr>td.sorting_desc:after{position:absolute;top:7px;right:8px;display:block;font-family:'FontAwesome'}table.dataTable thead>tr>th.sorting:after,table.dataTable thead>tr>td.sorting:after{content:"\f0dc";color:#ddd;font-size:0.8em;padding-top:0.12em}table.dataTable thead>tr>th.sorting_asc:after,table.dataTable thead>tr>td.sorting_asc:after{content:"\f0de"}table.dataTable thead>tr>th.sorting_desc:after,table.dataTable thead>tr>td.sorting_desc:after{content:"\f0dd"}div.dataTables_scrollHead table.dataTable{margin-bottom:0 !important}div.dataTables_scrollBody table{border-top:none;margin-top:0 !important;margin-bottom:0 !important}div.dataTables_scrollBody table thead .sorting:after,div.dataTables_scrollBody table thead .sorting_asc:after,div.dataTables_scrollBody table thead .sorting_desc:after{display:none}div.dataTables_scrollBody table tbody tr:first-child th,div.dataTables_scrollBody table tbody tr:first-child td{border-top:none}div.dataTables_scrollFoot table{margin-top:0 !important;border-top:none}@media screen and (max-width: 767px){div.dataTables_wrapper div.dataTables_length,div.dataTables_wrapper div.dataTables_filter,div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{text-align:center}}table.dataTable.uk-table-condensed>thead>tr>th{padding-right:20px}table.dataTable.uk-table-condensed .sorting:after,table.dataTable.uk-table-condensed .sorting_asc:after,table.dataTable.uk-table-condensed .sorting_desc:after{top:6px;right:6px}
diff --git a/vendor/datatables/css/jquery.dataTables.css b/vendor/datatables/css/jquery.dataTables.css
new file mode 100644
index 0000000..151b858
--- /dev/null
+++ b/vendor/datatables/css/jquery.dataTables.css
@@ -0,0 +1,452 @@
+/*
+ * Table styles
+ */
+table.dataTable {
+ width: 100%;
+ margin: 0 auto;
+ clear: both;
+ border-collapse: separate;
+ border-spacing: 0;
+ /*
+ * Header and footer styles
+ */
+ /*
+ * Body styles
+ */
+}
+table.dataTable thead th,
+table.dataTable tfoot th {
+ font-weight: bold;
+}
+table.dataTable thead th,
+table.dataTable thead td {
+ padding: 10px 18px;
+ border-bottom: 1px solid #111;
+}
+table.dataTable thead th:active,
+table.dataTable thead td:active {
+ outline: none;
+}
+table.dataTable tfoot th,
+table.dataTable tfoot td {
+ padding: 10px 18px 6px 18px;
+ border-top: 1px solid #111;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc {
+ cursor: pointer;
+ *cursor: hand;
+}
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ background-repeat: no-repeat;
+ background-position: center right;
+}
+table.dataTable thead .sorting {
+ background-image: url("../images/sort_both.png");
+}
+table.dataTable thead .sorting_asc {
+ background-image: url("../images/sort_asc.png");
+}
+table.dataTable thead .sorting_desc {
+ background-image: url("../images/sort_desc.png");
+}
+table.dataTable thead .sorting_asc_disabled {
+ background-image: url("../images/sort_asc_disabled.png");
+}
+table.dataTable thead .sorting_desc_disabled {
+ background-image: url("../images/sort_desc_disabled.png");
+}
+table.dataTable tbody tr {
+ background-color: #ffffff;
+}
+table.dataTable tbody tr.selected {
+ background-color: #B0BED9;
+}
+table.dataTable tbody th,
+table.dataTable tbody td {
+ padding: 8px 10px;
+}
+table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
+ border-top: 1px solid #ddd;
+}
+table.dataTable.row-border tbody tr:first-child th,
+table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
+table.dataTable.display tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+ border-top: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+ border-left: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr:first-child th,
+table.dataTable.cell-border tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
+ background-color: #f9f9f9;
+}
+table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
+ background-color: #acbad4;
+}
+table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
+ background-color: #f6f6f6;
+}
+table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
+ background-color: #aab7d1;
+}
+table.dataTable.order-column tbody tr > .sorting_1,
+table.dataTable.order-column tbody tr > .sorting_2,
+table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
+table.dataTable.display tbody tr > .sorting_2,
+table.dataTable.display tbody tr > .sorting_3 {
+ background-color: #fafafa;
+}
+table.dataTable.order-column tbody tr.selected > .sorting_1,
+table.dataTable.order-column tbody tr.selected > .sorting_2,
+table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
+table.dataTable.display tbody tr.selected > .sorting_2,
+table.dataTable.display tbody tr.selected > .sorting_3 {
+ background-color: #acbad5;
+}
+table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
+ background-color: #f1f1f1;
+}
+table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
+ background-color: #f3f3f3;
+}
+table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
+ background-color: whitesmoke;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
+ background-color: #a6b4cd;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
+ background-color: #a8b5cf;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
+ background-color: #a9b7d1;
+}
+table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
+ background-color: #fafafa;
+}
+table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
+ background-color: #fcfcfc;
+}
+table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
+ background-color: #fefefe;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
+ background-color: #acbad5;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
+ background-color: #aebcd6;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
+ background-color: #afbdd8;
+}
+table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
+ background-color: #eaeaea;
+}
+table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
+ background-color: #ececec;
+}
+table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
+ background-color: #efefef;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
+ background-color: #a2aec7;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
+ background-color: #a3b0c9;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
+ background-color: #a5b2cb;
+}
+table.dataTable.no-footer {
+ border-bottom: 1px solid #111;
+}
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+table.dataTable.compact thead th,
+table.dataTable.compact thead td {
+ padding: 4px 17px 4px 4px;
+}
+table.dataTable.compact tfoot th,
+table.dataTable.compact tfoot td {
+ padding: 4px;
+}
+table.dataTable.compact tbody th,
+table.dataTable.compact tbody td {
+ padding: 4px;
+}
+table.dataTable th.dt-left,
+table.dataTable td.dt-left {
+ text-align: left;
+}
+table.dataTable th.dt-center,
+table.dataTable td.dt-center,
+table.dataTable td.dataTables_empty {
+ text-align: center;
+}
+table.dataTable th.dt-right,
+table.dataTable td.dt-right {
+ text-align: right;
+}
+table.dataTable th.dt-justify,
+table.dataTable td.dt-justify {
+ text-align: justify;
+}
+table.dataTable th.dt-nowrap,
+table.dataTable td.dt-nowrap {
+ white-space: nowrap;
+}
+table.dataTable thead th.dt-head-left,
+table.dataTable thead td.dt-head-left,
+table.dataTable tfoot th.dt-head-left,
+table.dataTable tfoot td.dt-head-left {
+ text-align: left;
+}
+table.dataTable thead th.dt-head-center,
+table.dataTable thead td.dt-head-center,
+table.dataTable tfoot th.dt-head-center,
+table.dataTable tfoot td.dt-head-center {
+ text-align: center;
+}
+table.dataTable thead th.dt-head-right,
+table.dataTable thead td.dt-head-right,
+table.dataTable tfoot th.dt-head-right,
+table.dataTable tfoot td.dt-head-right {
+ text-align: right;
+}
+table.dataTable thead th.dt-head-justify,
+table.dataTable thead td.dt-head-justify,
+table.dataTable tfoot th.dt-head-justify,
+table.dataTable tfoot td.dt-head-justify {
+ text-align: justify;
+}
+table.dataTable thead th.dt-head-nowrap,
+table.dataTable thead td.dt-head-nowrap,
+table.dataTable tfoot th.dt-head-nowrap,
+table.dataTable tfoot td.dt-head-nowrap {
+ white-space: nowrap;
+}
+table.dataTable tbody th.dt-body-left,
+table.dataTable tbody td.dt-body-left {
+ text-align: left;
+}
+table.dataTable tbody th.dt-body-center,
+table.dataTable tbody td.dt-body-center {
+ text-align: center;
+}
+table.dataTable tbody th.dt-body-right,
+table.dataTable tbody td.dt-body-right {
+ text-align: right;
+}
+table.dataTable tbody th.dt-body-justify,
+table.dataTable tbody td.dt-body-justify {
+ text-align: justify;
+}
+table.dataTable tbody th.dt-body-nowrap,
+table.dataTable tbody td.dt-body-nowrap {
+ white-space: nowrap;
+}
+
+table.dataTable,
+table.dataTable th,
+table.dataTable td {
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+/*
+ * Control feature layout
+ */
+.dataTables_wrapper {
+ position: relative;
+ clear: both;
+ *zoom: 1;
+ zoom: 1;
+}
+.dataTables_wrapper .dataTables_length {
+ float: left;
+}
+.dataTables_wrapper .dataTables_filter {
+ float: right;
+ text-align: right;
+}
+.dataTables_wrapper .dataTables_filter input {
+ margin-left: 0.5em;
+}
+.dataTables_wrapper .dataTables_info {
+ clear: both;
+ float: left;
+ padding-top: 0.755em;
+}
+.dataTables_wrapper .dataTables_paginate {
+ float: right;
+ text-align: right;
+ padding-top: 0.25em;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button {
+ box-sizing: border-box;
+ display: inline-block;
+ min-width: 1.5em;
+ padding: 0.5em 1em;
+ margin-left: 2px;
+ text-align: center;
+ text-decoration: none !important;
+ cursor: pointer;
+ *cursor: hand;
+ color: #333 !important;
+ border: 1px solid transparent;
+ border-radius: 2px;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
+ color: #333 !important;
+ border: 1px solid #979797;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
+ /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
+ cursor: default;
+ color: #666 !important;
+ border: 1px solid transparent;
+ background: transparent;
+ box-shadow: none;
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
+ color: white !important;
+ border: 1px solid #111;
+ background-color: #585858;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #585858 0%, #111 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, #585858 0%, #111 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, #585858 0%, #111 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, #585858 0%, #111 100%);
+ /* W3C */
+}
+.dataTables_wrapper .dataTables_paginate .paginate_button:active {
+ outline: none;
+ background-color: #2b2b2b;
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
+ /* W3C */
+ box-shadow: inset 0 0 3px #111;
+}
+.dataTables_wrapper .dataTables_paginate .ellipsis {
+ padding: 0 1em;
+}
+.dataTables_wrapper .dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ height: 40px;
+ margin-left: -50%;
+ margin-top: -25px;
+ padding-top: 20px;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+}
+.dataTables_wrapper .dataTables_length,
+.dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info,
+.dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+ color: #333;
+}
+.dataTables_wrapper .dataTables_scroll {
+ clear: both;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
+ *margin-top: -1px;
+ -webkit-overflow-scrolling: touch;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td {
+ vertical-align: middle;
+}
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
+.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
+ height: 0;
+ overflow: hidden;
+ margin: 0 !important;
+ padding: 0 !important;
+}
+.dataTables_wrapper.no-footer .dataTables_scrollBody {
+ border-bottom: 1px solid #111;
+}
+.dataTables_wrapper.no-footer div.dataTables_scrollHead table,
+.dataTables_wrapper.no-footer div.dataTables_scrollBody table {
+ border-bottom: none;
+}
+.dataTables_wrapper:after {
+ visibility: hidden;
+ display: block;
+ content: "";
+ clear: both;
+ height: 0;
+}
+
+@media screen and (max-width: 767px) {
+ .dataTables_wrapper .dataTables_info,
+ .dataTables_wrapper .dataTables_paginate {
+ float: none;
+ text-align: center;
+ }
+ .dataTables_wrapper .dataTables_paginate {
+ margin-top: 0.5em;
+ }
+}
+@media screen and (max-width: 640px) {
+ .dataTables_wrapper .dataTables_length,
+ .dataTables_wrapper .dataTables_filter {
+ float: none;
+ text-align: center;
+ }
+ .dataTables_wrapper .dataTables_filter {
+ margin-top: 0.5em;
+ }
+}
diff --git a/vendor/datatables/css/jquery.dataTables.min.css b/vendor/datatables/css/jquery.dataTables.min.css
new file mode 100644
index 0000000..781de6b
--- /dev/null
+++ b/vendor/datatables/css/jquery.dataTables.min.css
@@ -0,0 +1 @@
+table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;*cursor:hand}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}}
diff --git a/vendor/datatables/css/jquery.dataTables_themeroller.css b/vendor/datatables/css/jquery.dataTables_themeroller.css
new file mode 100644
index 0000000..1426a44
--- /dev/null
+++ b/vendor/datatables/css/jquery.dataTables_themeroller.css
@@ -0,0 +1,416 @@
+/*
+ * Table styles
+ */
+table.dataTable {
+ width: 100%;
+ margin: 0 auto;
+ clear: both;
+ border-collapse: separate;
+ border-spacing: 0;
+ /*
+ * Header and footer styles
+ */
+ /*
+ * Body styles
+ */
+}
+table.dataTable thead th,
+table.dataTable thead td,
+table.dataTable tfoot th,
+table.dataTable tfoot td {
+ padding: 4px 10px;
+}
+table.dataTable thead th,
+table.dataTable tfoot th {
+ font-weight: bold;
+}
+table.dataTable thead th:active,
+table.dataTable thead td:active {
+ outline: none;
+}
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting {
+ cursor: pointer;
+ *cursor: hand;
+}
+table.dataTable thead th div.DataTables_sort_wrapper {
+ position: relative;
+ padding-right: 10px;
+}
+table.dataTable thead th div.DataTables_sort_wrapper span {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+ right: -5px;
+}
+table.dataTable thead th.ui-state-default {
+ border-right-width: 0;
+}
+table.dataTable thead th.ui-state-default:last-child {
+ border-right-width: 1px;
+}
+table.dataTable tbody tr {
+ background-color: #ffffff;
+}
+table.dataTable tbody tr.selected {
+ background-color: #B0BED9;
+}
+table.dataTable tbody th,
+table.dataTable tbody td {
+ padding: 8px 10px;
+}
+table.dataTable th.center,
+table.dataTable td.center,
+table.dataTable td.dataTables_empty {
+ text-align: center;
+}
+table.dataTable th.right,
+table.dataTable td.right {
+ text-align: right;
+}
+table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
+ border-top: 1px solid #ddd;
+}
+table.dataTable.row-border tbody tr:first-child th,
+table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
+table.dataTable.display tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+ border-top: 1px solid #ddd;
+ border-right: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+ border-left: 1px solid #ddd;
+}
+table.dataTable.cell-border tbody tr:first-child th,
+table.dataTable.cell-border tbody tr:first-child td {
+ border-top: none;
+}
+table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
+ background-color: #f9f9f9;
+}
+table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
+ background-color: #abb9d3;
+}
+table.dataTable.hover tbody tr:hover,
+table.dataTable.hover tbody tr.odd:hover,
+table.dataTable.hover tbody tr.even:hover, table.dataTable.display tbody tr:hover,
+table.dataTable.display tbody tr.odd:hover,
+table.dataTable.display tbody tr.even:hover {
+ background-color: whitesmoke;
+}
+table.dataTable.hover tbody tr:hover.selected,
+table.dataTable.hover tbody tr.odd:hover.selected,
+table.dataTable.hover tbody tr.even:hover.selected, table.dataTable.display tbody tr:hover.selected,
+table.dataTable.display tbody tr.odd:hover.selected,
+table.dataTable.display tbody tr.even:hover.selected {
+ background-color: #a9b7d1;
+}
+table.dataTable.order-column tbody tr > .sorting_1,
+table.dataTable.order-column tbody tr > .sorting_2,
+table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
+table.dataTable.display tbody tr > .sorting_2,
+table.dataTable.display tbody tr > .sorting_3 {
+ background-color: #f9f9f9;
+}
+table.dataTable.order-column tbody tr.selected > .sorting_1,
+table.dataTable.order-column tbody tr.selected > .sorting_2,
+table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
+table.dataTable.display tbody tr.selected > .sorting_2,
+table.dataTable.display tbody tr.selected > .sorting_3 {
+ background-color: #acbad4;
+}
+table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
+ background-color: #f1f1f1;
+}
+table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
+ background-color: #f3f3f3;
+}
+table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
+ background-color: whitesmoke;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
+ background-color: #a6b3cd;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
+ background-color: #a7b5ce;
+}
+table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
+ background-color: #a9b6d0;
+}
+table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
+ background-color: #f9f9f9;
+}
+table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
+ background-color: #fbfbfb;
+}
+table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
+ background-color: #fdfdfd;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
+ background-color: #acbad4;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
+ background-color: #adbbd6;
+}
+table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
+ background-color: #afbdd8;
+}
+table.dataTable.display tbody tr:hover > .sorting_1,
+table.dataTable.display tbody tr.odd:hover > .sorting_1,
+table.dataTable.display tbody tr.even:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1,
+table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1,
+table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1 {
+ background-color: #eaeaea;
+}
+table.dataTable.display tbody tr:hover > .sorting_2,
+table.dataTable.display tbody tr.odd:hover > .sorting_2,
+table.dataTable.display tbody tr.even:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2,
+table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2,
+table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2 {
+ background-color: #ebebeb;
+}
+table.dataTable.display tbody tr:hover > .sorting_3,
+table.dataTable.display tbody tr.odd:hover > .sorting_3,
+table.dataTable.display tbody tr.even:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3,
+table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3,
+table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3 {
+ background-color: #eeeeee;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_1,
+table.dataTable.display tbody tr.odd:hover.selected > .sorting_1,
+table.dataTable.display tbody tr.even:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1,
+table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1,
+table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1 {
+ background-color: #a1aec7;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_2,
+table.dataTable.display tbody tr.odd:hover.selected > .sorting_2,
+table.dataTable.display tbody tr.even:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2,
+table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2,
+table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2 {
+ background-color: #a2afc8;
+}
+table.dataTable.display tbody tr:hover.selected > .sorting_3,
+table.dataTable.display tbody tr.odd:hover.selected > .sorting_3,
+table.dataTable.display tbody tr.even:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3,
+table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3,
+table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3 {
+ background-color: #a4b2cb;
+}
+table.dataTable.nowrap th, table.dataTable.nowrap td {
+ white-space: nowrap;
+}
+table.dataTable.compact thead th,
+table.dataTable.compact thead td {
+ padding: 5px 9px;
+}
+table.dataTable.compact tfoot th,
+table.dataTable.compact tfoot td {
+ padding: 5px 9px 3px 9px;
+}
+table.dataTable.compact tbody th,
+table.dataTable.compact tbody td {
+ padding: 4px 5px;
+}
+table.dataTable th.dt-left,
+table.dataTable td.dt-left {
+ text-align: left;
+}
+table.dataTable th.dt-center,
+table.dataTable td.dt-center,
+table.dataTable td.dataTables_empty {
+ text-align: center;
+}
+table.dataTable th.dt-right,
+table.dataTable td.dt-right {
+ text-align: right;
+}
+table.dataTable th.dt-justify,
+table.dataTable td.dt-justify {
+ text-align: justify;
+}
+table.dataTable th.dt-nowrap,
+table.dataTable td.dt-nowrap {
+ white-space: nowrap;
+}
+table.dataTable thead th.dt-head-left,
+table.dataTable thead td.dt-head-left,
+table.dataTable tfoot th.dt-head-left,
+table.dataTable tfoot td.dt-head-left {
+ text-align: left;
+}
+table.dataTable thead th.dt-head-center,
+table.dataTable thead td.dt-head-center,
+table.dataTable tfoot th.dt-head-center,
+table.dataTable tfoot td.dt-head-center {
+ text-align: center;
+}
+table.dataTable thead th.dt-head-right,
+table.dataTable thead td.dt-head-right,
+table.dataTable tfoot th.dt-head-right,
+table.dataTable tfoot td.dt-head-right {
+ text-align: right;
+}
+table.dataTable thead th.dt-head-justify,
+table.dataTable thead td.dt-head-justify,
+table.dataTable tfoot th.dt-head-justify,
+table.dataTable tfoot td.dt-head-justify {
+ text-align: justify;
+}
+table.dataTable thead th.dt-head-nowrap,
+table.dataTable thead td.dt-head-nowrap,
+table.dataTable tfoot th.dt-head-nowrap,
+table.dataTable tfoot td.dt-head-nowrap {
+ white-space: nowrap;
+}
+table.dataTable tbody th.dt-body-left,
+table.dataTable tbody td.dt-body-left {
+ text-align: left;
+}
+table.dataTable tbody th.dt-body-center,
+table.dataTable tbody td.dt-body-center {
+ text-align: center;
+}
+table.dataTable tbody th.dt-body-right,
+table.dataTable tbody td.dt-body-right {
+ text-align: right;
+}
+table.dataTable tbody th.dt-body-justify,
+table.dataTable tbody td.dt-body-justify {
+ text-align: justify;
+}
+table.dataTable tbody th.dt-body-nowrap,
+table.dataTable tbody td.dt-body-nowrap {
+ white-space: nowrap;
+}
+
+table.dataTable,
+table.dataTable th,
+table.dataTable td {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+/*
+ * Control feature layout
+ */
+.dataTables_wrapper {
+ position: relative;
+ clear: both;
+ *zoom: 1;
+ zoom: 1;
+}
+.dataTables_wrapper .dataTables_length {
+ float: left;
+}
+.dataTables_wrapper .dataTables_filter {
+ float: right;
+ text-align: right;
+}
+.dataTables_wrapper .dataTables_filter input {
+ margin-left: 0.5em;
+}
+.dataTables_wrapper .dataTables_info {
+ clear: both;
+ float: left;
+ padding-top: 0.55em;
+}
+.dataTables_wrapper .dataTables_paginate {
+ float: right;
+ text-align: right;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button {
+ box-sizing: border-box;
+ display: inline-block;
+ min-width: 1.5em;
+ padding: 0.5em;
+ margin-left: 2px;
+ text-align: center;
+ text-decoration: none !important;
+ cursor: pointer;
+ *cursor: hand;
+ color: #333 !important;
+ border: 1px solid transparent;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:active {
+ outline: none;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:first-child {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.dataTables_wrapper .dataTables_paginate .fg-button:last-child {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.dataTables_wrapper .dataTables_processing {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 100%;
+ height: 40px;
+ margin-left: -50%;
+ margin-top: -25px;
+ padding-top: 20px;
+ text-align: center;
+ font-size: 1.2em;
+ background-color: white;
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ /* Chrome10+,Safari5.1+ */
+ background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ /* FF3.6+ */
+ background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ /* IE10+ */
+ background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ /* Opera 11.10+ */
+ background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
+ /* W3C */
+}
+.dataTables_wrapper .dataTables_length,
+.dataTables_wrapper .dataTables_filter,
+.dataTables_wrapper .dataTables_info,
+.dataTables_wrapper .dataTables_processing,
+.dataTables_wrapper .dataTables_paginate {
+ color: #333;
+}
+.dataTables_wrapper .dataTables_scroll {
+ clear: both;
+}
+.dataTables_wrapper .dataTables_scrollBody {
+ *margin-top: -1px;
+ -webkit-overflow-scrolling: touch;
+}
+.dataTables_wrapper .ui-widget-header {
+ font-weight: normal;
+}
+.dataTables_wrapper .ui-toolbar {
+ padding: 8px;
+}
+.dataTables_wrapper:after {
+ visibility: hidden;
+ display: block;
+ content: "";
+ clear: both;
+ height: 0;
+}
+
+@media screen and (max-width: 767px) {
+ .dataTables_wrapper .dataTables_length,
+ .dataTables_wrapper .dataTables_filter,
+ .dataTables_wrapper .dataTables_info,
+ .dataTables_wrapper .dataTables_paginate {
+ float: none;
+ text-align: center;
+ }
+ .dataTables_wrapper .dataTables_filter,
+ .dataTables_wrapper .dataTables_paginate {
+ margin-top: 0.5em;
+ }
+}
diff --git a/vendor/datatables/images/Sorting icons.psd b/vendor/datatables/images/Sorting icons.psd
new file mode 100644
index 0000000..53b2e06
Binary files /dev/null and b/vendor/datatables/images/Sorting icons.psd differ
diff --git a/vendor/datatables/images/favicon.ico b/vendor/datatables/images/favicon.ico
new file mode 100644
index 0000000..6eeaa2a
Binary files /dev/null and b/vendor/datatables/images/favicon.ico differ
diff --git a/vendor/datatables/images/sort_asc.png b/vendor/datatables/images/sort_asc.png
new file mode 100644
index 0000000..e1ba61a
Binary files /dev/null and b/vendor/datatables/images/sort_asc.png differ
diff --git a/vendor/datatables/images/sort_asc_disabled.png b/vendor/datatables/images/sort_asc_disabled.png
new file mode 100644
index 0000000..fb11dfe
Binary files /dev/null and b/vendor/datatables/images/sort_asc_disabled.png differ
diff --git a/vendor/datatables/images/sort_both.png b/vendor/datatables/images/sort_both.png
new file mode 100644
index 0000000..af5bc7c
Binary files /dev/null and b/vendor/datatables/images/sort_both.png differ
diff --git a/vendor/datatables/images/sort_desc.png b/vendor/datatables/images/sort_desc.png
new file mode 100644
index 0000000..0e156de
Binary files /dev/null and b/vendor/datatables/images/sort_desc.png differ
diff --git a/vendor/datatables/images/sort_desc_disabled.png b/vendor/datatables/images/sort_desc_disabled.png
new file mode 100644
index 0000000..c9fdd8a
Binary files /dev/null and b/vendor/datatables/images/sort_desc_disabled.png differ
diff --git a/vendor/datatables/js/dataTables.bootstrap.js b/vendor/datatables/js/dataTables.bootstrap.js
new file mode 100644
index 0000000..417aec3
--- /dev/null
+++ b/vendor/datatables/js/dataTables.bootstrap.js
@@ -0,0 +1,182 @@
+/*! DataTables Bootstrap 3 integration
+ * ©2011-2015 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
+ * for further information.
+ */
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ // Require DataTables, which attaches to jQuery, including
+ // jQuery if needed and have a $ property so we can access the
+ // jQuery object that is used
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ "<'row'<'col-sm-6'l><'col-sm-6'f>>" +
+ "<'row'<'col-sm-12'tr>>" +
+ "<'row'<'col-sm-5'i><'col-sm-7'p>>",
+ renderer: 'bootstrap'
+} );
+
+
+/* Default class modification */
+$.extend( DataTable.ext.classes, {
+ sWrapper: "dataTables_wrapper form-inline dt-bootstrap",
+ sFilterInput: "form-control input-sm",
+ sLengthSelect: "form-control input-sm",
+ sProcessing: "dataTables_processing panel panel-default"
+} );
+
+
+/* Bootstrap paging button renderer */
+DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
+ var api = new DataTable.Api( settings );
+ var classes = settings.oClasses;
+ var lang = settings.oLanguage.oPaginate;
+ var aria = settings.oLanguage.oAria.paginate || {};
+ var btnDisplay, btnClass, counter=0;
+
+ var attach = function( container, buttons ) {
+ var i, ien, node, button;
+ var clickHandler = function ( e ) {
+ e.preventDefault();
+ if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
+ api.page( e.data.action ).draw( 'page' );
+ }
+ };
+
+ for ( i=0, ien=buttons.length ; i 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'previous':
+ btnDisplay = lang.sPrevious;
+ btnClass = button + (page > 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'next':
+ btnDisplay = lang.sNext;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ case 'last':
+ btnDisplay = lang.sLast;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ default:
+ btnDisplay = button + 1;
+ btnClass = page === button ?
+ 'active' : '';
+ break;
+ }
+
+ if ( btnDisplay ) {
+ node = $('', {
+ 'class': classes.sPageButton+' '+btnClass,
+ 'id': idx === 0 && typeof button === 'string' ?
+ settings.sTableId +'_'+ button :
+ null
+ } )
+ .append( $('', {
+ 'href': '#',
+ 'aria-controls': settings.sTableId,
+ 'aria-label': aria[ button ],
+ 'data-dt-idx': counter,
+ 'tabindex': settings.iTabIndex
+ } )
+ .html( btnDisplay )
+ )
+ .appendTo( container );
+
+ settings.oApi._fnBindAction(
+ node, {action: button}, clickHandler
+ );
+
+ counter++;
+ }
+ }
+ }
+ };
+
+ // IE9 throws an 'unknown error' if document.activeElement is used
+ // inside an iframe or frame.
+ var activeEl;
+
+ try {
+ // Because this approach is destroying and recreating the paging
+ // elements, focus is lost on the select button which is bad for
+ // accessibility. So we want to restore focus once the draw has
+ // completed
+ activeEl = $(host).find(document.activeElement).data('dt-idx');
+ }
+ catch (e) {}
+
+ attach(
+ $(host).empty().html('
').children('ul'),
+ buttons
+ );
+
+ if ( activeEl ) {
+ $(host).find( '[data-dt-idx='+activeEl+']' ).focus();
+ }
+};
+
+
+return DataTable;
+}));
\ No newline at end of file
diff --git a/vendor/datatables/js/dataTables.bootstrap.min.js b/vendor/datatables/js/dataTables.bootstrap.min.js
new file mode 100644
index 0000000..2d824c8
--- /dev/null
+++ b/vendor/datatables/js/dataTables.bootstrap.min.js
@@ -0,0 +1,8 @@
+/*!
+ DataTables Bootstrap 3 integration
+ ©2011-2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-sm-6'l><'col-sm-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-5'i><'col-sm-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes,
+{sWrapper:"dataTables_wrapper form-inline dt-bootstrap",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new f.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&o.page(a.data.action).draw("page")};
+l=0;for(h=f.length;l",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+"_"+c:null}).append(b("",{href:"#",
+"aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('
').children("ul"),m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});
diff --git a/vendor/datatables/js/dataTables.bootstrap4.js b/vendor/datatables/js/dataTables.bootstrap4.js
new file mode 100644
index 0000000..e49d95f
--- /dev/null
+++ b/vendor/datatables/js/dataTables.bootstrap4.js
@@ -0,0 +1,184 @@
+/*! DataTables Bootstrap 3 integration
+ * ©2011-2015 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
+ * for further information.
+ */
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ // Require DataTables, which attaches to jQuery, including
+ // jQuery if needed and have a $ property so we can access the
+ // jQuery object that is used
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ "<'row'<'col-md-6'l><'col-md-6'f>>" +
+ "<'row'<'col-md-12'tr>>" +
+ "<'row'<'col-md-5'i><'col-md-7'p>>",
+ renderer: 'bootstrap'
+} );
+
+
+/* Default class modification */
+$.extend( DataTable.ext.classes, {
+ sWrapper: "dataTables_wrapper form-inline dt-bootstrap4",
+ sFilterInput: "form-control input-sm",
+ sLengthSelect: "form-control input-sm",
+ sProcessing: "dataTables_processing panel panel-default",
+ sPageButton: "paginate_button page-item"
+} );
+
+
+/* Bootstrap paging button renderer */
+DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) {
+ var api = new DataTable.Api( settings );
+ var classes = settings.oClasses;
+ var lang = settings.oLanguage.oPaginate;
+ var aria = settings.oLanguage.oAria.paginate || {};
+ var btnDisplay, btnClass, counter=0;
+
+ var attach = function( container, buttons ) {
+ var i, ien, node, button;
+ var clickHandler = function ( e ) {
+ e.preventDefault();
+ if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
+ api.page( e.data.action ).draw( 'page' );
+ }
+ };
+
+ for ( i=0, ien=buttons.length ; i 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'previous':
+ btnDisplay = lang.sPrevious;
+ btnClass = button + (page > 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'next':
+ btnDisplay = lang.sNext;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ case 'last':
+ btnDisplay = lang.sLast;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ default:
+ btnDisplay = button + 1;
+ btnClass = page === button ?
+ 'active' : '';
+ break;
+ }
+
+ if ( btnDisplay ) {
+ node = $('', {
+ 'class': classes.sPageButton+' '+btnClass,
+ 'id': idx === 0 && typeof button === 'string' ?
+ settings.sTableId +'_'+ button :
+ null
+ } )
+ .append( $('', {
+ 'href': '#',
+ 'aria-controls': settings.sTableId,
+ 'aria-label': aria[ button ],
+ 'data-dt-idx': counter,
+ 'tabindex': settings.iTabIndex,
+ 'class': 'page-link'
+ } )
+ .html( btnDisplay )
+ )
+ .appendTo( container );
+
+ settings.oApi._fnBindAction(
+ node, {action: button}, clickHandler
+ );
+
+ counter++;
+ }
+ }
+ }
+ };
+
+ // IE9 throws an 'unknown error' if document.activeElement is used
+ // inside an iframe or frame.
+ var activeEl;
+
+ try {
+ // Because this approach is destroying and recreating the paging
+ // elements, focus is lost on the select button which is bad for
+ // accessibility. So we want to restore focus once the draw has
+ // completed
+ activeEl = $(host).find(document.activeElement).data('dt-idx');
+ }
+ catch (e) {}
+
+ attach(
+ $(host).empty().html('
').children('ul'),
+ buttons
+ );
+
+ if ( activeEl ) {
+ $(host).find( '[data-dt-idx='+activeEl+']' ).focus();
+ }
+};
+
+
+return DataTable;
+}));
\ No newline at end of file
diff --git a/vendor/datatables/js/dataTables.bootstrap4.min.js b/vendor/datatables/js/dataTables.bootstrap4.min.js
new file mode 100644
index 0000000..471f174
--- /dev/null
+++ b/vendor/datatables/js/dataTables.bootstrap4.min.js
@@ -0,0 +1,8 @@
+/*!
+ DataTables Bootstrap 3 integration
+ ©2011-2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(b){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return b(a,window,document)}):"object"===typeof exports?module.exports=function(a,d){a||(a=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(a,d).$;return b(d,a,a.document)}:b(jQuery,window,document)})(function(b,a,d){var f=b.fn.dataTable;b.extend(!0,f.defaults,{dom:"<'row'<'col-md-6'l><'col-md-6'f>><'row'<'col-md-12'tr>><'row'<'col-md-5'i><'col-md-7'p>>",renderer:"bootstrap"});b.extend(f.ext.classes,
+{sWrapper:"dataTables_wrapper form-inline dt-bootstrap4",sFilterInput:"form-control input-sm",sLengthSelect:"form-control input-sm",sProcessing:"dataTables_processing panel panel-default",sPageButton:"paginate_button page-item"});f.ext.renderer.pageButton.bootstrap=function(a,h,r,m,j,n){var o=new f.Api(a),s=a.oClasses,k=a.oLanguage.oPaginate,t=a.oLanguage.oAria.paginate||{},e,g,p=0,q=function(d,f){var l,h,i,c,m=function(a){a.preventDefault();!b(a.currentTarget).hasClass("disabled")&&o.page()!=a.data.action&&
+o.page(a.data.action).draw("page")};l=0;for(h=f.length;l",{"class":s.sPageButton+" "+g,id:0===r&&"string"===typeof c?a.sTableId+
+"_"+c:null}).append(b("",{href:"#","aria-controls":a.sTableId,"aria-label":t[c],"data-dt-idx":p,tabindex:a.iTabIndex,"class":"page-link"}).html(e)).appendTo(d),a.oApi._fnBindAction(i,{action:c},m),p++)}},i;try{i=b(h).find(d.activeElement).data("dt-idx")}catch(u){}q(b(h).empty().html('
').children("ul"),m);i&&b(h).find("[data-dt-idx="+i+"]").focus()};return f});
diff --git a/vendor/datatables/js/dataTables.foundation.js b/vendor/datatables/js/dataTables.foundation.js
new file mode 100644
index 0000000..1e87c4b
--- /dev/null
+++ b/vendor/datatables/js/dataTables.foundation.js
@@ -0,0 +1,174 @@
+/*! DataTables Foundation integration
+ * ©2011-2015 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for Foundation. This requires Foundation 5 and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using Foundation. See http://datatables.net/manual/styling/foundation
+ * for further information.
+ */
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+// Detect Foundation 5 / 6 as they have different element and class requirements
+var meta = $('').appendTo('head');
+DataTable.ext.foundationVersion = meta.css('font-family').match(/small|medium|large/) ? 6 : 5;
+meta.remove();
+
+
+$.extend( DataTable.ext.classes, {
+ sWrapper: "dataTables_wrapper dt-foundation",
+ sProcessing: "dataTables_processing panel"
+} );
+
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ "<'row'<'small-6 columns'l><'small-6 columns'f>r>"+
+ "t"+
+ "<'row'<'small-6 columns'i><'small-6 columns'p>>",
+ renderer: 'foundation'
+} );
+
+
+/* Page button renderer */
+DataTable.ext.renderer.pageButton.foundation = function ( settings, host, idx, buttons, page, pages ) {
+ var api = new DataTable.Api( settings );
+ var classes = settings.oClasses;
+ var lang = settings.oLanguage.oPaginate;
+ var aria = settings.oLanguage.oAria.paginate || {};
+ var btnDisplay, btnClass;
+ var tag;
+ var v5 = DataTable.ext.foundationVersion === 5;
+
+ var attach = function( container, buttons ) {
+ var i, ien, node, button;
+ var clickHandler = function ( e ) {
+ e.preventDefault();
+ if ( !$(e.currentTarget).hasClass('unavailable') && api.page() != e.data.action ) {
+ api.page( e.data.action ).draw( 'page' );
+ }
+ };
+
+ for ( i=0, ien=buttons.length ; i 0 ?
+ '' : ' unavailable disabled');
+ tag = page > 0 ? 'a' : null;
+ break;
+
+ case 'previous':
+ btnDisplay = lang.sPrevious;
+ btnClass = button + (page > 0 ?
+ '' : ' unavailable disabled');
+ tag = page > 0 ? 'a' : null;
+ break;
+
+ case 'next':
+ btnDisplay = lang.sNext;
+ btnClass = button + (page < pages-1 ?
+ '' : ' unavailable disabled');
+ tag = page < pages-1 ? 'a' : null;
+ break;
+
+ case 'last':
+ btnDisplay = lang.sLast;
+ btnClass = button + (page < pages-1 ?
+ '' : ' unavailable disabled');
+ tag = page < pages-1 ? 'a' : null;
+ break;
+
+ default:
+ btnDisplay = button + 1;
+ btnClass = page === button ?
+ 'current' : '';
+ tag = page === button ?
+ null : 'a';
+ break;
+ }
+
+ if ( v5 ) {
+ tag = 'a';
+ }
+
+ if ( btnDisplay ) {
+ node = $('', {
+ 'class': classes.sPageButton+' '+btnClass,
+ 'aria-controls': settings.sTableId,
+ 'aria-label': aria[ button ],
+ 'tabindex': settings.iTabIndex,
+ 'id': idx === 0 && typeof button === 'string' ?
+ settings.sTableId +'_'+ button :
+ null
+ } )
+ .append( tag ?
+ $('<'+tag+'/>', {'href': '#'} ).html( btnDisplay ) :
+ btnDisplay
+ )
+ .appendTo( container );
+
+ settings.oApi._fnBindAction(
+ node, {action: button}, clickHandler
+ );
+ }
+ }
+ }
+ };
+
+ attach(
+ $(host).empty().html('
').children('ul'),
+ buttons
+ );
+};
+
+
+return DataTable;
+}));
diff --git a/vendor/datatables/js/dataTables.foundation.min.js b/vendor/datatables/js/dataTables.foundation.min.js
new file mode 100644
index 0000000..58c7b03
--- /dev/null
+++ b/vendor/datatables/js/dataTables.foundation.min.js
@@ -0,0 +1,8 @@
+/*!
+ DataTables Foundation integration
+ ©2011-2015 SpryMedia Ltd - datatables.net/license
+*/
+(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(a){return d(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net")(a,b).$;return d(b,a,a.document)}:d(jQuery,window,document)})(function(d){var a=d.fn.dataTable,b=d('').appendTo("head");a.ext.foundationVersion=b.css("font-family").match(/small|medium|large/)?6:5;b.remove();d.extend(a.ext.classes,
+{sWrapper:"dataTables_wrapper dt-foundation",sProcessing:"dataTables_processing panel"});d.extend(!0,a.defaults,{dom:"<'row'<'small-6 columns'l><'small-6 columns'f>r>t<'row'<'small-6 columns'i><'small-6 columns'p>>",renderer:"foundation"});a.ext.renderer.pageButton.foundation=function(b,l,r,s,e,i){var m=new a.Api(b),t=b.oClasses,j=b.oLanguage.oPaginate,u=b.oLanguage.oAria.paginate||{},f,h,g,v=5===a.ext.foundationVersion,q=function(a,n){var k,o,p,c,l=function(a){a.preventDefault();!d(a.currentTarget).hasClass("unavailable")&&
+m.page()!=a.data.action&&m.page(a.data.action).draw("page")};k=0;for(o=n.length;k",{"class":t.sPageButton+" "+h,"aria-controls":b.sTableId,"aria-label":u[c],tabindex:b.iTabIndex,id:0===r&&"string"===typeof c?b.sTableId+"_"+c:null}).append(g?d("<"+g+"/>",{href:"#"}).html(f):f).appendTo(a),b.oApi._fnBindAction(p,{action:c},l))}};q(d(l).empty().html('
').children("ul"),s)};return a});
diff --git a/vendor/datatables/js/dataTables.jqueryui.js b/vendor/datatables/js/dataTables.jqueryui.js
new file mode 100644
index 0000000..64d4325
--- /dev/null
+++ b/vendor/datatables/js/dataTables.jqueryui.js
@@ -0,0 +1,164 @@
+/*! DataTables jQuery UI integration
+ * ©2011-2014 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for jQuery UI. This requires jQuery UI and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using jQuery UI. See http://datatables.net/manual/styling/jqueryui
+ * for further information.
+ */
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+var sort_prefix = 'css_right ui-icon ui-icon-';
+var toolbar_prefix = 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-';
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ '<"'+toolbar_prefix+'tl ui-corner-tr"lfr>'+
+ 't'+
+ '<"'+toolbar_prefix+'bl ui-corner-br"ip>',
+ renderer: 'jqueryui'
+} );
+
+
+$.extend( DataTable.ext.classes, {
+ "sWrapper": "dataTables_wrapper dt-jqueryui",
+
+ /* Full numbers paging buttons */
+ "sPageButton": "fg-button ui-button ui-state-default",
+ "sPageButtonActive": "ui-state-disabled",
+ "sPageButtonDisabled": "ui-state-disabled",
+
+ /* Features */
+ "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+
+ "ui-buttonset-multi paging_", /* Note that the type is postfixed */
+
+ /* Sorting */
+ "sSortAsc": "ui-state-default sorting_asc",
+ "sSortDesc": "ui-state-default sorting_desc",
+ "sSortable": "ui-state-default sorting",
+ "sSortableAsc": "ui-state-default sorting_asc_disabled",
+ "sSortableDesc": "ui-state-default sorting_desc_disabled",
+ "sSortableNone": "ui-state-default sorting_disabled",
+ "sSortIcon": "DataTables_sort_icon",
+
+ /* Scrolling */
+ "sScrollHead": "dataTables_scrollHead "+"ui-state-default",
+ "sScrollFoot": "dataTables_scrollFoot "+"ui-state-default",
+
+ /* Misc */
+ "sHeaderTH": "ui-state-default",
+ "sFooterTH": "ui-state-default"
+} );
+
+
+DataTable.ext.renderer.header.jqueryui = function ( settings, cell, column, classes ) {
+ // Calculate what the unsorted class should be
+ var noSortAppliedClass = sort_prefix+'carat-2-n-s';
+ var asc = $.inArray('asc', column.asSorting) !== -1;
+ var desc = $.inArray('desc', column.asSorting) !== -1;
+
+ if ( !column.bSortable || (!asc && !desc) ) {
+ noSortAppliedClass = '';
+ }
+ else if ( asc && !desc ) {
+ noSortAppliedClass = sort_prefix+'carat-1-n';
+ }
+ else if ( !asc && desc ) {
+ noSortAppliedClass = sort_prefix+'carat-1-s';
+ }
+
+ // Setup the DOM structure
+ $('')
+ .addClass( 'DataTables_sort_wrapper' )
+ .append( cell.contents() )
+ .append( $('')
+ .addClass( classes.sSortIcon+' '+noSortAppliedClass )
+ )
+ .appendTo( cell );
+
+ // Attach a sort listener to update on sort
+ $(settings.nTable).on( 'order.dt', function ( e, ctx, sorting, columns ) {
+ if ( settings !== ctx ) {
+ return;
+ }
+
+ var colIdx = column.idx;
+
+ cell
+ .removeClass( classes.sSortAsc +" "+classes.sSortDesc )
+ .addClass( columns[ colIdx ] == 'asc' ?
+ classes.sSortAsc : columns[ colIdx ] == 'desc' ?
+ classes.sSortDesc :
+ column.sSortingClass
+ );
+
+ cell
+ .find( 'span.'+classes.sSortIcon )
+ .removeClass(
+ sort_prefix+'triangle-1-n' +" "+
+ sort_prefix+'triangle-1-s' +" "+
+ sort_prefix+'carat-2-n-s' +" "+
+ sort_prefix+'carat-1-n' +" "+
+ sort_prefix+'carat-1-s'
+ )
+ .addClass( columns[ colIdx ] == 'asc' ?
+ sort_prefix+'triangle-1-n' : columns[ colIdx ] == 'desc' ?
+ sort_prefix+'triangle-1-s' :
+ noSortAppliedClass
+ );
+ } );
+};
+
+
+/*
+ * TableTools jQuery UI compatibility
+ * Required TableTools 2.1+
+ */
+if ( DataTable.TableTools ) {
+ $.extend( true, DataTable.TableTools.classes, {
+ "container": "DTTT_container ui-buttonset ui-buttonset-multi",
+ "buttons": {
+ "normal": "DTTT_button ui-button ui-state-default"
+ },
+ "collection": {
+ "container": "DTTT_collection ui-buttonset ui-buttonset-multi"
+ }
+ } );
+}
+
+
+return DataTable;
+}));
diff --git a/vendor/datatables/js/dataTables.jqueryui.min.js b/vendor/datatables/js/dataTables.jqueryui.min.js
new file mode 100644
index 0000000..782d10f
--- /dev/null
+++ b/vendor/datatables/js/dataTables.jqueryui.min.js
@@ -0,0 +1,9 @@
+/*!
+ DataTables jQuery UI integration
+ ©2011-2014 SpryMedia Ltd - datatables.net/license
+*/
+(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,d){b||(b=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(b,d).$;return a(d,b,b.document)}:a(jQuery,window,document)})(function(a){var b=a.fn.dataTable;a.extend(!0,b.defaults,{dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>',
+renderer:"jqueryui"});a.extend(b.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default sorting_asc",sSortDesc:"ui-state-default sorting_desc",sSortable:"ui-state-default sorting",sSortableAsc:"ui-state-default sorting_asc_disabled",sSortableDesc:"ui-state-default sorting_desc_disabled",
+sSortableNone:"ui-state-default sorting_disabled",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"});b.ext.renderer.header.jqueryui=function(b,h,e,c){var f="css_right ui-icon ui-icon-carat-2-n-s",g=-1!==a.inArray("asc",e.asSorting),i=-1!==a.inArray("desc",e.asSorting);!e.bSortable||!g&&!i?f="":g&&!i?f="css_right ui-icon ui-icon-carat-1-n":!g&&i&&(f="css_right ui-icon ui-icon-carat-1-s");
+a("").addClass("DataTables_sort_wrapper").append(h.contents()).append(a("").addClass(c.sSortIcon+" "+f)).appendTo(h);a(b.nTable).on("order.dt",function(a,g,i,j){b===g&&(a=e.idx,h.removeClass(c.sSortAsc+" "+c.sSortDesc).addClass("asc"==j[a]?c.sSortAsc:"desc"==j[a]?c.sSortDesc:e.sSortingClass),h.find("span."+c.sSortIcon).removeClass("css_right ui-icon ui-icon-triangle-1-n css_right ui-icon ui-icon-triangle-1-s css_right ui-icon ui-icon-carat-2-n-s css_right ui-icon ui-icon-carat-1-n css_right ui-icon ui-icon-carat-1-s").addClass("asc"==
+j[a]?"css_right ui-icon ui-icon-triangle-1-n":"desc"==j[a]?"css_right ui-icon ui-icon-triangle-1-s":f))})};b.TableTools&&a.extend(!0,b.TableTools.classes,{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}});return b});
diff --git a/vendor/datatables/js/dataTables.material.js b/vendor/datatables/js/dataTables.material.js
new file mode 100644
index 0000000..93d62aa
--- /dev/null
+++ b/vendor/datatables/js/dataTables.material.js
@@ -0,0 +1,191 @@
+/*! DataTables Bootstrap 3 integration
+ * ©2011-2015 SpryMedia Ltd - datatables.net/license
+ */
+
+/**
+ * DataTables integration for Bootstrap 3. This requires Bootstrap 3 and
+ * DataTables 1.10 or newer.
+ *
+ * This file sets the defaults and adds options to DataTables to style its
+ * controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
+ * for further information.
+ */
+(function( factory ){
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD
+ define( ['jquery', 'datatables.net'], function ( $ ) {
+ return factory( $, window, document );
+ } );
+ }
+ else if ( typeof exports === 'object' ) {
+ // CommonJS
+ module.exports = function (root, $) {
+ if ( ! root ) {
+ root = window;
+ }
+
+ if ( ! $ || ! $.fn.dataTable ) {
+ // Require DataTables, which attaches to jQuery, including
+ // jQuery if needed and have a $ property so we can access the
+ // jQuery object that is used
+ $ = require('datatables.net')(root, $).$;
+ }
+
+ return factory( $, root, root.document );
+ };
+ }
+ else {
+ // Browser
+ factory( jQuery, window, document );
+ }
+}(function( $, window, document, undefined ) {
+'use strict';
+var DataTable = $.fn.dataTable;
+
+
+/* Set the defaults for DataTables initialisation */
+$.extend( true, DataTable.defaults, {
+ dom:
+ "<'mdl-grid'"+
+ "<'mdl-cell mdl-cell--6-col'l>"+
+ "<'mdl-cell mdl-cell--6-col'f>"+
+ ">"+
+ "<'mdl-grid dt-table'"+
+ "<'mdl-cell mdl-cell--12-col'tr>"+
+ ">"+
+ "<'mdl-grid'"+
+ "<'mdl-cell mdl-cell--4-col'i>"+
+ "<'mdl-cell mdl-cell--8-col'p>"+
+ ">",
+ renderer: 'material'
+} );
+
+
+/* Default class modification */
+$.extend( DataTable.ext.classes, {
+ sWrapper: "dataTables_wrapper form-inline dt-material",
+ sFilterInput: "form-control input-sm",
+ sLengthSelect: "form-control input-sm",
+ sProcessing: "dataTables_processing panel panel-default"
+} );
+
+
+/* Bootstrap paging button renderer */
+DataTable.ext.renderer.pageButton.material = function ( settings, host, idx, buttons, page, pages ) {
+ var api = new DataTable.Api( settings );
+ var classes = settings.oClasses;
+ var lang = settings.oLanguage.oPaginate;
+ var aria = settings.oLanguage.oAria.paginate || {};
+ var btnDisplay, btnClass, counter=0;
+
+ var attach = function( container, buttons ) {
+ var i, ien, node, button, disabled, active;
+ var clickHandler = function ( e ) {
+ e.preventDefault();
+ if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) {
+ api.page( e.data.action ).draw( 'page' );
+ }
+ };
+
+ for ( i=0, ien=buttons.length ; i 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'previous':
+ btnDisplay = lang.sPrevious;
+ btnClass = button + (page > 0 ?
+ '' : ' disabled');
+ break;
+
+ case 'next':
+ btnDisplay = lang.sNext;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ case 'last':
+ btnDisplay = lang.sLast;
+ btnClass = button + (page < pages-1 ?
+ '' : ' disabled');
+ break;
+
+ default:
+ btnDisplay = button + 1;
+ btnClass = '';
+ active = page === button;
+ break;
+ }
+
+ if ( active ) {
+ btnClass += ' mdl-button--raised mdl-button--colored';
+ }
+
+ if ( btnDisplay ) {
+ node = $('