diff --git a/.gitignore b/.gitignore index d56e86250..5c73ae6be 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ nbproject .alerts.lock .ircbot.alert .metadata_never_index +*.swp diff --git a/AUTHORS.md b/AUTHORS.md index 2421c7ce3..587faee6e 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -26,7 +26,6 @@ Contributors to LibreNMS: - Mickael Marchand (mmarchand) - Mohammad Al-Shami (mohshami) - Rudy Hardeman (zarya) -- Arjit Chaudhary (arjit.c@gmail.com) (arjitc) - Freddie Cash (fjwcash@gmail.com) (fjwcash) - Thom Seddon (thomseddon) - Vitali Kari (vitalisator) @@ -48,7 +47,21 @@ Contributors to LibreNMS: - Michael Newton (miken32) - Tom Ferguson (Tawmu) - Jimmy Cleuren (jimmycleuren) - +- Mark Schouten (tuxis-ie) +- Todd Eddy (vrillusions) +- Arjit Chaudhary (arjit.c@gmail.com) (arjitc) +- Sergiusz Paprzycki (spaprzycki) +- Juho Vanhanen (juhovan) +- Bart de Bruijn (bartdebruijn) +- Christophe Martinet (chrisgfx) +- Nils Steinger (n-st) +- Mark Nagel (ciscoqid) +- Sławomir Paszkiewicz (paszczus) +- Frederik Mogensen (mogensen) +- Matthew Scully (mattz0r) +- Xavier Beaudouin (xbeaudouin) +- Falk Stern (fstern) +- Donovan Bridoux (PandaWawawa) +- Sebastian Neuner (9er) [1]: http://observium.org/ "Observium web site" - diff --git a/README.md b/README.md index d4e46e41d..ebea5a646 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ We intend LibreNMS to be a viable project and community that: - offers a welcoming, friendly environment for everyone. The [Debian Social Contract][10] will be the basis of our priority system, -and mutual respect the basis of our behaviour towards others. For more +and mutual respect is the basis of our behaviour towards others. For more about the culture we're trying to build, please read the [Freenode philosophy][13], including [guidelines for running an IRC channel][6] and [being a community catalyst][7]. diff --git a/alerts.php b/alerts.php index fafc909ac..dc8e9949a 100755 --- a/alerts.php +++ b/alerts.php @@ -96,24 +96,14 @@ function IssueAlert($alert) { return true; } - $default_tpl = "%title\r\nSeverity: %severity\r\n{if %state == 0}Time elapsed: %elapsed\r\n{/if}Timestamp: %timestamp\r\nUnique-ID: %uid\r\nRule: {if %name}%name{else}%rule{/if}\r\n{if %faults}Faults:\r\n{foreach %faults} #%key: %value.string\r\n{/foreach}{/if}Alert sent to: {foreach %contacts}%value <%key> {/foreach}"; - // FIXME: Put somewhere else? if ($config['alert']['fixed-contacts'] == false) { $alert['details']['contacts'] = GetContacts($alert['details']['rule']); } $obj = DescribeAlert($alert); if (is_array($obj)) { - $tpl = dbFetchRow('SELECT `template` FROM `alert_templates` JOIN `alert_template_map` ON `alert_template_map`.`alert_templates_id`=`alert_templates`.`id` WHERE `alert_template_map`.`alert_rule_id`=?', array($alert['rule_id'])); - if (isset($tpl['template'])) { - $tpl = $tpl['template']; - } - else { - $tpl = $default_tpl; - } - echo 'Issuing Alert-UID #'.$alert['id'].'/'.$alert['state'].': '; - $msg = FormatAlertTpl($tpl, $obj); + $msg = FormatAlertTpl($obj); $obj['msg'] = $msg; if (!empty($config['alert']['transports'])) { ExtTransports($obj); @@ -193,7 +183,7 @@ function RunFollowUp() { $state = 4; } - if ($state > 0) { + if ($state > 0 && $n > 0) { $alert['details']['rule'] = $chk; if (dbInsert(array('state' => $state, 'device_id' => $alert['device_id'], 'rule_id' => $alert['rule_id'], 'details' => gzcompress(json_encode($alert['details']), 9)), 'alert_log')) { dbUpdate(array('state' => $state, 'open' => 1, 'alerted' => 1), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); @@ -238,7 +228,7 @@ function RunAlerts() { if (!empty($rextra['count']) && empty($rextra['interval'])) { // This check below is for compat-reasons if (!empty($rextra['delay'])) { - if ((time() - strtotime($alert['time_logged']) + $config['alert']['tolerance-window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $config['alert']['tolerance-window']) < $rextra['delay'])) { + if ((time() - strtotime($alert['time_logged']) + $config['alert']['tolerance_window']) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $config['alert']['tolerance_window']) < $rextra['delay'])) { continue; } else { @@ -258,12 +248,12 @@ function RunAlerts() { } else { // This is the new way - if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $config['alert']['tolerance-window']) < $rextra['delay']) { + if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $config['alert']['tolerance_window']) < $rextra['delay']) { continue; } if (!empty($rextra['interval'])) { - if (!empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $config['alert']['tolerance-window']) < $rextra['interval']) { + if (!empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $config['alert']['tolerance_window']) < $rextra['interval']) { continue; } else { @@ -326,7 +316,7 @@ function ExtTransports($obj) { foreach ($config['alert']['transports'] as $transport => $opts) { if (($opts === true || !empty($opts)) && $opts != false && file_exists($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php')) { echo $transport.' => '; - eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' };'); + eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' return false; };'); $tmp = $tmp($obj,$opts); $prefix = array( 0=>"recovery", 1=>$obj['severity']." alert", 2=>"acknowledgment" ); $prefix[3] = &$prefix[0]; @@ -349,11 +339,11 @@ function ExtTransports($obj) { /** * Format Alert - * @param string $tpl Template * @param array $obj Alert-Array * @return string */ -function FormatAlertTpl($tpl, $obj) { +function FormatAlertTpl($obj) { + $tpl = $obj["template"]; $msg = '$ret .= "'.str_replace(array('{else}', '{/if}', '{/foreach}'), array('"; } else { $ret .= "', '"; } $ret .= "', '"; } $ret .= "'), addslashes($tpl)).'";'; $parsed = $msg; $s = strlen($msg); @@ -426,11 +416,23 @@ function DescribeAlert($alert) { $obj = array(); $i = 0; $device = dbFetchRow('SELECT hostname FROM devices WHERE device_id = ?', array($alert['device_id'])); + $tpl = dbFetchRow('SELECT `template`,`title`,`title_rec` FROM `alert_templates` JOIN `alert_template_map` ON `alert_template_map`.`alert_templates_id`=`alert_templates`.`id` WHERE `alert_template_map`.`alert_rule_id`=?', array($alert['rule_id'])); + $default_tpl = "%title\r\nSeverity: %severity\r\n{if %state == 0}Time elapsed: %elapsed\r\n{/if}Timestamp: %timestamp\r\nUnique-ID: %uid\r\nRule: {if %name}%name{else}%rule{/if}\r\n{if %faults}Faults:\r\n{foreach %faults} #%key: %value.string\r\n{/foreach}{/if}Alert sent to: {foreach %contacts}%value <%key> {/foreach}"; $obj['hostname'] = $device['hostname']; $obj['device_id'] = $alert['device_id']; $extra = $alert['details']; + if (!isset($tpl['template'])) { + $obj['template'] = $default_tpl; + } else { + $obj['template'] = $tpl['template']; + } if ($alert['state'] >= 1) { - $obj['title'] = 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']); + if (!empty($tpl['title'])) { + $obj['title'] = $tpl['title']; + } + else { + $obj['title'] = 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']); + } if ($alert['state'] == 2) { $obj['title'] .= ' got acknowledged'; } @@ -458,7 +460,12 @@ function DescribeAlert($alert) { } $extra = json_decode(gzuncompress($id['details']), true); - $obj['title'] = 'Device '.$device['hostname'].' recovered from '.($alert['name'] ? $alert['name'] : $alert['rule']); + if (!empty($tpl['title_rec'])) { + $obj['title'] = $tpl['title_rec']; + } + else { + $obj['title'] = 'Device '.$device['hostname'].' recovered from '.($alert['name'] ? $alert['name'] : $alert['rule']); + } $obj['elapsed'] = TimeFormat(strtotime($alert['time_logged']) - strtotime($id['time_logged'])); $obj['id'] = $id['id']; $obj['faults'] = false; @@ -473,6 +480,9 @@ function DescribeAlert($alert) { $obj['timestamp'] = $alert['time_logged']; $obj['contacts'] = $extra['contacts']; $obj['state'] = $alert['state']; + if (strstr($obj['title'],'%')) { + $obj['title'] = RunJail('$ret = "'.populate(addslashes($obj['title'])).'";', $obj); + } return $obj; }//end DescribeAlert() diff --git a/build-base.php b/build-base.php index 4e0609ff0..c6135a12c 100644 --- a/build-base.php +++ b/build-base.php @@ -14,7 +14,7 @@ if ($sql_fh === false) { exit(1); } -$database_link = mysqli_connect($config['db_host'], $config['db_user'], $config['db_pass']); +$database_link = mysqli_connect('p:'.$config['db_host'], $config['db_user'], $config['db_pass']); if ($database_link === false) { echo 'ERROR: Cannot connect to database: '.mysqli_error($database_link)."\n"; exit(1); @@ -26,8 +26,23 @@ if ($select === false) { exit(1); } +$limit = 0; while (!feof($sql_fh)) { $line = fgetss($sql_fh); + if (isset($_SESSION['stage']) ) { + $limit++; + if (isset($_SESSION['offset']) && $limit < $_REQUEST['offset']) { + continue; + } + elseif ( time()-$_SESSION['last'] > 45 ) { + $_SESSION['offset'] = $limit; + $GLOBALS['refresh'] = 'Installing, please wait..'.date('r').''; + return; + } else { + echo 'Step #'.$limit.' ...'.PHP_EOL; + } + } + if (!empty($line)) { $creation = mysqli_query($database_link, $line); if (!$creation) { diff --git a/config.php.default b/config.php.default index 1ed5d8c7e..f6b031cd7 100755 --- a/config.php.default +++ b/config.php.default @@ -3,17 +3,21 @@ ## Have a look in includes/defaults.inc.php for examples of settings you can set here. DO NOT EDIT defaults.inc.php! ### Database config -$config['db_host'] = "localhost"; -$config['db_user'] = "USERNAME"; -$config['db_pass'] = "PASSWORD"; -$config['db_name'] = "librenms"; +$config['db_host'] = 'localhost'; +$config['db_user'] = 'USERNAME'; +$config['db_pass'] = 'PASSWORD'; +$config['db_name'] = 'librenms'; $config['db']['extension'] = 'mysqli';// mysql or mysqli ### Memcached config - We use this to store realtime usage $config['memcached']['enable'] = FALSE; -$config['memcached']['host'] = "localhost"; +$config['memcached']['host'] = 'localhost'; $config['memcached']['port'] = 11211; +// This is the user LibreNMS will run as +//Please ensure this user is created and has the correct permissions to your install +$config['user'] = 'librenms'; + ### Locations - it is recommended to keep the default #$config['install_dir'] = "/opt/librenms"; diff --git a/discovery.php b/discovery.php index 336f91ad0..5b65b0556 100755 --- a/discovery.php +++ b/discovery.php @@ -22,12 +22,12 @@ require 'includes/discovery/functions.inc.php'; $start = utime(); $runtime_stats = array(); - -// Observium Device Discovery -$options = getopt('h:m:i:n:d::a::q'); +$sqlparams = array(); +$options = getopt('h:m:i:n:d::a::q',array('os:','type:')); if (!isset($options['q'])) { - echo $config['project_name_version']." Discovery\n\n"; + echo $config['project_name_version']." Discovery\n"; + echo get_last_commit()."\n"; } if (isset($options['h'])) { @@ -59,8 +59,18 @@ if (isset($options['h'])) { }//end if }//end if +if (isset($options['os'])) { + $where .= " AND os = ?"; + $sqlparams[] = $options['os']; +} + +if (isset($options['type'])) { + $where .= " AND type = ?"; + $sqlparams[] = $options['type']; +} + if (isset($options['i']) && $options['i'] && isset($options['n'])) { - $where = 'AND MOD(device_id,'.$options['i'].") = '".$options['n']."'"; + $where .= ' AND MOD(device_id,'.$options['i'].") = '".$options['n']."'"; $doing = $options['n'].'/'.$options['i']; } @@ -85,9 +95,11 @@ if (!$where) { echo "-h odd Poll odd numbered devices (same as -i 2 -n 0)\n"; echo "-h even Poll even numbered devices (same as -i 2 -n 1)\n"; echo "-h all Poll all devices\n"; - echo "-h new Poll all devices that have not had a discovery run before\n\n"; + echo "-h new Poll all devices that have not had a discovery run before\n"; + echo "--os Poll devices only with specified operating system\n"; + echo "--type Poll devices only with specified type\n"; echo "-i -n Poll as instance of \n"; - echo " Instances start at 0. 0-3 for -n 4\n\n"; + echo " Instances start at 0. 0-3 for -n 4\n"; echo "\n"; echo "Debugging and testing options:\n"; echo "-d Enable debugging output\n"; @@ -105,7 +117,7 @@ if ($config['distributed_poller'] === true) { $where .= ' AND poller_group IN('.$config['distributed_poller_group'].')'; } -foreach (dbFetch("SELECT * FROM `devices` WHERE status = 1 AND disabled = 0 $where ORDER BY device_id DESC") as $device) { +foreach (dbFetch("SELECT * FROM `devices` WHERE status = 1 AND disabled = 0 $where ORDER BY device_id DESC",$sqlparams) as $device) { discover_device($device, $options); } @@ -118,13 +130,7 @@ if ($discovered_devices) { } $string = $argv[0]." $doing ".date($config['dateformat']['compact'])." - $discovered_devices devices discovered in $proctime secs"; -if ($debug) { - echo "$string\n"; -} - -if ($options['h'] != 'new' && $config['version_check']) { - include 'includes/versioncheck.inc.php'; -} +d_echo("$string\n"); if (!isset($options['q'])) { echo ('MySQL: Cell['.($db_stats['fetchcell'] + 0).'/'.round(($db_stats['fetchcell_sec'] + 0), 2).'s]'.' Row['.($db_stats['fetchrow'] + 0).'/'.round(($db_stats['fetchrow_sec'] + 0), 2).'s]'.' Rows['.($db_stats['fetchrows'] + 0).'/'.round(($db_stats['fetchrows_sec'] + 0), 2).'s]'.' Column['.($db_stats['fetchcol'] + 0).'/'.round(($db_stats['fetchcol_sec'] + 0), 2).'s]'.' Update['.($db_stats['update'] + 0).'/'.round(($db_stats['update_sec'] + 0), 2).'s]'.' Insert['.($db_stats['insert'] + 0).'/'.round(($db_stats['insert_sec'] + 0), 2).'s]'.' Delete['.($db_stats['delete'] + 0).'/'.round(($db_stats['delete_sec'] + 0), 2).'s]'); diff --git a/doc/API/API-Docs.md b/doc/API/API-Docs.md index 3a7db5085..17b34e753 100644 --- a/doc/API/API-Docs.md +++ b/doc/API/API-Docs.md @@ -25,6 +25,7 @@ - [`alerts`](#api-alerts) - [`get_alert`](#api-route-12) - [`ack_alert`](#api-route-13) + - [`unmute_alert`](#api-route-24) - [`list_alerts`](#api-route-14) - [`rules`](#api-rules) - [`get_alert_rule`](#api-route-15) @@ -333,8 +334,16 @@ Route: /api/v0/devices Input: - order: How to order the output, default is by hostname. Can be prepended by DESC or ASC to change the order. - - type: can be one of the following, all, ignored, up, down, disabled to filter by that device status. - + - type: can be one of the following to filter or search by: + - all: All devices + - ignored: Only ignored devices + - up: Only devices that are up + - down: Only devices that are down + - disabled: Disabled devices + - mac: search by mac address + - ipv4: search by IPv4 address + - ipv6: search by IPv6 address (compressed or uncompressed) + - query: If searching by, then this will be used as the input. Example: ```curl curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/devices?order=hostname%20DESC&type=down @@ -345,6 +354,30 @@ Output: ```text { "status": "ok", + "count": 1, + "devices": [ + { + "device_id": "1", + "hostname": "localhost", + ... + "serial": null, + "icon": null + } + ] +} +``` + +Example: +```curl +curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/devices?type=mac&query=00000c9ff013 +``` + +Output: + +```text +{ + "status": "ok", + "count": 1, "devices": [ { "device_id": "1", @@ -559,6 +592,33 @@ Output: } ``` +### Function: `unmute_alert` [`top`](#top) + +Unmute an alert + +Route: /api/v0/alerts/unmute/:id + +- id is the alert id, you can obtain a list of alert ids from [`list_alerts`](#api-route-14). + +Input: + + - + +Example: +```curl +curl -X PUT -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/alerts/unmute/1 +``` + +Output: +```text +{ + "status": "ok", + "err-msg": "", + "message": "Alert has been unmuted" +} +``` + + ### Function: `list_alerts` [`top`](#top) List all alerts @@ -571,7 +631,7 @@ Input: Example: ```curl -curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/alerts +curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/alerts?state=1 ``` Output: diff --git a/doc/Developing/Dynamic-Config.md b/doc/Developing/Dynamic-Config.md new file mode 100644 index 000000000..73e808f5c --- /dev/null +++ b/doc/Developing/Dynamic-Config.md @@ -0,0 +1,50 @@ +# Adding new config options to WebUI + +Adding support for users to update a new config option via the WebUI is now a lot easier for general options. This +document shows you how to add a new config option and even section to the WebUI. + +#### Update DB + +Firstly you will need to add the config option to the database. Here's an example: + +```sql +insert into config (config_name,config_value,config_default,config_descr,config_group,config_group_order,config_sub_group,config_sub_group_order,config_hidden,config_disabled) values ('alert.tolerance_window','','','Tolerance window in seconds','alerting',0,'general',0,'0','0'); +``` + +This will determine the default config option for `$config['alert']['tolerance_window']`. + +#### Update WebUI + +If the sub-section you want to add the new config option already exists then update the relevant file within +`html/pages/settings/` otherwise you will need to create the new sub-section page. Here's an example of this: + +[Commit example](https://github.com/librenm/librenms/commit/c5998f9ee27acdac0c0f7d3092fc830c51ff684c) + +```php + 'alert.tolerance_window', + 'descr' => 'Tolerance window for cron', + 'type' => 'text', + ), +); + +echo ' +
+
+'; + +echo generate_dynamic_config_panel('Email transport',true,$config_groups,$mail_conf,'mail'); + +echo ' +
+
+'; +``` + +And that should be it! diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index aec8ee6e5..fe4e51dab 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -17,6 +17,7 @@ Table of Content: - [PagerDuty](#transports-pagerduty) - [Pushover](#transports-pushover) - [Boxcar](#transports-boxcar) + - [Pushbullet](#transports-pushbullet) - [Entities](#entities) - [Devices](#entity-devices) - [BGP Peers](#entity-bgppeers) @@ -65,7 +66,7 @@ __Conditions__ can be any of: __Values__ can be Entities or any single-quoted data. __Glues__ can be either `&&` for `AND` or `||` for `OR`. -__Note__: The difference between `Equals` and `Matches` (and it's negation) is that `Equals` does a strict comparison and `Matches` allows the usage of the placeholder `@`. The placeholder `@` is comparable with `.*` in RegExp. +__Note__: The difference between `Equals` and `Matches` (and its negation) is that `Equals` does a strict comparison and `Matches` allows the usage of RegExp. Arithmetics are allowed as well. ## Examples @@ -144,7 +145,7 @@ To include users that have `Global-Read` or `Administrator` permissions it is re ~ ```php $config['alert']['globals'] = true; //Include Global-Read into alert-contacts -$config['alert']['admins'] = true; //Include Adminstrators into alert-contacts +$config['alert']['admins'] = true; //Include Administrators into alert-contacts ``` ~~ @@ -360,9 +361,20 @@ $config['alert']['transports']['boxcar'][] = array( ``` ~~ +## Pushbullet + +Enabling Pushbullet is a piece of cake. +Get your Access Token from your Pushbullet's settings page and set it in your config like: + +~~ +```php +$config['alert']['transports']['pushbullet'] = 'MYFANCYACCESSTOKEN'; +``` +~~ + # Entities -Entities as described earlier are based on the table and column names within the database, if you are ensure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `. +Entities as described earlier are based on the table and column names within the database, if you are unsure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `. ## Devices diff --git a/doc/Extensions/Device-Groups.md b/doc/Extensions/Device-Groups.md new file mode 100644 index 000000000..c38db06a8 --- /dev/null +++ b/doc/Extensions/Device-Groups.md @@ -0,0 +1,30 @@ +# Device Groups + +LibreNMS supports grouping your devices together in much the same way as you can configure alerts. This document will hopefully help you get started. + +### Pattern + +Patterns work in the same was as Entities within the alerting system, the format of the pattern is based on the MySQL structure your data is in such +as __tablename.columnname__. If you are ensure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `. + +As a working example and a common question, let's assume you want to group devices by hostname. If you hostname format is dcX.[devicetype].example.com. You would use the pattern +devices.hostname. Select the condition which in this case would Like and then enter `dc1\..*\.example.com`. This would then match dc1.sw01.example.com, dc1.rtr01.example.com but not + dc2.sw01.example.com. + +#### Wildcards + +As with alerts, the `Like` operation allows RegExp. + +A list of common entities is maintained in our [Alerting docs](http://docs.librenms.org/Extensions/Alerting/#entities). + +### Conditions + +Please see our [Alerting docs](http://docs.librenms.org/Extensions/Alerting/#syntax) for explanations. + +### Connection + +If you only want to group based on one pattern then select And. If however you want to build a group based on multiple patterns then you can build a SQL like +query using And / Or. As an example, we want to base our group on the devices hostname AND it's type. Use the pattern as before, devices.hostname, select the condition which in this case would Like and then enter dc1.@.example.com then click And. Now enter devices.type in the pattern, select Equals and enter firewall. This would then match dc1.fw01.example.com but not dc1.sw01.example.com as that is a network type. + +You can now select this group from the Devices -> All Devices link in the navigation at the top. You can also use the group to map alert rules to by creating an alert mapping +Overview -> Alerts -> Rule Mapping. diff --git a/doc/Extensions/Distributed-Poller.md b/doc/Extensions/Distributed-Poller.md index 86163b644..2d9ebedf7 100644 --- a/doc/Extensions/Distributed-Poller.md +++ b/doc/Extensions/Distributed-Poller.md @@ -5,7 +5,11 @@ These machines can be in a different physical location and therefore minimize ne Devices can also be groupped together into a `poller_group` to pin these devices to a single or a group of designated pollers. -All pollers need to share their RRD-folder, for example via NFS or a combination of NFS and rrdcached. +~~All pollers need to share their RRD-folder, for example via NFS or a combination of NFS and rrdcached.~~ + +> This is no longer a strict requirement with the use of rrdtool 1.5 and above. If you are NOT running 1.5 then you will still +need to share the RRD-folder. + It is also required that all pollers can access the central memcached to communicate with eachother. In order to enable distributed polling, set `$config['distributed_poller'] = true` and your memcached details into `$config['distributed_poller_memcached_host']` and `$config['distributed_poller_memcached_port']`. @@ -27,7 +31,7 @@ $config['distributed_poller_memcached_port'] = '11211'; Below is an example setup based on a real deployment which at the time of writing covers over 2,500 devices and 50,000 ports. The setup is running within an Openstack environment with some commodity ha rdware for remote pollers. Here's a diagram of how you can scale LibreNMS out: -![Example Setup](http://www.librenms.org/img/librenms-distributed-diagram.png) +![Example Setup](http://docs.librenms.org/img/librenms-distributed-diagram.png) ###Architecture How you setup the distribution is entirely up to you, you can choose to host the majority of the required services on a single virtual machine or server and then a poller to actually query the devices being monitored all the way through to having a dedicated server for each of the individual roles. Below are notes on what you need to consider both from the software layer but also connectivity. @@ -49,7 +53,14 @@ The pollers, web and API layers should all be able to access the database server ####RRD Storage Central storage should be provided so all RRD files can be read from and written to in one location. As suggested above, it's recommended that RRD Cached is configured and used. -For this example, we are running RRDCached to allow all pollers and web/api servers to read/write to the rrd iles with the rrd directory also exported by NFS for simple access and maintenance. +For this example, we are running RRDCached to allow all pollers and web/api servers to read/write to the rrd iles ~~with the rrd directory also exported by NFS for simple access and maintenance.~~ + +Sharing rrd files via something like NFS is no longer required if you run rrdtool 1.5 or greater. If you don't - please share your rrd folder as before. If you run rrdtool +1.5 or greater then add this config to your pollers: + +```php +$config['rrdtool_version'] = 1.5; +``` ####Memcache Memcache is required for the distributed pollers to be able to register to a central location and record what devices are polled. Memcache can run from any of the kit so long as it is accessable by all pollers. @@ -88,4 +99,10 @@ $config['rrd_dir'] = "/opt/librenms/rrd"; $config['rrdcached_dir'] = ""; ``` +For rrdtool 1.5 or greater then you can enable support for rrdcached to create the rrd files: + +```php +$config['rrdtool_version'] = 1.5; +``` + $config['rrdcached_dir'] Is only needed if you are using tcp connections for rrd cached and needs only to be set if you want to store rrd files within a sub directory of your rrdcached base directory. diff --git a/doc/Extensions/Email-Alerting.md b/doc/Extensions/Email-Alerting.md index 67b51a6ba..55a2f0a5f 100644 --- a/doc/Extensions/Email-Alerting.md +++ b/doc/Extensions/Email-Alerting.md @@ -2,7 +2,10 @@ #### Please see [The new alerting docs](http://docs.librenms.org/Extensions/Alerting/#transports-email) -Currently, the email alerts needs to be set up in the config. If you want to enable it, paste this in your config and change it: +> None of these configuration options will work on builds older than the 1st of August 2015. + + +~~Currently, the email alerts needs to be set up in the config. If you want to enable it, paste this in your config and change it:~~ ```php // Mailer backend Settings diff --git a/doc/Extensions/IRC-Bot.md b/doc/Extensions/IRC-Bot.md index c06353f67..fcb51e583 100644 --- a/doc/Extensions/IRC-Bot.md +++ b/doc/Extensions/IRC-Bot.md @@ -23,8 +23,9 @@ Option | Default-Value | Notes --- | --- | --- `$config['irc_alert']` | `false` | Optional; Enables Alerting-Socket. `EXPERIMENTAL` `$config['irc_alert_chan']` | `false` | Optional; Multiple channels can be defined as Array or delimited with `,`. `EXPERIMENTAL` +`$config['irc_alert_utf8']` | `false` | Optional; Enables use of strikethrough in alerts via UTF-8 encoded characters. Might cause trouble for some clients. `$config['irc_authtime']` | `3` | Optional; Defines how long in Hours an auth-session is valid. -`$config['irc_chan']` | `##librenms` | Optional; Multiple channels can be defined as Array or delimited with `,` +`$config['irc_chan']` | `##librenms` | Optional; Multiple channels can be defined as Array or delimited with `,`. Passwords are defined after a `space-character`. `$config['irc_debug']` | `false` | Optional; Enables debug output (Wall of text) `$config['irc_external']` | | Optional; Array or `,` delimited string with commands to include from `includes/ircbot/*.inc.php` `$config['irc_host']` | | Required; Domain or IP to connect. If it's an IPv6 Address, embed it in `[]`. (Example: `[::1]`) diff --git a/doc/Extensions/Memcached.md b/doc/Extensions/Memcached.md new file mode 100644 index 000000000..ae55ff342 --- /dev/null +++ b/doc/Extensions/Memcached.md @@ -0,0 +1,16 @@ +# Memcached + +LibreNMS can store SQL results in memcached to achieve performance advantages of in-memory value storage and removing work load for frequent queries off the MySQL backend. + +To enable memcached in your install you need to have `memcached` installed and the PHP extension `php5-memcached` or `php-memcached` and add the following lines to your `config.php`: + +```php +$config['memcached']['enable'] = true; +$config['memcached']['host'] = "localhost"; +$config['memcached']['port'] = 11211; +``` + +By default values are kept for 4 Minutes inside the memcached, you can adjust this retention time by modifying the `$config['memcached']['ttl']` value to any desired amount of seconds. +It's strongly discouraged to set this above `300` (5 Minutes) to avoid interferences with the polling, discovery and alerting processes. + +If you use the Distributed Poller, you can point this to the same memcached instance. However a local memcached will perform better in any case. diff --git a/doc/Extensions/Oxidized.md b/doc/Extensions/Oxidized.md new file mode 100644 index 000000000..19ba60f15 --- /dev/null +++ b/doc/Extensions/Oxidized.md @@ -0,0 +1,42 @@ +# Oxidized integration + +You can integrate LibreNMS with [Oxidized](https://github.com/ytti/oxidized-web) in two ways: + +### Config viewing + +This is a straight forward use of Oxidized, it relies on you having a working Oxidized setup which is already taking config snapshots for your devices. +When you have that, you only need the following config to enable the display of device configs within the device page itself: + +```php +$config['oxidized']['enabled'] = TRUE; +$config['oxidized']['url'] = 'http://127.0.0.1:8888'; +``` + +We also support config versioning within Oxidized, this will allow you to see the old configs stored. + +```php +$config['oxidized']['features']['versioning'] = true; +``` + +### Feeding Oxidized + +Oxidized has support for feeding devices into it via an API call, support for Oxidized has been added to the LibreNMS API. A sample config for Oxidized is provided below. + +You will need to configure default credentials for your devices, LibreNMS doesn't provide login credentials at this time. + +```bash + source: + default: http + debug: false + http: + url: https://librenms/api/v0/oxidized + scheme: https + delimiter: !ruby/regexp /:/ + map: + name: hostname + model: os + headers: + X-Auth-Token: '01582bf94c03104ecb7953dsadsadwed' +``` + +If you have devices which you do not wish to appear in Oxidized then you can edit those devices in Device -> Edit -> Misc and enable "Exclude from Oxidized?" diff --git a/doc/Extensions/Poller-Service.md b/doc/Extensions/Poller-Service.md new file mode 100644 index 000000000..5e484ae27 --- /dev/null +++ b/doc/Extensions/Poller-Service.md @@ -0,0 +1,37 @@ +# Poller Service + +# WARNING: THIS IS HIGHLY EXPERIMENTAL AND MAY NOT WORK + +The Poller service is an alternative to polling and discovery cron jobs and provides support for distributed polling without memcache. It is multi-threaded and runs continuously discovering and polling devices with the oldest data attempting to honor the polling frequency configured in `config.php`. This service replaces all the required cron jobs except for `/opt/librenms/daily.sh` and `/opt/librenms/alerts.php`. + +Configure the maximum number of threads for the service in `$config['poller_service_workers']`. Configure the minimum desired polling frequency in `$config['poller_service_poll_frequency']` and the minimum desired discovery frequency in `$config['poller_service_discover_frequency']`. The service will not poll or discover devices which have data newer than this this configured age in seconds. Configure how frequently the service will attempt to poll devices which are down in `$config['poller_service_down_retry']`. If you have enough pollers that the worker threads run out of work, the service will query looking for devices every `$config['poller_service_retry_query']` seconds. + +The poller service is designed to gracefully degrade. If not all devices can be polled within the configured frequency, the service will continuously poll devices refreshing as frequently as possible using the configured number of threads. + +The service logs to syslog. A loglevel of INFO will print status updates every 5 minutes. Loglevel of DEBUG will print updates on every device as it is scanned. + +## Configuration +```php +// Poller-Service settings +$config['poller_service_loglevel'] = "INFO"; +$config['poller_service_workers'] = 16; +$config['poller_service_poll_frequency'] = 300; +$config['poller_service_discover_frequency'] = 21600; +$config['poller_service_down_retry'] = 60; +$config['poller_service_retry_query'] = 1; +$config['poller_service_single_connection'] = false; +``` + +## Distributed Polling +Distributed polling is possible, and uses the same configuration options as are described for traditional distributed polling, except that the memcached options are not necessary. The database must be acessable from the distributed pollers, and properly configured. Remote access to the RRD directory must also be configured as described in the Distributed Poller documentation. Memcache is not required. Concurrency is managed using mysql GET_LOCK to ensure that devices are only being polled by one device at at time. The poller service is compatible with poller groups. + +## Multi-Master MySQL considerations +Because locks are not replicated in Multi-Master MySQL configurations, if you are using such a configuration, you will need to make sure that all pollers are using the same MySQL server. + +## Single Connection +If you are running MariaDB 10.2 or newer, you can tell poller-service to use a single mysql connectino for managing locks by setting `$config['poller_service_single_connection']` to `true`. *DO NOT* configure this for any version of MariaDB less than 10.2 or any version of MySQL. + +## Service Installation +An upstart configuration `poller-service.conf` is provided. To install run `ln -s /opt/librenms/poller-service.conf /etc/init/poller-service.conf`. The service will start on boot and can be started manually by running `start poller-service`. If you recieve an error that the service does not exist, run `initctl reload-configuration`. The service is configured to run as the user `librenms` and will fail if that user does not exist. + +An LSB init script `poller-service.init` is also provided. To install run `ln -s /opt/librenms/poller-service.init /etc/init.d/poller-service && update-rc.d poller-service defaults`. diff --git a/doc/Extensions/Port-Description-Parser.md b/doc/Extensions/Port-Description-Parser.md new file mode 100644 index 000000000..4877965ab --- /dev/null +++ b/doc/Extensions/Port-Description-Parser.md @@ -0,0 +1,86 @@ +# Configuring interface descriptions for parsing. + +LibreNMS includes the ability to parse your interface descriptions for set information to diplay and segement in the WebUI. + +The following information is used from interface descriptions: + + - Type. This is currently Cust (Customer), Peering, Transit and Core + - Circuit information + - Notes + - Speed + +When setting the description, you use the type followed directly with : and then the information on that port. Some examples based on +configuring a Cisco 2960 interface + +#### Customer port +description Cust: Customer A + +#### Transport port +description Transit: ISP A + +#### Peering port +description Peering: Local Peer + +#### Core port +description Core: Agg connection + +Having these set will then enable the menu options in Ports within the top navigation. + +The following config options can be set to enable more custom types: + +```php +$config['customers_descr'] = 'cust'; // The description to look for in ifDescr. Can be an array as well array('cust','cid'); +$config['transit_descr'] = ""; // Add custom transit descriptions (can be an array) +$config['peering_descr'] = ""; // Add custom peering descriptions (can be an array) +$config['core_descr'] = ""; // Add custom core descriptions (can be an array) +$config['custom_descr'] = ""; // Add custom interface descriptions (can be an array) +``` + +To further enhance the use of port descriptions with Circuit info, Notes and Speed then these can be done as follows: + +#### Circuit information + +{} + +i.e: +description: Cust: Customer A {ID4321} + +#### Notes + +() + +i.e: +description Cust: Customer A (This customer is gold) + +#### Speed + +[] + +i.e: +description Cust: Customer A [100Mbs] + +You can use any of these additional options like: + +description Cust: Customer A (this customer is gold) [10Gbps] +description Cust: Customer A {ID4321} [1Gbps] + +This information is then held within the ports table within the database, as an example: + +description Core: Nas bond [1Gbps] +```sh +port_descr_type: core +port_descr_descr: Nas bond +port_descr_circuit: NULL +port_descr_speed: 1Gbps +port_descr_notes: NULL +``` + +### Custom interface parser + +It's also possible to write your own parser, the existing one is: includes/port-descr-parser.inc.php + +Once you've created your own then you can enable it with: + +```php +$config['port_descr_parser'] = "includes/my-port-descr-parser.inc.php"; +``` diff --git a/doc/Extensions/Proxmox.md b/doc/Extensions/Proxmox.md new file mode 100644 index 000000000..0691e1d27 --- /dev/null +++ b/doc/Extensions/Proxmox.md @@ -0,0 +1,23 @@ +# Proxmox graphing + +It is possible to create graphs of the Proxmox VMs that run on your monitored machines. Currently, only trafficgraphs are created. One for each interface on each VM. Possibly, IO grahps will be added later on. + +The ultimate goal is to be able to create traffic bills for VMs, no matter on which physical machine that VM runs. + +### Enabling Proxmox graphs + +To enable Proxmox graphs, do the following: + +In config.php, enable Proxmox: +```php +$config['enable_proxmox'] = 1 +``` + +Then, install librenms-agent on the machines running Proxmox, and enable the Proxmox-plugin using: +```bash +mk_enplug proxmox +``` + +Then, enable the unix-agent on the machines running Proxmox. + +You should now see an application in LibreNMS, as well as a new menu-item in the topmenu, allowing you to choose which cluster you want to look at. diff --git a/doc/Extensions/RRDCached.md b/doc/Extensions/RRDCached.md index 27a157c5d..b1afff24b 100644 --- a/doc/Extensions/RRDCached.md +++ b/doc/Extensions/RRDCached.md @@ -2,8 +2,15 @@ This document will explain how to setup RRDCached for LibreNMS. -### RRDCached installation -This example is based on a fresh LibreNMS install, on a minimimal CentOS installation. +> If you are using rrdtool / rrdcached version 1.5 or above then this now supports creating rrd files over rrdcached. To +enable this set the following config: + +```php +$config['rrdtool_version'] = 1.5; +``` + +### RRDCached installation CentOS 6 +This example is based on a fresh LibreNMS install, on a minimimal CentOS 6 installation. In this example, we'll use the Repoforge repository. ```ssh @@ -33,7 +40,73 @@ chkconfig rrdcached on service rrdcached start ``` -Edit config.php to include: +- Edit /opt/librenms/config.php to include: +```php +$config['rrdcached'] = "unix:/var/run/rrdcached/rrdcached.sock"; +``` +### RRDCached installation CentOS 7 +This example is based on a fresh LibreNMS install, on a minimimal CentOS 7.x installation. +We'll use the epel-release and setup a RRDCached as a service. +It is recommended that you monitor your LibreNMS server with LibreNMS so you can view the disk I/O usage delta. +See [Installation (RHEL CentOS)][1] for localhost monitoring. + +- Install the EPEL and update the repos and RRDtool. +```ssh +yum install epel-release +yum update +yum update rrdtool +``` + +- Create the needed directories, set ownership and permissions. +```ssh +mkdir /var/run/rrdcached +chown librenms:librenms /var/run/rrdcached +chmod 755 /var/run/rrdcached +``` + +- Create an rrdcached service for easy daemon management. +```ssh +touch /etc/systemd/system/rrdcached.service +``` +- Edit rrdcached.service and paste the example config: +```ssh +[Unit] +Description=RRDtool Cache +After=network.service + +[Service] +Type=forking +PIDFile=/run/rrdcached.pid +ExecStart=/usr/bin/rrdcached -w 1800 -z 1800 -f 3600 -s librenms -j /var/tmp -l unix:/var/run/rrdcached/rrdcached.sock -t 4 -F -b /opt/librenms/rrd/ +RRDC_USER=librenms + +[Install] +WantedBy=default.target +``` + +- Restart the systemctl daemon so it can recognize the newly created rrdcached.service. Enable the rrdcached.service on boot, and start the service. +```ssh +systemctl daemon-reload +systemctl enable rrdcached.service +systemctl start rrdcached.service +``` + +- Edit /opt/librenms/config.php to include: ```ssh $config['rrdcached'] = "unix:/var/run/rrdcached/rrdcached.sock"; ``` + +- Restart Apache +```ssh +systemctl restart httpd +``` + +Check to see if the graphs are being drawn in LibreNMS. This might take a few minutes. +After at least one poll cycle (5 mins), check the LibreNMS disk I/O performance delta. +Disk I/O can be found under the menu Devices>All Devices>[localhost hostname]>Health>Disk I/O. + +Depending on many factors, you should see the Ops/sec drop by ~30-40%. + + +[1]: http://librenms.readthedocs.org/Installation/Installation-(RHEL-CentOS)/#add-localhost +"Add localhost to LibreNMS" diff --git a/doc/Extensions/Two-Factor-Auth.md b/doc/Extensions/Two-Factor-Auth.md index de6ee6d83..d2c74a197 100644 --- a/doc/Extensions/Two-Factor-Auth.md +++ b/doc/Extensions/Two-Factor-Auth.md @@ -62,8 +62,6 @@ Create a Two-Factor key: ## Google Authenticator -__Note__: Google Authenticator only allows counterbased OTP when scanned via QR codes. - Installation guides for Google Authneticator can be found [here](https://support.google.com/accounts/answer/1066447?hl=en). Usage: diff --git a/doc/Extensions/Varnish.md b/doc/Extensions/Varnish.md new file mode 100644 index 000000000..98fda2adf --- /dev/null +++ b/doc/Extensions/Varnish.md @@ -0,0 +1,249 @@ +# Varnish Installation Guide # + +This document explains how to install Varnish Reverse Proxy for LibreNMS. + + +Varnish is caching software that sits logically between an HTTP client and an HTTP server. Varnish caches HTTP responses from the HTTP server. If an HTTP request can not be responded to by the Varnish cache it directs the request to the HTTP Server. This type of HTTP caching is called a reverse proxy server. Caching your HTTP server can decrease page load times significantly. +

+#####
Simplified block diagram of an Apache HTTP server with Varnish 4.0 Reverse Proxy.
##### + +![Block Diagram 1](http://docs.librenms.org/img/varnish_block.png) + +### CentOS 7 Varnish Installation ### + +In this example we will assume your Apache 2.4.X HTTP server is working and +configured to process HTTP requests on port 80. If not, please see +[Using HTTPd Apache2](http://librenms.readthedocs.org/Installation/Installation-(RHEL-CentOS)/#using-httpd-apache2) + + +#### Install Varnish 4.0 RPM #### + +- Enable the Varnish CentOS 7 repo and install + +```bash +rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el7.rpm +yum install varnish +``` + +By default Varnish listens for HTTP requests on port 6081. + +- Temporarily add a firewalld rule for testing Varnish. + +```bash +firewall-cmd --zone=public --add-port=6081/tcp +``` + +#### Test Varnish #### + +- Start Varnish + +```bash +systemctl start varnish +``` + +Using a web browser navigate to :6081 or 127.0.0.1:6081. You should see a Varnish error message, this shows that Varnish is working. Example error message: + +```ssh +Error 503 Backend fetch failed + +Backend fetch failed + +Guru Meditation: + +XID: 3 + +Varnish cache server + +``` + +#### Edit Varnish Parameters #### + +Now we need to configure Varnish to listen to HTTP requests on port 80 and +relay those requests to the Apache HTTP server on port 8080 (see block diagram). + +- Stop Varnish. +```bash +systemctl stop varnish +``` +- Create a back-up of varnish.params just in case you make a mistake. +```bash +cp /etc/varnish/varnish.params /etc/varnish/varnish.params.bak +``` + +- Edit the varnish.params config. +```bash +vim /etc/varnish/varnish.params +``` + +Set the VCL location, IP address, port, and cache location and size. `malloc` sets the cache location to RAM, and `512M` sets the cache size to 512MB. + +```vcl +VARNISH_LISTEN_ADDRESS=192.168.1.10 +VARNISH_LISTEN_PORT=80 +VARNISH_VCL_CONF=/etc/varnish/librenms.vcl +VARNISH_STORAGE="malloc,512M" +``` + +Example varnish.params: + +```vcl +# Set this to 1 to make systemd reload try to switch vcl without restart. +RELOAD_VCL=1 + +# Main configuration file. You probably want to change it. +VARNISH_VCL_CONF=/etc/varnish/librenms.vcl + +# Default address and port to bind to. Blank address means all IPv4 +# and IPv6 interfaces, otherwise specify a host name, an IPv4 dotted +# quad, or an IPv6 address in brackets. +VARNISH_LISTEN_ADDRESS=192.168.1.10 +VARNISH_LISTEN_PORT=80 + +# Admin interface listen address and port +VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 +VARNISH_ADMIN_LISTEN_PORT=6082 + +# Shared secret file for admin interface +VARNISH_SECRET_FILE=/etc/varnish/secret + +# Backend storage specification, see Storage Types in the varnishd(5) +# man page for details. +VARNISH_STORAGE="malloc,512M" + +# Default TTL used when the backend does not specify one +VARNISH_TTL=120 + +# User and group for the varnishd worker processes +VARNISH_USER=varnish +VARNISH_GROUP=varnish + +# Other options, see the man page varnishd(1) +DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300" +``` + +#### Configure Apache for Varnish #### + +Edit librenms.conf and modify the Apache Virtual Host listening port. + +- Modify:`` to: `` +```bash +vim /etc/httpd/conf.d/librenms.conf +``` + +Varnish can not share a port with Apache. Change the Apache listening port to 8080. + +- Modify:`Listen 80` to:`Listen 8080` +```bash +vim /etc/httpd/conf/httpd.conf +``` + +- Create the librenms.vcl +```bash +cd /etc/varnish +touch librenms.vcl +``` +- Set ownership and permissions for Varnish files. + +```bash +chown varnish:varnish default.vcl varnish.params secret +chmod 644 default.vcl varnish.params secret +``` + +Edit the librenms.vcl. + +```bash +vim librenms.vcl +``` +Paste example VCL config, read config comments for more information. + +```vcl +# +# This is an example VCL file for Varnish. +# +# It does not do anything by default, delegating control to the +# builtin VCL. The builtin VCL is called when there is no explicit +# return statement. +# +# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/ +# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples. + +# Marker to tell the VCL compiler that this VCL has been adapted to the +# new 4.0 format. +vcl 4.0; + +# Default backend definition. Set this to point to your Apache server. +backend librenms { + .host = "127.0.0.1"; + .port = "8080"; +} + +# In this example our objective is to cache static content with Varnish and temporarily +# cache dynamic content in the client web browser. + +sub vcl_recv { + # HTTP requests from client web browser. + # Here we remove any cookie HTTP requests for the 'librenms.domain.net' host + # containing the matching file extensions. We don't have to match by host if you + # only have LibreNMS running on Apache. + # If the cookies are not removed from the HTTP request then Varnish will not cache + # the files. 'else' function is set to 'pass', or don't cache anything that doesn't + # match. + + if (req.http.host ~ "^librenms.domain.net") { + set req.backend_hint = librenms; + if (req.url ~ "\.(png|gif|jpg|jpeg|ico|pdf|js|css|svg|eot|otf|woff|woff2|ttf)$") { + unset req.http.Cookie; + } + + else{ + return(pass); + } + } +} + +sub vcl_backend_response { + # 'sub vcl_backend_response' is the same function as 'sub vcl_fetch' in Varnish 3, however, + # the syntax is slightly different + # This function happens after we read the response headers from the backend (Apache). + # First function 'if (bereq.url ~ "\' removes cookies from the Apache HTTP responses + # that match the file extensions that are between the quotes, and cache the files for 24 hours. + # This assumes you update LibreNMS once a day, otherwise restart Varnish to clear cache. + # Second function 'if (bereq.url ~ "^/' removes the Pragma no-cache statements and sets the age + # of how long the client brower will cache the matching urls. + # LibreNMS graphs are updated every 300 seconds, 'max-age=300' is set to match this behavior. + # We could cache these URLs in Varnish but it would add to the complexity of the config. + + if (bereq.http.host ~ "^librenms.domain.net") { + if (bereq.url ~ "\.(png|gif|jpg|jpeg|ico|pdf|js|css|svg|eot|otf|woff|woff2|ttf)$") { + unset beresp.http.Set-cookie; + set beresp.ttl = 24h; + } + + if (bereq.url ~ "^/graph.php" || "^/device/" || "^/iftype/" || "^/customers/" || "^/health/" || "^/apps/" || "^/(plugin)$" || "^/(alert)$" || "^/eventlog/" || "^/graphs/" || "^/ports/" ) { + unset beresp.http.Pragma; + set beresp.http.Cache-Control = "max-age=300"; + } + } +} + +sub vcl_deliver { + # Happens when we have all the pieces we need, and are about to send the + # response to the client. + # You can do accounting or modifying the final object here. + + return (deliver); +} +``` + +- Reload rules to remove the temporary port rule we added earlier. +```bash +firewall-cmd --reload +``` + +Varnish caching does not take effect immediately. You will need to browse the LibreNMS website to build up the cache. + +Use the command `varnishstat` to monitor Varnish caching. Over time you should see 'MAIN.cache_hit' and 'MAIN.client_req' increase. With the above VCL the hit to request ratio is approximately 84%. + +- Session based VCL (coming soon) + +- Testing and debugging VCL (coming soon) diff --git a/doc/General/Changelog.md b/doc/General/Changelog.md index 25eb1421a..6a951d90b 100644 --- a/doc/General/Changelog.md +++ b/doc/General/Changelog.md @@ -1,3 +1,103 @@ +### October 2015 + +#### Bug fixes + - Discovery / Polling: + - Check file exists via rrdcached before creating new files on 1.5 (PR2041) + - WebUI: + - Soft fail if PHP Pear not installed (PR2036) + - Escape quotes for ifAlias in overlib calls (PR2072) + - Fix table name for access points (PR2075) + - Removed STACK text in graphs (PR2097) + - Enable multiple ifDescr overrides to be done per device (PR2099) + - API: + - Fixed API call for alert states (PR2076) + +#### Improvements + - WebUI: + - Updated Bootstrap to 3.3.5 (PR2015) + - Added billing graphs to graphs widget (PR2027) + - Lock widgets by default so they can't be moved (PR2042) + - Moved Device Groups menu (PR2049) + - API: + - Added unmute alert function to API (PR2082) + - Added detection support for: + - Pulse Secure OS (PR2053) + - Discovery / Polling: + - Added additional support for some UPS' based on Multimatic cards (PR2046) + - Improved WatchGuard OS detection (PR2048) + - Treat Dell branded Wifi controllers as ArubaOS (PR2065) + - Added discovery option for OS or Device type (PR2088) + - Updated pfSense to firewall type (PR2096) + - Added detection for: + - Riverbed Steelhead support (PR2107) + - Documentation: + - Improved RHEL/CentOS install docs (PR2043) + - General: + - Added colour support to IRC bot (PR2059) + - Fixed IRC bot reconnect if socket dies (PR2061) + +### September 2015 + +#### Bug fixes + - Alerting: + - Process followups if there are changes (PR1817) + - Typo in alert_window setting (PR1841) + - Issue alert-trigger as test object (PR1850) + - WebUI: + - Fix permissions for World-map widget (PR1866) + - Clean up Gloabl / World Map name mixup (PR1874) + - Removed required flag for community when adding new hosts (PR1961) + - Stop duplicate devices showing in map (PR1963) + - Fix adduser bug storing users real name (PR1990) + - Stop alerts top-menu being clickable (PR1995) + - Services: + - Honour IP field for DNS checks (PR1933) + - Discovery / Poller: + - Fix Huawei VRP os detection (PR1931) + - Set empty processor descr for *nix processors (PR1951) + - Ensure udp6/tcp6 snmp devices use fping6 (PR1959) + - Fix RRD creation parameters (PR2010) + - General: + - Remove 'sh' from cronjob (PR1818) + - Remove MySQL Locks (PR1822,PR1826,PR1829,PR1836) + - Change DB config options to use single quotes to allow $ (PR1948) + +#### Improvements + - WebUI: + - Ability to edit ifAlias (PR1811) + - Honour Mouseout/Mouseleave on map widget (PR1814) + - Make syslog/eventlog responsive (PR1816) + - Reformat Proxmox UI (PR1825,PR1827) + - Misc Changes (PR1828,PR1830,PR1875,PR1885,PR1886,PR1887,PR1891,PR1896,PR1901,PR1913,PR1944) + - Added support for Oxidized versioning (PR1842) + - Added graph widget + settings for widgets (PR1835,PR1861,PR1968) + - Added Support for multiple dashboards (PR1869) + - Added settings page for Worldmap widget (PR1872) + - Added uptime to availability widget (PR1881) + - Added top devices and ports widgets (PR1903) + - Added support for saving notes for devices (PR1927) + - Added fullscreen mobile support (PR2022) + - Added detection for: + - FortiOS (PR1815) + - HP MSM (PR1953) + - Discovery / Poller: + - Added Proxmox support (PR1789) + - Added CPU/Mem support for SonicWALL (PR1957) + - Updated distro script to support Arch Linux + fall back to lsb-release (PR1978) + - Documentation: + - Add varnish docs (PR1809) + - Added CentOS 7 RRCached docs (PR1893) + - Improved description of fping options (PR1952) + - Alerting: + - Added RegEx support for alert rules and device groups (PR1998) + - General: + - Make installer more responsive (PR1832) + - Update fping millisec option to 200 default (PR1833) + - Reduced cleanup of device_perf (PR1837) + - Added support for negative values in munin-plugins (PR1907) + - Added default librenms user to config for use in validate.php (PR1956) + - Added working memcache support (PR2007) + ### August 2015 #### Bug fixes @@ -8,6 +108,9 @@ - Fixed Web installer due to code tidying update (PR1644) - Updated gridster variable names to make unique (PR1646) - Fixed issues with displaying devices with ' in location (PR1655) + - Fixes updating snmpv3 details in webui (PR1727) + - Check for user perms before listing neighbour ports (PR1749) + - Fixed Test-Transport button (PR1772) - DB: - Added proper indexes on device_perf table (PR1621) - Fixed multiple mysql strict issues (PR1638, PR1659) @@ -17,8 +120,18 @@ - Fixed discovery-arp not running since code formatting update (PR1671) - Correct the DSM upgrade OID (PR1696) - Fix MySQL agent host variable usage (PR1710) + - Pass snmp-auth parameters enclosed by single-quotes (PR1730) + - Revert change which skips over down ports (PR1742) + - Stop PoE polling for each port (PR1747) + - Use ifHighSpeed if ifSpeed equals 0 (PR1750) + - Keep PHP Backwards compatibility (PR1766) + - False identification of Zyxel as Cisco (PR1776) + - Fix MySQL statement in poller-service.py (PR1794) + - Fix upstart script for poller-service.py (PR1812) - General: - Fixed path to defaults.inc.php in config.php.default (PR1673) + - Strip '::ffff:' from syslog input (PR1734) + - Fix RRA (PR1791) #### Improvements - WebUI Updates: @@ -32,29 +145,50 @@ - Added support for running under sub-directory (PR1667) - Updated vis.js to latest version (PR1708) - Added border on availability map (PR1713) + - Make new dashboard the default (PR1719) + - Rearrange about page (PR1735,PR1743) + - Center/Cleanup graphs (PR1736) + - Added Hover-Effect on devices table (PR1738) + - Show Test-Transport result (PR1777) + - Add arrows to the network map (PR1787) + - Add errored ports to summary widget (PR1788) + - Show message if no Device-Groups exist (PR1796) + - Misc UI fixes (Titles, Headers, ...) (PR1797,PR1798,PR1800,PR1801,PR1802,PR1803,PR1804,PR1805) + - Move packages to overview dropdown (PR1810) - API Updates: - Improvided billing support in API (PR1599) + - Extended support for list devices to support mac/ipv4 and ipv6 filtering (PR1744) - Added detection for: - Perle Media convertors (PR1607) + - Mac OSX 10 (PR1774) - Improved detection for: - Windows devices (PR1639) - - Zywall CPU, Version and Memory (PR1660) + - Zywall CPU, Version and Memory (PR1660,PR1784) - Added LLDP support for PBN devices (PR1705) + - Netgear GS110TP (PR1751) - Additional Sensors: - Added Compressor state for PCOWEB (PR1600) - Added dbm support for IOS-XR (PR1661) + - Added temperature support for DNOS (PR1782) - Discovery / Poller: - Updated autodiscovery function to log new type (PR1623) + - Improve application polling (PR1724) + - Improve debug output (PR1756) - DB: - Added MySQLi support (PR1647) - Documentation: - Added docs on MySQL strict mode (PR1635) - Updated billing docs to use librenms user in cron (PR1676) - Updated LDAP docs to indicate php-ldap module needs installing (PR1716) + - Typo/Spellchecks (PR1731,PR1806) + - Improved Alerting and Device-Groups (PR1781) - Alerting: - Reformatted eventlog message to show state for alerts (PR1685) + - Add basic Pushbullet transport (PR1721) + - Allow custom titles (PR1807) - General: - Added more debugging and checks to discovery-protocols (PR1590) + - Cleanup debug statements (PR1725,PR1737) ### July 2015 diff --git a/doc/General/Contributing.md b/doc/General/Contributing.md index 8561f3f29..c1d49bc22 100644 --- a/doc/General/Contributing.md +++ b/doc/General/Contributing.md @@ -170,7 +170,7 @@ project. Proposed workflow for submitting pull requests ---------------------------------------------- -Please see the new [Using Git](http://doc.librenms.org/Developing/Using-Git/) document which gives you step-by-step +Please see the new [Using Git](http://docs.librenms.org/Developing/Using-Git/) document which gives you step-by-step instructions on using git to submit a pull request. [1]: http://www.gnu.org/licenses/license-list.html diff --git a/doc/General/Updating.md b/doc/General/Updating.md index f5017eea2..4ae74bd2d 100644 --- a/doc/General/Updating.md +++ b/doc/General/Updating.md @@ -6,10 +6,9 @@ by ensuring: $config['update'] = 0; is no longer commented out. If you would like to perform a manual update -then you can do this by running the following commands: +then you can do this by running the following command: - git pull --no-edit --quiet - php includes/sql-schema/update.php + ./daily.sh This will update both the core LibreNMS files but also update the database structure if updates are available. diff --git a/doc/Installation/Installation-(Debian-Ubuntu).md b/doc/Installation/Installation-(Debian-Ubuntu).md index 94510473c..70927a3e7 100644 --- a/doc/Installation/Installation-(Debian-Ubuntu).md +++ b/doc/Installation/Installation-(Debian-Ubuntu).md @@ -101,9 +101,9 @@ To prepare the web interface (and adding devices shortly), you'll need to create First, create and chown the `rrd` directory and create the `logs` directory: mkdir rrd logs + chown -R librenms:librenms /opt/librenms chown www-data:www-data logs chmod 775 rrd - chown librenms:librenms rrd > NOTE: If you're not running Ubuntu or Debian, you will need to change `www-data` to the user and group which run the Apache web server. > If you're planing on running rrdcached, make sure that the path is also chmod'ed to 775 and chown'ed to librenms:librenms. @@ -169,9 +169,9 @@ Initiate the follow database with the following command: Create the admin user - priv should be 10 - php adduser.php 10 + php adduser.php 10 -Substitute your desired username and password--and leave the angled brackets off. +Substitute your desired username, password and email address--and leave the angled brackets off. ### Add localhost ### @@ -179,9 +179,9 @@ Substitute your desired username and password--and leave the angled brackets off This assumes you haven't made community changes--if you have, replace `public` with your community. It also assumes SNMP v2c. If you're using v3, there are additional steps (NOTE: instructions for SNMPv3 to come). -Discover localhost and poll it for the first time: +Discover localhost:: - php discovery.php -h all && php poller.php -h all + php discovery.php -h all ### Create cronjob ### @@ -205,6 +205,9 @@ so that it looks like this: ### Install complete ### +Please allow for 2-3 runs of the poller-wrapper for data to start appearing in the WebUI. +If you don't see data after this, please refer to the [FAQ](http://docs.librenms.org/Support/FAQ/) for assistance. + That's it! You now should be able to log in to http://librenms.example.com/. Please note that we have not covered HTTPS setup in this example, so your LibreNMS install is not secure by default. Please do not expose it to the public Internet unless you have configured HTTPS and taken appropriate web server hardening steps. It would be great if you would consider opting into the stats system we have, please see [this page](http://docs.librenms.org/General/Callback-Stats-and-Privacy/) on what it is and how to enable it. diff --git a/doc/Installation/Installation-(RHEL-CentOS).md b/doc/Installation/Installation-(RHEL-CentOS).md index f646d04fc..25fbc1db9 100644 --- a/doc/Installation/Installation-(RHEL-CentOS).md +++ b/doc/Installation/Installation-(RHEL-CentOS).md @@ -1,4 +1,4 @@ -NOTE: What follows is a very rough list of commands. This works on a fresh install of CentOS 6.4. +NOTE: What follows is a very rough list of commands. This works on a fresh install of CentOS 6.4 and CentOS 7. NOTE: These instructions assume you are the root user. If you are not, prepend `sudo` to all shell commands (the ones that aren't at `mysql>` prompts) or temporarily become a user with root privileges with `sudo -s`. @@ -8,6 +8,7 @@ This host is where the MySQL database runs. It could be the same machine as you > ** Whilst we are working on ensuring LibreNMS is compatible with MySQL strict mode, for now, please disable this after mysql is installed. +**CentOS 6**: You are free to choose between using MySQL or MariaDB: **MySQL** @@ -24,17 +25,35 @@ chkconfig mariadb on service mariadb start ``` +**CentOS 7** + +(NOTE: In CentOS 7 there is only mariadb in official repo) +**MariaDB** +```bash +yum install net-snmp mariadb-server mariadb-client +systemctl enable mariadb +systemctl start mariadb +``` + Now continue with the installation: +**CentOS 6** ```bash -yum install net-snmp mysql-server -service snmpd start chkconfig snmpd on +service snmpd start mysql_secure_installation mysql -uroot -p ``` -Enter the MySQL root password to enter the MySQL command-line interface. +**CentOS 7** +```bash +systemctl enable snmpd +systemctl start snmpd +mysql_secure_installation +mysql -uroot -p +``` + +Enter the MySQL/MariaDB root password to enter the command-line interface. Create database. @@ -70,22 +89,43 @@ Install necessary software. The packages listed below are an all-inclusive list Note if not using HTTPd (Apache): RHEL requires `httpd` to be installed regardless of of `nginx`'s (or any other web-server's) presence. +**CentOS 6** +```bash yum install epel-release yum install php php-cli php-gd php-mysql php-snmp php-pear php-curl httpd net-snmp graphviz graphviz-php mysql ImageMagick jwhois nmap mtr rrdtool MySQL-python net-snmp-utils vixie-cron php-mcrypt fping git pear install Net_IPv4-1.3.4 pear install Net_IPv6-1.2.2b2 +``` -### Adding the librenms-user ### +**CentOS 7** +```bash + yum install php php-cli php-gd php-mysql php-snmp php-pear php-curl httpd net-snmp graphviz graphviz-php mariadb ImageMagick jwhois nmap mtr rrdtool MySQL-python net-snmp-utils vixie-cron php-mcrypt fping git + pear install Net_IPv4-1.3.4 + pear install Net_IPv6-1.2.2b2 +``` +### Adding the librenms-user for Apache ### +```bash useradd librenms -d /opt/librenms -M -r usermod -a -G librenms apache +``` + +### Adding the librenms-user for Nginx ### +```bash + useradd librenms -d /opt/librenms -M -r + usermod -a -G librenms nginx +``` ### Using HTTPd (Apache2) ### Set `httpd` to start on system boot. +**CentOS 6** chkconfig --levels 235 httpd on +**CentOS 7** + systemctl enable httpd + Next, add the following to `/etc/httpd/conf.d/librenms.conf` ```apache @@ -110,14 +150,25 @@ If the file `/etc/httpd/conf.d/welcome.conf` exists, you might want to remove th Install necessary extra software and let it start on system boot. +**CentOS 6** +```bash yum install nginx php-fpm chkconfig nginx on chkconfig php-fpm on +``` + +**CentOS 7** +```bash + yum install nginx php-fpm + systemctl enable nginx + systemctl enable php-fpm +``` Modify permissions and configuration for `php-fpm` to use nginx credentials. + mkdir /var/lib/php/session chown root:nginx /var/lib/php -R - vi /etc/php-fpm.d/www.conf # At line #12: Change `listen` to `/var/run/php5-fpm.sock` + vim /etc/php-fpm.d/www.conf # At line #12: Change `listen` to `/var/run/php5-fpm.sock` # At line #39-41: Change the `user` and `group` to `nginx` Add configuration for `nginx` at `/etc/nginx/conf.d/librenms.conf` with the following content: @@ -142,7 +193,7 @@ server { deny all; } location @librenms { - rewrite ^api/v0(.*)$ /api_v0.php/$1 last; + rewrite api/v0(.*)$ /api_v0.php/$1 last; rewrite ^(.+)$ /index.php/$1 last; } } @@ -152,15 +203,19 @@ server { You can clone the repository via HTTPS or SSH. In either case, you need to ensure the appropriate port (443 for HTTPS, 22 for SSH) is open in the outbound direction for your server. +```bash cd /opt git clone https://github.com/librenms/librenms.git librenms cd /opt/librenms +``` At this stage you can either launch the web installer by going to http://IP/install.php, follow the on-screen instructions then skip to the 'Web Interface' section further down. Alternatively if you want to continue the setup manually then just keep following these instructions. +```bash cp config.php.default config.php vim config.php +``` NOTE: The recommended method of cloning a git repository is HTTPS. If you would like to clone via SSH instead, use the command `git clone git@github.com:librenms/librenms.git librenms` instead. @@ -184,9 +239,9 @@ Initiate the follow database with the following command: Create the admin user - priv should be 10 - php adduser.php 10 + php adduser.php 10 -Substitute your desired username and password--and leave the angled brackets off. +Substitute your desired username, password and email address--and leave the angled brackets off. ### Web Interface ### @@ -194,40 +249,66 @@ To prepare the web interface (and adding devices shortly), you'll need to create First, create and chown the `rrd` directory and create the `logs` directory +```bash mkdir rrd logs + chown -R librenms:librenms /opt/librenms + chmod 775 rrd + # For HTTPd (Apache): chown apache:apache logs + # For Nginx: chown nginx:nginx logs - - chmod 775 rrd - chown librenms:librenms rrd +``` > If you're planing on running rrdcached, make sure that the path is also chmod'ed to 775 and chown'ed to librenms:librenms. +**SELinux** +> if you're using SELinux you need to allow web server user to write into logs directory. +> semanage tool is a part of policycoreutils-python, so if don't have it, you can install it +> **Please note that running LibreNMS with SELinux is still experimental and we cannot guarantee that everything will be working fine for now.** + +```bash + yum install policycoreutils-python +``` + +```bash + semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/logs(/.*)?' + semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/logs(/.*)?' + restorecon -RFvv /opt/librenms/logs/ +``` + Start the web-server: +**CentOS 6** + # For HTTPd (Apache): service httpd restart + # For Nginx: service nginx restart +**CentOS 7** + + # For HTTPd (Apache): + systemctl restart httpd + + # For Nginx: + systemctl restart nginx + ### Add localhost ### php addhost.php localhost public v2c This assumes you haven't made community changes--if you have, replace `public` with your community. It also assumes SNMP v2c. If you're using v3, there are additional steps (NOTE: instructions for SNMPv3 to come). -Discover localhost and poll it for the first time: +Discover localhost: - php discovery.php -h all && php poller.php -h all + php discovery.php -h all ### Create cronjob ### -The polling method used by LibreNMS is `poller-wrapper.py`, which was placed in -the public domain by its author. By default, the LibreNMS cronjob runs `poller- -wrapper.py` with 16 threads. The current LibreNMS recommendation is to use 4 th -reads per core. The default if no thread count is `16 threads`. +The polling method used by LibreNMS is `poller-wrapper.py`, which was placed in the public domain by its author. By default, the LibreNMS cronjob runs `poller-wrapper.py` with 16 threads. The current LibreNMS recommendation is to use 4 threads per core. The default if no thread count is `16 threads`. If the thread count needs to be changed, you can do so by editing the cron file (`/etc/cron.d/librenms`). Just add a number after `poller-wrapper.py`, as in the below example: @@ -251,6 +332,9 @@ so that it looks like this: ### Install complete ### +Please allow for 2-3 runs of the poller-wrapper for data to start appearing in the WebUI. +If you don't see data after this, please refer to the [FAQ](http://docs.librenms.org/Support/FAQ/) for assistance. + That's it! You now should be able to log in to http://librenms.example.com/. Please note that we have not covered HTTPS setup in this example, so your LibreNMS install is not secure by default. Please do not expose it to the public Internet unless you have configured HTTPS and taken appropriate web server hardening steps. It would be great if you would consider opting into the stats system we have, please see [this page](http://docs.librenms.org/General/Callback-Stats-and-Privacy/) on what it is and how to enable it. diff --git a/doc/Installation/Installation-Lighttpd-(Debian-Ubuntu).md b/doc/Installation/Installation-Lighttpd-(Debian-Ubuntu).md index f23863b44..030e996fb 100644 --- a/doc/Installation/Installation-Lighttpd-(Debian-Ubuntu).md +++ b/doc/Installation/Installation-Lighttpd-(Debian-Ubuntu).md @@ -92,9 +92,9 @@ Initiate the follow database with the following command: Create the admin user - priv should be 10 - php adduser.php 10 + php adduser.php 10 -Substitute your desired username and password--and leave the angled brackets off. +Substitute your desired username, password and email address--and leave the angled brackets off. ### Web Interface ### @@ -103,9 +103,9 @@ To prepare the web interface (and adding devices shortly), you'll need to set up First, create and chown the `rrd` directory and create the `logs` directory mkdir rrd logs + chown -R librenms:librenms /opt/librenms chown www-data:www-data logs chmod 775 rrd - chown librenms:librenms rrd > NOTE: If you're planing on running rrdcached, make sure that the path is also chmod'ed to 775 and chown'ed to librenms:librenms. @@ -156,9 +156,9 @@ then restart Lighttpd: This assumes you haven't made community changes--if you have, replace `public` with your community. It also assumes SNMP v2c. If you're using v3, there are additional steps (NOTE: instructions for SNMPv3 to come). -Discover localhost and poll it for the first time: +Discover localhost: - php discovery.php -h all && php poller.php -h all + php discovery.php -h all ### Create cronjob ### @@ -185,6 +185,9 @@ so that it looks like this: ### Install complete ### +Please allow for 2-3 runs of the poller-wrapper for data to start appearing in the WebUI. +If you don't see data after this, please refer to the [FAQ](http://docs.librenms.org/Support/FAQ/) for assistance. + That's it! You now should be able to log in to http://librenms.example.com/. Please note that we have not covered HTTPS setup in this example, so your LibreNMS install is not secure by default. Please do not expose it to the public Internet unless you have configured HTTPS and taken appropriate web server hardening steps. It would be great if you would consider opting into the stats system we have, please see [this page](http://docs.librenms.org/General/Callback-Stats-and-Privacy/) on what it is and how to enable it. diff --git a/doc/Support/Configuration.md b/doc/Support/Configuration.md index dfc2fd143..7ffdffe08 100644 --- a/doc/Support/Configuration.md +++ b/doc/Support/Configuration.md @@ -24,10 +24,10 @@ Log files created by LibreNMS will be stored within this directory. These are the configuration options you will need to use to specify to get started. ```php -$config['db_host'] = "127.0.0.1"; -$config['db_user'] = ""; -$config['db_pass'] = ""; -$config['db_name'] = ""; +$config['db_host'] = '127.0.0.1'; +$config['db_user'] = ''; +$config['db_pass'] = ''; +$config['db_name'] = ''; ``` You can also select between the mysql and mysqli php extensions: @@ -36,7 +36,7 @@ You can also select between the mysql and mysqli php extensions: $config['db']['extension'] = 'mysqli'; ``` -#### Progams +#### Programs A lot of these are self explanatory so no further information may be provided. @@ -46,13 +46,29 @@ $config['rrdtool'] = "/usr/bin/rrdtool"; ```php $config['fping'] = "/usr/bin/fping"; -$config['fping6'] = "/usr/bin/fping6"; +$config['fping6'] = "fping6"; $config['fping_options']['retries'] = 3; $config['fping_options']['timeout'] = 500; $config['fping_options']['count'] = 3; -$config['fping_options']['millisec'] = 5; +$config['fping_options']['millisec'] = 200; ``` -fping configuration options, this includes setting the timeout and retry options. +`fping` configuration options: + +* `retries` (`fping` parameter `-r`): Number of times an attempt at pinging a target will be made, not including the first try. +* `timeout` (`fping` parameter `-t`): Amount of time that fping waits for a response to its first request (in milliseconds). +* `count` (`fping` parameter `-c`): Number of request packets to send to each target. +* `millisec` (`fping` parameter `-p`): Time in milliseconds that fping waits between successive packets to an individual target. + +You can disable the fping / icmp check that is done for a device to be determined to be up on a global or per device basis. +**We don't advice disabling the fping / icmp check unless you know the impact, at worst if you have a large number of devices down +then it's possible that the poller would no longer complete in 5 minutes due to waiting for snmp to timeout.** + +Globally disable fping / icmp check: +```php +$config['icmp_check'] = false; +``` + +If you would like to do this on a per device basis then you can do so under Device -> Edit -> Misc -> Disable ICMP Test? On ```php $config['snmpwalk'] = "/usr/bin/snmpwalk"; @@ -143,6 +159,7 @@ $config['show_locations'] = 1; # Enable Locations on menu $config['show_locations_dropdown'] = 1; # Enable Locations dropdown on menu $config['show_services'] = 0; # Enable Services on menu $config['int_customers'] = 1; # Enable Customer Port Parsing +$config['summary_errors'] = 0; # Show Errored ports in summary boxes on the dashboard $config['customers_descr'] = 'cust'; // The description to look for in ifDescr. Can be an array as well array('cust','cid'); $config['transit_descr'] = ""; // Add custom transit descriptions (can be an array) $config['peering_descr'] = ""; // Add custom peering descriptions (can be an array) diff --git a/doc/Support/FAQ.md b/doc/Support/FAQ.md index 4fb4d74cb..d7317db4f 100644 --- a/doc/Support/FAQ.md +++ b/doc/Support/FAQ.md @@ -22,7 +22,7 @@ This is currently well documented within the doc folder of the installation files. -For Debian / Ubuntu installs follow [Debian / Ubuntu](http://docs.librenms.org/Installation/Installation-(Debian-Ubuntu) +For Debian / Ubuntu installs follow [Debian / Ubuntu](http://docs.librenms.org/Installation/Installation-(Debian-Ubuntu)) For RedHat / CentOS installs follow [RedHat / CentOS](http://docs.librenms.org/Installation/Installation-(RHEL-CentOS)) @@ -60,7 +60,7 @@ However we will always aim to help wherever possible so if you are running a dis #### Do you have a demo available? -We do indeed, you can find access to the demo [here](demo.librenms.org) +We do indeed, you can find access to the demo [here](https://demo.librenms.org) #### Why do I get blank pages sometimes in the WebUI? diff --git a/doc/Support/Install Validation.md b/doc/Support/Install Validation.md index ec5621781..6283a9972 100644 --- a/doc/Support/Install Validation.md +++ b/doc/Support/Install Validation.md @@ -11,6 +11,9 @@ So, to try and help with some of the general issues people come across we've put - Checks if you are running the older alerting system. - Checks your rrd directory setup if not running rrdcached. - Checks disk space for where /opt/librenms is installed. + - Checks location to fping + - Tests MySQL strict mode being enabled + - Tests for files not owned by librenms user (if configured) Optionally you can also pass -m and a module name for that to be tested. Current modules are: diff --git a/doc/Support/Support-New-OS.md b/doc/Support/Support-New-OS.md new file mode 100644 index 000000000..e605f6bd6 --- /dev/null +++ b/doc/Support/Support-New-OS.md @@ -0,0 +1,415 @@ +This document will explain how to add basic and full support for a new OS. **Some knowledge in PHP is needed for the full support.** + + +#### BASIC SUPPORT FOR A NEW OS + +### MIB + +If we have the MIB, we can copy the file into the default directory: + +```bash +/opt/librenms/mibs +``` + +### New OS definition +Let's begin to declare the new OS in LibreNMS. At first we modify the definition file located here: + +```bash +includes/definitions.inc.php +``` + +```php +// Pulse Secure OS definition +$os = 'pulse'; +$config['os'][$os]['text'] = 'Pulse Secure'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'junos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + +//The icon described before is the image we have to create and put in the directory html/images/os +``` + +### Discovery OS + +We create a new file named as our OS definition and in this directory: + +```bash +includes/discovery/os/pulse.inc.php +``` +This file just sets the $os variable, done by checking the SNMP tree for a particular value that matches the OS you are adding. Typically, this will come from the presence of specific values in sysObjectID or sysDescr, or the existence of a particular enterprise tree. +Look at other files to get help in the code structure. + +```php +

Click on Edit-Dashboard to add Widgets


Remember: You can only move & rezise widgets when you're in Edit-Mode.

"; $status = 'ok'; + $title = 'Placeholder'; } elseif (is_file('includes/common/'.$type.'.inc.php')) { - $results_limit = 10; - $no_form = true; + $results_limit = 10; + $no_form = true; + $title = ucfirst($type); + $unique_id = str_replace(array("-","."),"_",uniqid($type,true)); + $widget_id = mres($_POST['id']); + $widget_settings = json_decode(dbFetchCell('select settings from users_widgets where user_widget_id = ?',array($widget_id)),true); + $widget_dimensions = $_POST['dimensions']; + if( !empty($_POST['settings']) ) { + define('show_settings',true); + } include 'includes/common/'.$type.'.inc.php'; $output = implode('', $common_output); $status = 'ok'; - + $title = $widget_settings['title'] ?: $title; } $response = array( 'status' => $status, 'html' => $output, + 'title' => $title, ); echo _json_encode($response); diff --git a/html/ajax_rulesuggest.php b/html/ajax_rulesuggest.php index bb49ecab2..cee773a2f 100644 --- a/html/ajax_rulesuggest.php +++ b/html/ajax_rulesuggest.php @@ -72,22 +72,16 @@ if (isset($_GET['term'],$_GET['device_id'])) { $_GET['device_id'] = mres($_GET['device_id']); if (strstr($_GET['term'], '.')) { $term = explode('.', $_GET['term']); - if ($config['memcached']['enable']) { - $chk = $memcache->get('rule-suggest_'.$term[0]); - } - - if (!(sizeof($chk) > 0) || $chk === false) { - if ($term[0] == 'macros') { - foreach ($config['alert']['macros']['rule'] as $macro => $v) { - $chk[] = 'macros.'.$macro; - } + if ($term[0] == 'macros') { + foreach ($config['alert']['macros']['rule'] as $macro => $v) { + $chk[] = 'macros.'.$macro; } - else { - $tmp = dbFetchRows('SHOW COLUMNS FROM '.$term[0]); - foreach ($tmp as $tst) { - if (isset($tst['Field'])) { - $chk[] = $term[0].'.'.$tst['Field']; - } + } + else { + $tmp = dbFetchRows('SHOW COLUMNS FROM '.$term[0]); + foreach ($tmp as $tst) { + if (isset($tst['Field'])) { + $chk[] = $term[0].'.'.$tst['Field']; } } } @@ -95,29 +89,18 @@ if (isset($_GET['term'],$_GET['device_id'])) { $current = true; } else { - if ($config['memcached']['enable']) { - $chk = $memcache->get('rule-suggest-toplvl'); + $tmp = dbFetchRows("SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'device_id'"); + foreach ($tmp as $tst) { + $chk[] = $tst['TABLE_NAME'].'.'; } - if (!(sizeof($chk) > 0) || $chk === false) { - $tmp = dbFetchRows("SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'device_id'"); - foreach ($tmp as $tst) { - $chk[] = $tst['TABLE_NAME'].'.'; - } - - $chk[] = 'macros.'; - $chk[] = 'bills.'; - } + $chk[] = 'macros.'; + $chk[] = 'bills.'; } if (sizeof($chk) > 0) { - if ($config['memcached']['enable']) { - $memcache->set('rule-suggest-'.$oterm, $chk, 86400); - // Cache for 24h - } - - $obj = levsort($_GET['term'], $chk); - $obj = array_chunk($obj, 20, true); - $obj = $obj[0]; + $obj = levsort($_GET['term'], $chk); + $obj = array_chunk($obj, 20, true); + $obj = $obj[0]; $flds = array(); if ($current === true) { foreach ($obj as $fld) { diff --git a/html/ajax_search.php b/html/ajax_search.php index 791513972..fd6675682 100644 --- a/html/ajax_search.php +++ b/html/ajax_search.php @@ -96,23 +96,22 @@ if (isset($_REQUEST['search'])) { }//end if $json = json_encode($device); - print_r($json); - exit; + die($json); } else if ($_REQUEST['type'] == 'ports') { // Search ports if (is_admin() === true || is_read() === true) { - $results = dbFetchRows("SELECT `ports`.*,`devices`.* FROM `ports` LEFT JOIN `devices` ON `ports`.`device_id` = `devices`.`device_id` WHERE `ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' ORDER BY ifDescr LIMIT 8"); + $results = dbFetchRows("SELECT `ports`.*,`devices`.* FROM `ports` LEFT JOIN `devices` ON `ports`.`device_id` = `devices`.`device_id` WHERE `ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' OR `ifName` LIKE '%".$search."%' ORDER BY ifDescr LIMIT 8"); } else { - $results = dbFetchRows("SELECT DISTINCT(`I`.`port_id`), `I`.*, `D`.`hostname` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%') ORDER BY ifDescr LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); + $results = dbFetchRows("SELECT DISTINCT(`I`.`port_id`), `I`.*, `D`.`hostname` FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifAlias` LIKE '%".$search."%' OR `ifDescr` LIKE '%".$search."%' OR `ifName` LIKE '%".$search."%') ORDER BY ifDescr LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); } if (count($results)) { $found = 1; foreach ($results as $result) { - $name = $result['ifDescr']; + $name = $result['ifDescr'] == $result['ifAlias'] ? $result['ifName'] : $result['ifDescr']; $description = $result['ifAlias']; if ($result['deleted'] == 0 && ($result['ignore'] == 0 || $result['ignore'] == 0) && ($result['ifInErrors_delta'] > 0 || $result['ifOutErrors_delta'] > 0)) { @@ -143,13 +142,13 @@ if (isset($_REQUEST['search'])) { 'description' => $description, 'colours' => $highlight_colour, 'hostname' => $result['hostname'], + 'port_id' => $result['port_id'], ); }//end foreach }//end if $json = json_encode($ports); - print_r($json); - exit; + die($json); } else if ($_REQUEST['type'] == 'bgp') { // Search bgp peers @@ -204,8 +203,132 @@ if (isset($_REQUEST['search'])) { }//end if $json = json_encode($bgp); - print_r($json); - exit; + die($json); + } + else if ($_REQUEST['type'] == 'applications') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT * FROM `applications` INNER JOIN `devices` ON devices.device_id = applications.device_id WHERE `app_type` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%' ORDER BY hostname LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT * FROM `applications` INNER JOIN `devices` AS `D` ON `D`.`device_id` = `applications`.`device_id` INNER JOIN `devices_perms` AS `P` ON `P`.`device_id` = `D`.`device_id` WHERE `P`.`user_id` = ? AND (`app_type` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%') ORDER BY hostname LIMIT 8", array($_SESSION['user_id'])); + } + + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $name = $result['app_type']; + if ($result['disabled'] == 1) { + $highlight_colour = '#808080'; + } + else if ($result['ignored'] == 1 && $result['disabled'] == 0) { + $highlight_colour = '#000000'; + } + else if ($result['status'] == 0 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#ff0000'; + } + else if ($result['status'] == 1 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#008000'; + } + + $device[] = array( + 'name' => $name, + 'hostname' => $result['hostname'], + 'app_id' => $result['app_id'], + 'device_id' => $result['device_id'], + 'colours' => $highlight_colour, + 'device_image' => getImageSrc($result), + 'device_hardware' => $result['hardware'], + 'device_os' => $config['os'][$result['os']]['text'], + 'version' => $result['version'], + 'location' => $result['location'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); + } + else if ($_REQUEST['type'] == 'munin') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT * FROM `munin_plugins` INNER JOIN `devices` ON devices.device_id = munin_plugins.device_id WHERE `mplug_type` LIKE '%".$search."%' OR `mplug_title` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%' ORDER BY hostname LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT * FROM `munin_plugins` INNER JOIN `devices` AS `D` ON `D`.`device_id` = `munin_plugins`.`device_id` INNER JOIN `devices_perms` AS `P` ON `P`.`device_id` = `D`.`device_id` WHERE `P`.`user_id` = ? AND (`mplug_type` LIKE '%".$search."%' OR `mplug_title` LIKE '%".$search."%' OR `hostname` LIKE '%".$search."%') ORDER BY hostname LIMIT 8", array($_SESSION['user_id'])); + } + + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $name = $result['mplug_title']; + if ($result['disabled'] == 1) { + $highlight_colour = '#808080'; + } + else if ($result['ignored'] == 1 && $result['disabled'] == 0) { + $highlight_colour = '#000000'; + } + else if ($result['status'] == 0 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#ff0000'; + } + else if ($result['status'] == 1 && $result['ignore'] == 0 && $result['disabled'] == 0) { + $highlight_colour = '#008000'; + } + + $device[] = array( + 'name' => $name, + 'hostname' => $result['hostname'], + 'device_id' => $result['device_id'], + 'colours' => $highlight_colour, + 'device_image' => getImageSrc($result), + 'device_hardware' => $result['hardware'], + 'device_os' => $config['os'][$result['os']]['text'], + 'version' => $result['version'], + 'location' => $result['location'], + 'plugin' => $result['mplug_type'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); + } + else if ($_REQUEST['type'] == 'iftype') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT `ports`.ifType FROM `ports` WHERE `ifType` LIKE '%".$search."%' GROUP BY ifType ORDER BY ifType LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT `I`.ifType FROM `ports` AS `I`, `devices` AS `D`, `devices_perms` AS `P`, `ports_perms` AS `PP` WHERE ((`P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id`) OR (`PP`.`user_id` = ? AND `PP`.`port_id` = `I`.`port_id` AND `I`.`device_id` = `D`.`device_id`)) AND `D`.`device_id` = `I`.`device_id` AND (`ifType` LIKE '%".$search."%') GROUP BY ifType ORDER BY ifType LIMIT 8", array($_SESSION['user_id'], $_SESSION['user_id'])); + } + if (count($results)) { + $found = 1; + $devices = count($results); + + foreach ($results as $result) { + $device[] = array( + 'filter' => $result['ifType'], + ); + }//end foreach + }//end if + + $json = json_encode($device); + die($json); + } + else if ($_REQUEST['type'] == 'bill') { + // Device search + if (is_admin() === true || is_read() === true) { + $results = dbFetchRows("SELECT `bills`.bill_id, `bills`.bill_name FROM `bills` WHERE `bill_name` LIKE '%".$search."%' OR `bill_notes` LIKE '%".$search."%' LIMIT 8"); + } + else { + $results = dbFetchRows("SELECT `bills`.bill_id, `bills`.bill_name FROM `bills` INNER JOIN `bill_perms` ON `bills`.bill_id = `bill_perms`.bill_id WHERE `bill_perms`.user_id = ? AND (`bill_name` LIKE '%".$search."%' OR `bill_notes` LIKE '%".$search."%') LIMIT 8", array($_SESSION['user_id'])); + } + $json = json_encode($results); + die($json); }//end if }//end if }//end if diff --git a/html/api_v0.php b/html/api_v0.php index 412680e43..a64bab30d 100644 --- a/html/api_v0.php +++ b/html/api_v0.php @@ -84,6 +84,8 @@ $app->group( // api/v0/alerts $app->put('/:id', 'authToken', 'ack_alert')->name('ack_alert'); // api/v0/alerts/$id (PUT) + $app->put('/unmute/:id', 'authToken', 'unmute_alert')->name('unmute_alert'); + // api/v0/alerts/unmute/$id (PUT) } ); $app->get('/alerts', 'authToken', 'list_alerts')->name('list_alerts'); diff --git a/html/css/bootstrap-theme.css b/html/css/bootstrap-theme.css index df2d3d967..c19cd5c4b 100644 --- a/html/css/bootstrap-theme.css +++ b/html/css/bootstrap-theme.css @@ -1,20 +1,18 @@ /*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - .btn-default, .btn-primary, .btn-success, .btn-info, .btn-warning, .btn-danger { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); } - .btn-default:active, .btn-primary:active, .btn-success:active, @@ -27,371 +25,563 @@ .btn-info.active, .btn-warning.active, .btn-danger.active { - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; } - .btn:active, .btn.active { background-image: none; } - .btn-default { text-shadow: 0 1px 0 #fff; - background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%); + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #dbdbdb; border-color: #ccc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } - .btn-default:hover, .btn-default:focus { background-color: #e0e0e0; background-position: 0 -15px; } - .btn-default:active, .btn-default.active { background-color: #e0e0e0; border-color: #dbdbdb; } - -.btn-primary { - background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%); - background-repeat: repeat-x; - border-color: #2b669a; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; } - .btn-primary:hover, .btn-primary:focus { - background-color: #2d6ca2; + background-color: #265a88; background-position: 0 -15px; } - .btn-primary:active, .btn-primary.active { - background-color: #2d6ca2; - border-color: #2b669a; + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; } - .btn-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #3e8f3e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } - .btn-success:hover, .btn-success:focus { background-color: #419641; background-position: 0 -15px; } - .btn-success:active, .btn-success.active { background-color: #419641; border-color: #3e8f3e; } - -.btn-warning { - background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); - background-repeat: repeat-x; - border-color: #e38d13; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; } - -.btn-warning:hover, -.btn-warning:focus { - background-color: #eb9316; - background-position: 0 -15px; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #eb9316; - border-color: #e38d13; -} - -.btn-danger { - background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); - background-repeat: repeat-x; - border-color: #b92c28; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus { - background-color: #c12e2a; - background-position: 0 -15px; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #c12e2a; - border-color: #b92c28; -} - .btn-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-color: #28a4c9; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); } - .btn-info:hover, .btn-info:focus { background-color: #2aabd2; background-position: 0 -15px; } - .btn-info:active, .btn-info.active { background-color: #2aabd2; border-color: #28a4c9; } - +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} .thumbnail, .img-thumbnail { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } - .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus { background-color: #e8e8e8; background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; } - .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - background-color: #357ebd; - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); } - .navbar-default { - background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); - background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); } - +.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%); + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); } - .navbar-brand, .navbar-nav > li > a { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); } - .navbar-inverse { - background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%); - background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); - background-repeat: repeat-x; + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .navbar-nav > .active > a { - background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%); - background-image: linear-gradient(to bottom, #222222 0%, #282828 100%); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0); - -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); - box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25); + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); } - .navbar-inverse .navbar-brand, .navbar-inverse .navbar-nav > li > a { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); } - .navbar-static-top, .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; } - -.alert { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); } - .alert-success { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); background-repeat: repeat-x; border-color: #b2dba1; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); } - .alert-info { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); background-repeat: repeat-x; border-color: #9acfea; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); } - .alert-warning { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); background-repeat: repeat-x; border-color: #f5e79e; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); } - .alert-danger { background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); background-repeat: repeat-x; border-color: #dca7a7; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); } - .progress { background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); -} - -.progress-bar { - background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); } - +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} .progress-bar-success { background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); - background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; } - .progress-bar-info { background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); - background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; } - .progress-bar-warning { background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); - background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; } - .progress-bar-danger { background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); - background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } - .list-group { border-radius: 4px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); } - .list-group-item.active, .list-group-item.active:hover, .list-group-item.active:focus { - text-shadow: 0 -1px 0 #3071a9; - background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); background-repeat: repeat-x; - border-color: #3278b3; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; } - .panel { - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); } - .panel-default > .panel-heading { background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); - background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); -} - -.panel-primary > .panel-heading { - background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%); - background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); } - +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} .panel-success > .panel-heading { background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); - background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; } - .panel-info > .panel-heading { background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); - background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; } - .panel-warning > .panel-heading { background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); - background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; } - .panel-danger > .panel-heading { background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); - background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); - background-repeat: repeat-x; + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; } - .well { background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); - background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); background-repeat: repeat-x; border-color: #dcdcdc; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); -} \ No newline at end of file + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/html/css/bootstrap-theme.min.css b/html/css/bootstrap-theme.min.css index c7b6d39b4..61358b13d 100644 --- a/html/css/bootstrap-theme.min.css +++ b/html/css/bootstrap-theme.min.css @@ -1,7 +1,5 @@ /*! - * Bootstrap v3.0.3 (http://getbootstrap.com) - * Copyright 2013 Twitter, Inc. - * Licensed under http://www.apache.org/licenses/LICENSE-2.0 - */ - -.btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe0e0e0',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-default:hover,.btn-default:focus{background-color:#e0e0e0;background-position:0 -15px}.btn-default:active,.btn-default.active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-primary{background-image:-webkit-linear-gradient(top,#428bca 0,#2d6ca2 100%);background-image:linear-gradient(to bottom,#428bca 0,#2d6ca2 100%);background-repeat:repeat-x;border-color:#2b669a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff2d6ca2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus{background-color:#2d6ca2;background-position:0 -15px}.btn-primary:active,.btn-primary.active{background-color:#2d6ca2;border-color:#2b669a}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);background-repeat:repeat-x;border-color:#3e8f3e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff419641',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus{background-color:#419641;background-position:0 -15px}.btn-success:active,.btn-success.active{background-color:#419641;border-color:#3e8f3e}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);background-repeat:repeat-x;border-color:#e38d13;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffeb9316',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus{background-color:#eb9316;background-position:0 -15px}.btn-warning:active,.btn-warning.active{background-color:#eb9316;border-color:#e38d13}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);background-repeat:repeat-x;border-color:#b92c28;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc12e2a',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus{background-color:#c12e2a;background-position:0 -15px}.btn-danger:active,.btn-danger.active{background-color:#c12e2a;border-color:#b92c28}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);background-repeat:repeat-x;border-color:#28a4c9;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2aabd2',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus{background-color:#2aabd2;background-position:0 -15px}.btn-info:active,.btn-info.active{background-color:#2aabd2;border-color:#28a4c9}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar-default .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f3f3f3 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f3f3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff3f3f3',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.075);box-shadow:inset 0 3px 9px rgba(0,0,0,0.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .navbar-nav>.active>a{background-image:-webkit-linear-gradient(top,#222 0,#282828 100%);background-image:linear-gradient(to bottom,#222 0,#282828 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff282828',GradientType=0);-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,0.25);box-shadow:inset 0 3px 9px rgba(0,0,0,0.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} \ No newline at end of file + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} \ No newline at end of file diff --git a/html/css/bootstrap.css b/html/css/bootstrap.css index 7f3665196..680e76878 100644 --- a/html/css/bootstrap.css +++ b/html/css/bootstrap.css @@ -1,10 +1,9 @@ /*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ - -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ html { font-family: sans-serif; -webkit-text-size-adjust: 100%; @@ -22,6 +21,7 @@ footer, header, hgroup, main, +menu, nav, section, summary { @@ -43,7 +43,7 @@ template { display: none; } a { - background: transparent; + background-color: transparent; } a:active, a:hover { @@ -94,8 +94,9 @@ figure { } hr { height: 0; - -moz-box-sizing: content-box; - box-sizing: content-box; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; } pre { overflow: auto; @@ -144,7 +145,9 @@ input { } input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; padding: 0; } input[type="number"]::-webkit-inner-spin-button, @@ -184,12 +187,16 @@ 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; - box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; } a, a:visited { @@ -201,8 +208,8 @@ th { abbr[title]:after { content: " (" attr(title) ")"; } - a[href^="javascript:"]:after, - a[href^="#"]:after { + a[href^="#"]:after, + a[href^="javascript:"]:after { content: ""; } pre, @@ -231,16 +238,9 @@ th { h3 { page-break-after: avoid; } - select { - background: #fff !important; - } .navbar { display: none; } - .table td, - .table th { - background-color: #fff !important; - } .btn > .caret, .dropup > .btn > .caret { border-top-color: #000 !important; @@ -251,2133 +251,20 @@ th { .table { border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; + } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; } } -* { - -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: 62.5%; - - -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: #428bca; - text-decoration: none; -} -a:hover, -a:focus { - color: #2a6496; - text-decoration: underline; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive, -.thumbnail > img, -.thumbnail a > img, -.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; - 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; -} -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: #999; -} -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: 200; - line-height: 1.4; -} -@media (min-width: 768px) { - .lead { - font-size: 21px; - } -} -small, -.small { - font-size: 85%; -} -cite { - font-style: normal; -} -.text-left { - text-align: left; -} -.text-right { - text-align: right; -} -.text-center { - text-align: center; -} -.text-justify { - text-align: justify; -} -.text-muted { - color: #999; -} -.text-primary { - color: #428bca; -} -a.text-primary:hover { - color: #3071a9; -} -.text-success { - color: #3c763d; -} -a.text-success:hover { - color: #2b542c; -} -.text-info { - color: #31708f; -} -a.text-info:hover { - color: #245269; -} -.text-warning { - color: #8a6d3b; -} -a.text-warning:hover { - color: #66512c; -} -.text-danger { - color: #a94442; -} -a.text-danger:hover { - color: #843534; -} -.bg-primary { - color: #fff; - background-color: #428bca; -} -a.bg-primary:hover { - background-color: #3071a9; -} -.bg-success { - background-color: #dff0d8; -} -a.bg-success:hover { - background-color: #c1e2b3; -} -.bg-info { - background-color: #d9edf7; -} -a.bg-info:hover { - background-color: #afd9ee; -} -.bg-warning { - background-color: #fcf8e3; -} -a.bg-warning:hover { - background-color: #f7ecb5; -} -.bg-danger { - background-color: #f2dede; -} -a.bg-danger:hover { - background-color: #e4b9b9; -} -.page-header { - padding-bottom: 9px; - margin: 40px 0 20px; - border-bottom: 1px solid #eee; -} -ul, -ol { - margin-top: 0; - margin-bottom: 10px; -} -ul ul, -ol ul, -ul ol, -ol ol { - margin-bottom: 0; -} -.list-unstyled { - padding-left: 0; - list-style: none; -} -.list-inline { - padding-left: 0; - 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 #999; -} -.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: #999; -} -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'; -} -blockquote:before, -blockquote:after { - content: ""; -} -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; - white-space: nowrap; - background-color: #f9f2f4; - border-radius: 4px; -} -kbd { - padding: 2px 4px; - font-size: 90%; - color: #fff; - background-color: #333; - border-radius: 3px; - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); -} -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: 0; -} -.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: 0; -} -.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: 0; - } - .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: 0; - } - .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: 0; - } - .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: 0; - } - .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: 0; - } - .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: 0; - } - .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 { - max-width: 100%; - background-color: transparent; -} -th { - text-align: left; -} -.table { - 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-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { - background-color: #f5f5f5; -} -table 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.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.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.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.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.danger:hover > th { - background-color: #ebcccc; -} -@media (max-width: 767px) { - .table-responsive { - width: 100%; - margin-bottom: 15px; - overflow-x: scroll; - overflow-y: hidden; - -webkit-overflow-scrolling: touch; - -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; - 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; - /* IE8-9 */ - line-height: normal; -} -input[type="file"] { - display: block; -} -input[type="range"] { - display: block; - width: 100%; -} -select[multiple], -select[size] { - height: auto; -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -output { - display: block; - padding-top: 7px; - font-size: 14px; - line-height: 1.42857143; - color: #555; -} -.form-control { - display: block; - width: 100%; - height: 34px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - color: #555; - background-color: #fff; - background-image: none; - border: 1px solid #ccc; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); - -webkit-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[disabled], -.form-control[readonly], -fieldset[disabled] .form-control { - cursor: not-allowed; - background-color: #eee; - opacity: 1; -} -textarea.form-control { - height: auto; -} -input[type="search"] { - -webkit-appearance: none; -} -input[type="date"] { - line-height: 34px; -} -.form-group { - margin-bottom: 15px; -} -.radio, -.checkbox { - display: block; - min-height: 20px; - padding-left: 20px; - margin-top: 10px; - margin-bottom: 10px; -} -.radio label, -.checkbox label { - display: inline; - font-weight: normal; - cursor: pointer; -} -.radio input[type="radio"], -.radio-inline input[type="radio"], -.checkbox input[type="checkbox"], -.checkbox-inline input[type="checkbox"] { - float: left; - margin-left: -20px; -} -.radio + .radio, -.checkbox + .checkbox { - margin-top: -5px; -} -.radio-inline, -.checkbox-inline { - 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], -.radio[disabled], -.radio-inline[disabled], -.checkbox[disabled], -.checkbox-inline[disabled], -fieldset[disabled] input[type="radio"], -fieldset[disabled] input[type="checkbox"], -fieldset[disabled] .radio, -fieldset[disabled] .radio-inline, -fieldset[disabled] .checkbox, -fieldset[disabled] .checkbox-inline { - cursor: not-allowed; -} -.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; -} -.input-lg { - height: 46px; - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - border-radius: 6px; -} -select.input-lg { - height: 46px; - line-height: 46px; -} -textarea.input-lg, -select[multiple].input-lg { - height: auto; -} -.has-feedback { - position: relative; -} -.has-feedback .form-control { - padding-right: 42.5px; -} -.has-feedback .form-control-feedback { - position: absolute; - top: 25px; - right: 0; - display: block; - width: 34px; - height: 34px; - line-height: 34px; - text-align: center; -} -.has-success .help-block, -.has-success .control-label, -.has-success .radio, -.has-success .checkbox, -.has-success .radio-inline, -.has-success .checkbox-inline { - 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 { - 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 { - 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; -} -.form-control-static { - margin-bottom: 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 .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; - padding-left: 0; - margin-top: 0; - margin-bottom: 0; - vertical-align: middle; - } - .form-inline .radio input[type="radio"], - .form-inline .checkbox input[type="checkbox"] { - float: none; - margin-left: 0; - } - .form-inline .has-feedback .form-control-feedback { - top: 0; - } -} -.form-horizontal .control-label, -.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; -} -.form-horizontal .form-control-static { - padding-top: 7px; -} -@media (min-width: 768px) { - .form-horizontal .control-label { - text-align: right; - } -} -.form-horizontal .has-feedback .form-control-feedback { - top: 0; - right: 15px; -} -.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; - 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 { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn:hover, -.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 { - pointer-events: none; - cursor: not-allowed; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - box-shadow: none; - opacity: .65; -} -.btn-default { - color: #333; - background-color: #fff; - border-color: #ccc; -} -.btn-default:hover, -.btn-default:focus, -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - color: #333; - background-color: #ebebeb; - border-color: #adadad; -} -.btn-default:active, -.btn-default.active, -.open .dropdown-toggle.btn-default { - background-image: none; -} -.btn-default.disabled, -.btn-default[disabled], -fieldset[disabled] .btn-default, -.btn-default.disabled:hover, -.btn-default[disabled]:hover, -fieldset[disabled] .btn-default:hover, -.btn-default.disabled:focus, -.btn-default[disabled]:focus, -fieldset[disabled] .btn-default:focus, -.btn-default.disabled:active, -.btn-default[disabled]:active, -fieldset[disabled] .btn-default:active, -.btn-default.disabled.active, -.btn-default[disabled].active, -fieldset[disabled] .btn-default.active { - background-color: #fff; - border-color: #ccc; -} -.btn-default .badge { - color: #fff; - background-color: #333; -} -.btn-primary { - color: #fff; - background-color: #428bca; - border-color: #357ebd; -} -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - color: #fff; - background-color: #3276b1; - border-color: #285e8e; -} -.btn-primary:active, -.btn-primary.active, -.open .dropdown-toggle.btn-primary { - background-image: none; -} -.btn-primary.disabled, -.btn-primary[disabled], -fieldset[disabled] .btn-primary, -.btn-primary.disabled:hover, -.btn-primary[disabled]:hover, -fieldset[disabled] .btn-primary:hover, -.btn-primary.disabled:focus, -.btn-primary[disabled]:focus, -fieldset[disabled] .btn-primary:focus, -.btn-primary.disabled:active, -.btn-primary[disabled]:active, -fieldset[disabled] .btn-primary:active, -.btn-primary.disabled.active, -.btn-primary[disabled].active, -fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; -} -.btn-primary .badge { - color: #428bca; - background-color: #fff; -} -.btn-success { - color: #fff; - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - color: #fff; - background-color: #47a447; - border-color: #398439; -} -.btn-success:active, -.btn-success.active, -.open .dropdown-toggle.btn-success { - background-image: none; -} -.btn-success.disabled, -.btn-success[disabled], -fieldset[disabled] .btn-success, -.btn-success.disabled:hover, -.btn-success[disabled]:hover, -fieldset[disabled] .btn-success:hover, -.btn-success.disabled:focus, -.btn-success[disabled]:focus, -fieldset[disabled] .btn-success:focus, -.btn-success.disabled:active, -.btn-success[disabled]:active, -fieldset[disabled] .btn-success:active, -.btn-success.disabled.active, -.btn-success[disabled].active, -fieldset[disabled] .btn-success.active { - background-color: #5cb85c; - border-color: #4cae4c; -} -.btn-success .badge { - color: #5cb85c; - background-color: #fff; -} -.btn-info { - color: #fff; - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - color: #fff; - background-color: #39b3d7; - border-color: #269abc; -} -.btn-info:active, -.btn-info.active, -.open .dropdown-toggle.btn-info { - background-image: none; -} -.btn-info.disabled, -.btn-info[disabled], -fieldset[disabled] .btn-info, -.btn-info.disabled:hover, -.btn-info[disabled]:hover, -fieldset[disabled] .btn-info:hover, -.btn-info.disabled:focus, -.btn-info[disabled]:focus, -fieldset[disabled] .btn-info:focus, -.btn-info.disabled:active, -.btn-info[disabled]:active, -fieldset[disabled] .btn-info:active, -.btn-info.disabled.active, -.btn-info[disabled].active, -fieldset[disabled] .btn-info.active { - background-color: #5bc0de; - border-color: #46b8da; -} -.btn-info .badge { - color: #5bc0de; - background-color: #fff; -} -.btn-warning { - color: #fff; - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - color: #fff; - background-color: #ed9c28; - border-color: #d58512; -} -.btn-warning:active, -.btn-warning.active, -.open .dropdown-toggle.btn-warning { - background-image: none; -} -.btn-warning.disabled, -.btn-warning[disabled], -fieldset[disabled] .btn-warning, -.btn-warning.disabled:hover, -.btn-warning[disabled]:hover, -fieldset[disabled] .btn-warning:hover, -.btn-warning.disabled:focus, -.btn-warning[disabled]:focus, -fieldset[disabled] .btn-warning:focus, -.btn-warning.disabled:active, -.btn-warning[disabled]:active, -fieldset[disabled] .btn-warning:active, -.btn-warning.disabled.active, -.btn-warning[disabled].active, -fieldset[disabled] .btn-warning.active { - background-color: #f0ad4e; - border-color: #eea236; -} -.btn-warning .badge { - color: #f0ad4e; - background-color: #fff; -} -.btn-danger { - color: #fff; - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - color: #fff; - background-color: #d2322d; - border-color: #ac2925; -} -.btn-danger:active, -.btn-danger.active, -.open .dropdown-toggle.btn-danger { - background-image: none; -} -.btn-danger.disabled, -.btn-danger[disabled], -fieldset[disabled] .btn-danger, -.btn-danger.disabled:hover, -.btn-danger[disabled]:hover, -fieldset[disabled] .btn-danger:hover, -.btn-danger.disabled:focus, -.btn-danger[disabled]:focus, -fieldset[disabled] .btn-danger:focus, -.btn-danger.disabled:active, -.btn-danger[disabled]:active, -fieldset[disabled] .btn-danger:active, -.btn-danger.disabled.active, -.btn-danger[disabled].active, -fieldset[disabled] .btn-danger.active { - background-color: #d9534f; - border-color: #d43f3a; -} -.btn-danger .badge { - color: #d9534f; - background-color: #fff; -} -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; -} -.btn-link, -.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: #2a6496; - 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: #999; - text-decoration: none; -} -.btn-lg, -.btn-group-lg > .btn { - padding: 10px 16px; - font-size: 18px; - line-height: 1.33; - 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%; - padding-right: 0; - padding-left: 0; -} -.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; - transition: opacity .15s linear; -} -.fade.in { - opacity: 1; -} -.collapse { - display: none; -} -.collapse.in { - display: block; -} -.collapsing { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height .35s ease; - transition: height .35s ease; -} @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.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); + 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; @@ -2397,7 +284,8 @@ input[type="button"].btn-block { .glyphicon-plus:before { content: "\2b"; } -.glyphicon-euro:before { +.glyphicon-euro:before, +.glyphicon-eur:before { content: "\20ac"; } .glyphicon-minus:before { @@ -2991,16 +879,2691 @@ input[type="button"].btn-block { .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: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.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: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[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: 14.333333px; + 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: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + 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, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary: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, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success: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, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info: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, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning: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, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger: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, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + 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 solid; + border-top: 4px dashed; + border-top: 4px solid \9; border-right: 4px solid transparent; border-left: 4px solid transparent; } +.dropup, .dropdown { position: relative; } @@ -3018,9 +3581,11 @@ input[type="button"].btn-block { padding: 5px 0; margin: 2px 0 0; font-size: 14px; + text-align: left; list-style: none; background-color: #fff; - background-clip: padding-box; + -webkit-background-clip: padding-box; + background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, .15); border-radius: 4px; @@ -3057,13 +3622,13 @@ input[type="button"].btn-block { .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; - background-color: #428bca; + background-color: #337ab7; outline: 0; } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: #999; + color: #777; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { @@ -3092,7 +3657,8 @@ input[type="button"].btn-block { padding: 3px 20px; font-size: 12px; line-height: 1.42857143; - color: #999; + color: #777; + white-space: nowrap; } .dropdown-backdrop { position: fixed; @@ -3110,13 +3676,14 @@ input[type="button"].btn-block { .navbar-fixed-bottom .dropdown .caret { content: ""; border-top: 0; - border-bottom: 4px solid; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; - margin-bottom: 1px; + margin-bottom: 2px; } @media (min-width: 768px) { .navbar-right .dropdown-menu { @@ -3149,10 +3716,6 @@ input[type="button"].btn-block { .btn-group-vertical > .btn.active { z-index: 2; } -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: none; -} .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, @@ -3162,6 +3725,7 @@ input[type="button"].btn-block { .btn-toolbar { margin-left: -5px; } +.btn-toolbar .btn, .btn-toolbar .btn-group, .btn-toolbar .input-group { float: left; @@ -3192,12 +3756,12 @@ input[type="button"].btn-block { .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { +.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 > .btn:first-child { +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { border-top-left-radius: 0; border-bottom-left-radius: 0; } @@ -3289,9 +3853,16 @@ input[type="button"].btn-block { .btn-group-justified > .btn-group .btn { width: 100%; } -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { - display: none; +.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; @@ -3316,7 +3887,7 @@ input[type="button"].btn-block { height: 46px; padding: 10px 16px; font-size: 18px; - line-height: 1.33; + line-height: 1.3333333; border-radius: 6px; } select.input-group-lg > .form-control, @@ -3445,6 +4016,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { + z-index: 2; margin-left: -1px; } .nav { @@ -3467,11 +4039,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn { background-color: #eee; } .nav > li.disabled > a { - color: #999; + color: #777; } .nav > li.disabled > a:hover, .nav > li.disabled > a:focus { - color: #999; + color: #777; text-decoration: none; cursor: not-allowed; background-color: transparent; @@ -3480,7 +4052,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav .open > a:hover, .nav .open > a:focus { background-color: #eee; - border-color: #428bca; + border-color: #337ab7; } .nav .nav-divider { height: 1px; @@ -3573,7 +4145,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { color: #fff; - background-color: #428bca; + background-color: #337ab7; } .nav-stacked > li { float: none; @@ -3656,13 +4228,13 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } } .navbar-collapse { - max-height: 340px; padding-right: 15px; padding-left: 15px; overflow-x: visible; -webkit-overflow-scrolling: touch; border-top: 1px solid transparent; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + -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; @@ -3671,7 +4243,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-collapse { width: auto; border-top: 0; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } .navbar-collapse.collapse { display: block !important; @@ -3689,6 +4262,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn { 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, @@ -3747,6 +4330,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-brand:focus { text-decoration: none; } +.navbar-brand > img { + display: block; +} @media (min-width: 768px) { .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { @@ -3766,7 +4352,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { border-radius: 4px; } .navbar-toggle:focus { - outline: none; + outline: 0; } .navbar-toggle .icon-bar { display: block; @@ -3798,7 +4384,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-top: 0; background-color: transparent; border: 0; - box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; } .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header { @@ -3824,17 +4411,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { padding-top: 15px; padding-bottom: 15px; } - .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } -} -@media (min-width: 768px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } } .navbar-form { padding: 10px 15px; @@ -3858,6 +4434,18 @@ select[multiple].input-group-sm > .input-group-btn > .btn { 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%; } @@ -3868,14 +4456,17 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-form .radio, .navbar-form .checkbox { display: inline-block; - padding-left: 0; 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"] { - float: none; + position: relative; margin-left: 0; } .navbar-form .has-feedback .form-control-feedback { @@ -3886,6 +4477,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-form .form-group { margin-bottom: 5px; } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } } @media (min-width: 768px) { .navbar-form { @@ -3898,9 +4492,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { -webkit-box-shadow: none; box-shadow: none; } - .navbar-form.navbar-right:last-child { - margin-right: -15px; - } } .navbar-nav > li > .dropdown-menu { margin-top: 0; @@ -3908,6 +4499,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { 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; } @@ -3933,7 +4527,16 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-right: 15px; margin-left: 15px; } - .navbar-text.navbar-right:last-child { +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { margin-right: 0; } } @@ -4020,12 +4623,25 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .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: #999; + color: #9d9d9d; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { @@ -4033,10 +4649,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { background-color: transparent; } .navbar-inverse .navbar-text { - color: #999; + color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a { - color: #999; + color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { @@ -4083,7 +4699,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #999; + color: #9d9d9d; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { @@ -4104,11 +4720,24 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } } .navbar-inverse .navbar-link { - color: #999; + 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; @@ -4125,7 +4754,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { content: "/\00a0"; } .breadcrumb > .active { - color: #999; + color: #777; } .pagination { display: inline-block; @@ -4143,7 +4772,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; - color: #428bca; + color: #337ab7; text-decoration: none; background-color: #fff; border: 1px solid #ddd; @@ -4163,7 +4792,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { - color: #2a6496; + z-index: 3; + color: #23527c; background-color: #eee; border-color: #ddd; } @@ -4176,8 +4806,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { z-index: 2; color: #fff; cursor: default; - background-color: #428bca; - border-color: #428bca; + background-color: #337ab7; + border-color: #337ab7; } .pagination > .disabled > span, .pagination > .disabled > span:hover, @@ -4185,7 +4815,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus { - color: #999; + color: #777; cursor: not-allowed; background-color: #fff; border-color: #ddd; @@ -4194,6 +4824,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .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 { @@ -4209,6 +4840,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .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 { @@ -4254,7 +4886,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { - color: #999; + color: #777; cursor: not-allowed; background-color: #fff; } @@ -4270,8 +4902,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { vertical-align: baseline; border-radius: .25em; } -.label[href]:hover, -.label[href]:focus { +a.label:hover, +a.label:focus { color: #fff; text-decoration: none; cursor: pointer; @@ -4284,18 +4916,18 @@ select[multiple].input-group-sm > .input-group-btn > .btn { top: -1px; } .label-default { - background-color: #999; + background-color: #777; } .label-default[href]:hover, .label-default[href]:focus { - background-color: #808080; + background-color: #5e5e5e; } .label-primary { - background-color: #428bca; + background-color: #337ab7; } .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #3071a9; + background-color: #286090; } .label-success { background-color: #5cb85c; @@ -4335,8 +4967,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { color: #fff; text-align: center; white-space: nowrap; - vertical-align: baseline; - background-color: #999; + vertical-align: middle; + background-color: #777; border-radius: 10px; } .badge:empty { @@ -4346,7 +4978,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { position: relative; top: -1px; } -.btn-xs .badge { +.btn-xs .badge, +.btn-group-xs > .btn .badge { top: 0; padding: 1px 5px; } @@ -4356,16 +4989,23 @@ a.badge:focus { text-decoration: none; cursor: pointer; } -a.list-group-item.active > .badge, +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: #428bca; + color: #337ab7; background-color: #fff; } +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} .nav-pills > li > a > .badge { margin-left: 3px; } .jumbotron { - padding: 30px; + padding-top: 30px; + padding-bottom: 30px; margin-bottom: 30px; color: inherit; background-color: #eee; @@ -4379,7 +5019,11 @@ a.list-group-item.active > .badge, font-size: 21px; font-weight: 200; } -.container .jumbotron { +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { border-radius: 6px; } .jumbotron .container { @@ -4390,7 +5034,8 @@ a.list-group-item.active > .badge, padding-top: 48px; padding-bottom: 48px; } - .container .jumbotron { + .container .jumbotron, + .container-fluid .jumbotron { padding-right: 60px; padding-left: 60px; } @@ -4407,8 +5052,9 @@ a.list-group-item.active > .badge, background-color: #fff; border: 1px solid #ddd; border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; + -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 { @@ -4418,7 +5064,7 @@ a.list-group-item.active > .badge, a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { - border-color: #428bca; + border-color: #337ab7; } .thumbnail .caption { padding: 9px; @@ -4444,10 +5090,12 @@ a.thumbnail.active { .alert > p + p { margin-top: 5px; } -.alert-dismissable { +.alert-dismissable, +.alert-dismissible { padding-right: 35px; } -.alert-dismissable .close { +.alert-dismissable .close, +.alert-dismissible .close { position: relative; top: -2px; right: -21px; @@ -4505,6 +5153,14 @@ a.thumbnail.active { 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; @@ -4530,19 +5186,25 @@ a.thumbnail.active { line-height: 20px; color: #fff; text-align: center; - background-color: #428bca; + 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-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); - background-size: 40px 40px; + -webkit-background-size: 40px 40px; + background-size: 40px 40px; } -.progress.active .progress-bar { +.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 { @@ -4550,6 +5212,7 @@ a.thumbnail.active { } .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 { @@ -4557,6 +5220,7 @@ a.thumbnail.active { } .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 { @@ -4564,6 +5228,7 @@ a.thumbnail.active { } .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 { @@ -4571,31 +5236,52 @@ a.thumbnail.active { } .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, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; +.media-body { + width: 10000px; } .media-object { display: block; } -.media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; +.media-object.img-thumbnail { + max-width: none; } +.media-right, .media > .pull-right { - margin-left: 10px; + 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; @@ -4622,59 +5308,92 @@ a.thumbnail.active { border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} -a.list-group-item { +a.list-group-item, +button.list-group-item { color: #555; } -a.list-group-item .list-group-item-heading { +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { color: #333; } a.list-group-item:hover, -a.list-group-item:focus { +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; text-decoration: none; background-color: #f5f5f5; } -a.list-group-item.active, -a.list-group-item.active:hover, -a.list-group-item.active:focus { - z-index: 2; - color: #fff; - background-color: #428bca; - border-color: #428bca; +button.list-group-item { + width: 100%; + text-align: left; } -a.list-group-item.active .list-group-item-heading, -a.list-group-item.active:hover .list-group-item-heading, -a.list-group-item.active:focus .list-group-item-heading { +.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; } -a.list-group-item.active .list-group-item-text, -a.list-group-item.active:hover .list-group-item-text, -a.list-group-item.active:focus .list-group-item-text { - color: #e1edf7; +.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 { +a.list-group-item-success, +button.list-group-item-success { color: #3c763d; } -a.list-group-item-success .list-group-item-heading { +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, -a.list-group-item-success:focus { +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, -a.list-group-item-success.active:focus { +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; @@ -4683,20 +5402,27 @@ a.list-group-item-success.active:focus { color: #31708f; background-color: #d9edf7; } -a.list-group-item-info { +a.list-group-item-info, +button.list-group-item-info { color: #31708f; } -a.list-group-item-info .list-group-item-heading { +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, -a.list-group-item-info:focus { +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, -a.list-group-item-info.active:focus { +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; @@ -4705,20 +5431,27 @@ a.list-group-item-info.active:focus { color: #8a6d3b; background-color: #fcf8e3; } -a.list-group-item-warning { +a.list-group-item-warning, +button.list-group-item-warning { color: #8a6d3b; } -a.list-group-item-warning .list-group-item-heading { +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, -a.list-group-item-warning:focus { +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, -a.list-group-item-warning.active:focus { +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; @@ -4727,20 +5460,27 @@ a.list-group-item-warning.active:focus { color: #a94442; background-color: #f2dede; } -a.list-group-item-danger { +a.list-group-item-danger, +button.list-group-item-danger { color: #a94442; } -a.list-group-item-danger .list-group-item-heading { +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, -a.list-group-item-danger:focus { +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, -a.list-group-item-danger.active:focus { +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; @@ -4779,7 +5519,11 @@ a.list-group-item-danger.active:focus { font-size: 16px; color: inherit; } -.panel-title > a { +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { color: inherit; } .panel-footer { @@ -4789,35 +5533,60 @@ a.list-group-item-danger.active:focus { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } -.panel > .list-group { +.panel > .list-group, +.panel > .panel-collapse > .list-group { margin-bottom: 0; } -.panel > .list-group .list-group-item { +.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 > .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 > .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 > .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, @@ -4843,6 +5612,13 @@ a.list-group-item-danger.active:focus { 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, @@ -4864,7 +5640,9 @@ a.list-group-item-danger.active:focus { border-bottom-right-radius: 3px; } .panel > .panel-body + .table, -.panel > .panel-body + .table-responsive { +.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, @@ -4932,7 +5710,6 @@ a.list-group-item-danger.active:focus { } .panel-group .panel { margin-bottom: 0; - overflow: hidden; border-radius: 4px; } .panel-group .panel + .panel { @@ -4941,7 +5718,8 @@ a.list-group-item-danger.active:focus { .panel-group .panel-heading { border-bottom: 0; } -.panel-group .panel-heading + .panel-collapse .panel-body { +.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 { @@ -4958,25 +5736,33 @@ a.list-group-item-danger.active:focus { background-color: #f5f5f5; border-color: #ddd; } -.panel-default > .panel-heading + .panel-collapse .panel-body { +.panel-default > .panel-heading + .panel-collapse > .panel-body { border-top-color: #ddd; } -.panel-default > .panel-footer + .panel-collapse .panel-body { +.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: #428bca; + border-color: #337ab7; } .panel-primary > .panel-heading { color: #fff; - background-color: #428bca; - border-color: #428bca; + background-color: #337ab7; + border-color: #337ab7; } -.panel-primary > .panel-heading + .panel-collapse .panel-body { - border-top-color: #428bca; +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; } -.panel-primary > .panel-footer + .panel-collapse .panel-body { - border-bottom-color: #428bca; +.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; @@ -4986,10 +5772,14 @@ a.list-group-item-danger.active:focus { background-color: #dff0d8; border-color: #d6e9c6; } -.panel-success > .panel-heading + .panel-collapse .panel-body { +.panel-success > .panel-heading + .panel-collapse > .panel-body { border-top-color: #d6e9c6; } -.panel-success > .panel-footer + .panel-collapse .panel-body { +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #d6e9c6; } .panel-info { @@ -5000,10 +5790,14 @@ a.list-group-item-danger.active:focus { background-color: #d9edf7; border-color: #bce8f1; } -.panel-info > .panel-heading + .panel-collapse .panel-body { +.panel-info > .panel-heading + .panel-collapse > .panel-body { border-top-color: #bce8f1; } -.panel-info > .panel-footer + .panel-collapse .panel-body { +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #bce8f1; } .panel-warning { @@ -5014,10 +5808,14 @@ a.list-group-item-danger.active:focus { background-color: #fcf8e3; border-color: #faebcc; } -.panel-warning > .panel-heading + .panel-collapse .panel-body { +.panel-warning > .panel-heading + .panel-collapse > .panel-body { border-top-color: #faebcc; } -.panel-warning > .panel-footer + .panel-collapse .panel-body { +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { border-bottom-color: #faebcc; } .panel-danger { @@ -5028,12 +5826,42 @@ a.list-group-item-danger.active:focus { background-color: #f2dede; border-color: #ebccd1; } -.panel-danger > .panel-heading + .panel-collapse .panel-body { +.panel-danger > .panel-heading + .panel-collapse > .panel-body { border-top-color: #ebccd1; } -.panel-danger > .panel-footer + .panel-collapse .panel-body { +.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; @@ -5092,25 +5920,29 @@ button.close { left: 0; z-index: 1050; display: none; - overflow: auto; - overflow-y: scroll; + overflow: hidden; -webkit-overflow-scrolling: touch; outline: 0; } .modal.fade .modal-dialog { -webkit-transition: -webkit-transform .3s ease-out; - -moz-transition: -moz-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; @@ -5119,11 +5951,12 @@ button.close { .modal-content { position: relative; background-color: #fff; - background-clip: padding-box; + -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: none; + outline: 0; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); box-shadow: 0 3px 9px rgba(0, 0, 0, .5); } @@ -5158,11 +5991,10 @@ button.close { } .modal-body { position: relative; - padding: 20px; + padding: 15px; } .modal-footer { - padding: 19px 20px 20px; - margin-top: 15px; + padding: 15px; text-align: right; border-top: 1px solid #e5e5e5; } @@ -5176,6 +6008,13 @@ button.close { .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; @@ -5196,13 +6035,27 @@ button.close { } .tooltip { position: absolute; - z-index: 1030; + z-index: 1070; display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; - line-height: 1.4; - visibility: visible; + 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); @@ -5229,7 +6082,6 @@ button.close { padding: 3px 8px; color: #fff; text-align: center; - text-decoration: none; background-color: #000; border-radius: 4px; } @@ -5248,14 +6100,16 @@ button.close { border-top-color: #000; } .tooltip.top-left .tooltip-arrow { + right: 5px; bottom: 0; - left: 5px; + margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.top-right .tooltip-arrow { - right: 5px; bottom: 0; + left: 5px; + margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } @@ -5282,13 +6136,15 @@ button.close { } .tooltip.bottom-left .tooltip-arrow { top: 0; - left: 5px; + right: 5px; + margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } .tooltip.bottom-right .tooltip-arrow { top: 0; - right: 5px; + left: 5px; + margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } @@ -5296,19 +6152,35 @@ button.close { position: absolute; top: 0; left: 0; - z-index: 1010; + 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; - background-clip: padding-box; + -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; @@ -5326,8 +6198,6 @@ button.close { padding: 8px 14px; margin: 0; font-size: 14px; - font-weight: normal; - line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; @@ -5423,12 +6293,44 @@ button.close { 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 { @@ -5473,7 +6375,9 @@ button.close { opacity: .5; } .carousel-control.left { - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%)); + 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; @@ -5481,7 +6385,9 @@ button.close { .carousel-control.right { right: 0; left: auto; - background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%)); + 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; @@ -5491,7 +6397,7 @@ button.close { color: #fff; text-decoration: none; filter: alpha(opacity=90); - outline: none; + outline: 0; opacity: .9; } .carousel-control .icon-prev, @@ -5502,22 +6408,24 @@ button.close { 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; - margin-top: -10px; - margin-left: -10px; font-family: serif; + line-height: 1; } .carousel-control .icon-prev:before { content: '\2039'; @@ -5577,9 +6485,16 @@ button.close { width: 30px; height: 30px; margin-top: -15px; - margin-left: -15px; font-size: 30px; } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } .carousel-caption { right: 20%; left: 20%; @@ -5591,6 +6506,8 @@ button.close { } .clearfix:before, .clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, .container:before, .container:after, .container-fluid:before, @@ -5621,6 +6538,7 @@ button.close { content: " "; } .clearfix:after, +.dl-horizontal dd:after, .container:after, .container-fluid:after, .row:after, @@ -5665,7 +6583,6 @@ button.close { } .hidden { display: none !important; - visibility: hidden !important; } .affix { position: fixed; @@ -5679,12 +6596,26 @@ button.close { .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; + display: table !important; } tr.visible-xs { display: table-row !important; @@ -5694,12 +6625,27 @@ button.close { 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; + display: table !important; } tr.visible-sm { display: table-row !important; @@ -5709,12 +6655,27 @@ button.close { 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; + display: table !important; } tr.visible-md { display: table-row !important; @@ -5724,12 +6685,27 @@ button.close { 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; + display: table !important; } tr.visible-lg { display: table-row !important; @@ -5739,6 +6715,21 @@ button.close { 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; @@ -5767,7 +6758,7 @@ button.close { display: block !important; } table.visible-print { - display: table; + display: table !important; } tr.visible-print { display: table-row !important; @@ -5777,6 +6768,30 @@ button.close { 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; diff --git a/html/css/bootstrap.min.css b/html/css/bootstrap.min.css index bea7bbd4c..d65c66b1b 100644 --- a/html/css/bootstrap.min.css +++ b/html/css/bootstrap.min.css @@ -1,7 +1,5 @@ /*! - * Bootstrap v3.1.1 (http://getbootstrap.com) - * Copyright 2011-2014 Twitter, Inc. + * Bootstrap v3.3.5 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,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:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@media print{*{text-shadow:none!important;color:#000!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*{-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:62.5%;-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:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}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:400;line-height:1;color:#999}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:200;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-muted{color:#999}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}.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:#999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}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;white-space:nowrap;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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:0}.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{max-width:100%;background-color:transparent}th{text-align:left}.table{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-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.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.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.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.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.danger:hover>th{background-color:#ebcccc}@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;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=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-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[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date]{line-height:34px}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px}.radio label,.checkbox label{display:inline;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.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}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:34px;height:34px;line-height:34px;text-align:center}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{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;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{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;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{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;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.form-control-static{margin-bottom: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 .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;padding-left:0;vertical-align:middle}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{float:none;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-control-static{padding-top:7px}@media (min-width:768px){.form-horizontal .control-label{text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#428bca;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.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:#2a6496;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:#999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;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%;padding-left:0;padding-right:0}.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;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@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.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:"\2a"}.glyphicon-plus:before{content:"\2b"}.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"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#fff;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);background-clip:padding-box}.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:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;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: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=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{max-height:340px;overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;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-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.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);margin-top:8px;margin-bottom:8px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .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;padding-left:0;vertical-align:middle}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{float:none;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.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:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.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;line-height:1.42857143;text-decoration:none;color:#428bca;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;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:2;color:#fff;background-color:#428bca;border-color:#428bca;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#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:#999;background-color:#fff;cursor:not-allowed}.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}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:gray}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.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:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#999;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding: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}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-left:auto;margin-right:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.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{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.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:#428bca;-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;transition:width .6s ease}.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: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-size:40px 40px}.progress.active .progress-bar{-webkit-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: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: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: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: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,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active,a.list-group-item.active:hover,a.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading,a.list-group-item.active:hover .list-group-item-heading,a.list-group-item.active:focus .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text,a.list-group-item.active:hover .list-group-item-text,a.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.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-right-radius:3px;border-top-left-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{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{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child 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 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{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px;overflow:hidden}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.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-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.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-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-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-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-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.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;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@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:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;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{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;right: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;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;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{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5) 0),color-stop(rgba(0,0,0,.0001) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001) 0),color-stop(rgba(0,0,0,.5) 100%));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;margin-left:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;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:-15px;margin-left:-15px;font-size:30px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix: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-footer:before,.modal-footer:after{content:" ";display:table}.clearfix: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-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}@media print{.hidden-print{display:none!important}} + *//*! 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:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[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:14.33px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#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,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#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,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#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,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#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,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#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,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#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-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-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-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:3;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:2;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{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{min-height:16.43px;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);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:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.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,.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,.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}} \ No newline at end of file diff --git a/html/css/styles.css b/html/css/styles.css index d68b1fa1f..46abbc37f 100644 --- a/html/css/styles.css +++ b/html/css/styles.css @@ -683,7 +683,6 @@ table.simple { padding: 10px; } -table { border-collapse: collapse; margin: 0px; background-color:#ffffff } form { margin: 0px; padding: 0px; } hr { border: 0px; height: 1px; background-color: #ccc; color: #ccc; } p { margin: 0px; padding: 0px; } @@ -1664,7 +1663,6 @@ tr.search:nth-child(odd) { .gridster li { font-size: 1em; - font-weight: bold; text-align: center; line-height: 100%; } @@ -1763,3 +1761,7 @@ tr.search:nth-child(odd) { .edit-storage-input { width: 100px; } + +label { + font-weight: normal; +} \ No newline at end of file diff --git a/html/fonts/glyphicons-halflings-regular.eot b/html/fonts/glyphicons-halflings-regular.eot index 4a4ca865d..b93a4953f 100644 Binary files a/html/fonts/glyphicons-halflings-regular.eot and b/html/fonts/glyphicons-halflings-regular.eot differ diff --git a/html/fonts/glyphicons-halflings-regular.svg b/html/fonts/glyphicons-halflings-regular.svg index e3e2dc739..94fb5490a 100644 --- a/html/fonts/glyphicons-halflings-regular.svg +++ b/html/fonts/glyphicons-halflings-regular.svg @@ -6,224 +6,283 @@ - - - + + - - + + - - - - - - - - - + + + + + + + + + + - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/html/fonts/glyphicons-halflings-regular.ttf b/html/fonts/glyphicons-halflings-regular.ttf index 67fa00bf8..1413fc609 100644 Binary files a/html/fonts/glyphicons-halflings-regular.ttf and b/html/fonts/glyphicons-halflings-regular.ttf differ diff --git a/html/fonts/glyphicons-halflings-regular.woff b/html/fonts/glyphicons-halflings-regular.woff index 8c54182aa..9e612858f 100644 Binary files a/html/fonts/glyphicons-halflings-regular.woff and b/html/fonts/glyphicons-halflings-regular.woff differ diff --git a/html/fonts/glyphicons-halflings-regular.woff2 b/html/fonts/glyphicons-halflings-regular.woff2 new file mode 100644 index 000000000..64539b54c Binary files /dev/null and b/html/fonts/glyphicons-halflings-regular.woff2 differ diff --git a/html/graph.php b/html/graph.php index f3cf51fd9..537c5e999 100644 --- a/html/graph.php +++ b/html/graph.php @@ -58,8 +58,5 @@ $end = utime(); $run = ($end - $start); -if ($debug) { - echo '
Runtime '.$run.' secs'; - - echo ('
MySQL: Cell '.($db_stats['fetchcell'] + 0).'/'.round(($db_stats['fetchcell_sec'] + 0), 3).'s'.' Row '.($db_stats['fetchrow'] + 0).'/'.round(($db_stats['fetchrow_sec'] + 0), 3).'s'.' Rows '.($db_stats['fetchrows'] + 0).'/'.round(($db_stats['fetchrows_sec'] + 0), 3).'s'.' Column '.($db_stats['fetchcol'] + 0).'/'.round(($db_stats['fetchcol_sec'] + 0), 3).'s'); -} +d_echo('
Runtime '.$run.' secs'); +d_echo('
MySQL: Cell '.($db_stats['fetchcell'] + 0).'/'.round(($db_stats['fetchcell_sec'] + 0), 3).'s'.' Row '.($db_stats['fetchrow'] + 0).'/'.round(($db_stats['fetchrow_sec'] + 0), 3).'s'.' Rows '.($db_stats['fetchrows'] + 0).'/'.round(($db_stats['fetchrows_sec'] + 0), 3).'s'.' Column '.($db_stats['fetchcol'] + 0).'/'.round(($db_stats['fetchcol_sec'] + 0), 3).'s'); diff --git a/html/images/icons/appliance.png b/html/images/icons/appliance.png new file mode 100644 index 000000000..851950db7 Binary files /dev/null and b/html/images/icons/appliance.png differ diff --git a/html/images/os/arch.png b/html/images/os/arch.png new file mode 100644 index 000000000..f2dfde00a Binary files /dev/null and b/html/images/os/arch.png differ diff --git a/html/images/os/arch.svg b/html/images/os/arch.svg new file mode 100644 index 000000000..c4eb2e9be --- /dev/null +++ b/html/images/os/arch.svg @@ -0,0 +1,105 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/images/os/edgeos.png b/html/images/os/edgeos.png index ae3f499e6..41e24ea41 100644 Binary files a/html/images/os/edgeos.png and b/html/images/os/edgeos.png differ diff --git a/html/images/os/fortios.png b/html/images/os/fortios.png new file mode 100644 index 000000000..3c4252d05 Binary files /dev/null and b/html/images/os/fortios.png differ diff --git a/html/images/os/riverbed.png b/html/images/os/riverbed.png new file mode 100644 index 000000000..51804d52b Binary files /dev/null and b/html/images/os/riverbed.png differ diff --git a/html/includes/api_functions.inc.php b/html/includes/api_functions.inc.php index 3c2c7fab1..1761cabf2 100644 --- a/html/includes/api_functions.inc.php +++ b/html/includes/api_functions.inc.php @@ -155,6 +155,9 @@ function list_devices() { $app = \Slim\Slim::getInstance(); $order = $_GET['order']; $type = $_GET['type']; + $query = mres($_GET['query']); + $param = array(); + $join = ''; if (empty($order)) { $order = 'hostname'; } @@ -166,28 +169,46 @@ function list_devices() { if ($type == 'all' || empty($type)) { $sql = '1'; } - else if ($type == 'ignored') { + elseif ($type == 'ignored') { $sql = "ignore='1' AND disabled='0'"; } - else if ($type == 'up') { + elseif ($type == 'up') { $sql = "status='1' AND ignore='0' AND disabled='0'"; } - else if ($type == 'down') { + elseif ($type == 'down') { $sql = "status='0' AND ignore='0' AND disabled='0'"; } - else if ($type == 'disabled') { + elseif ($type == 'disabled') { $sql = "disabled='1'"; } + elseif ($type == 'mac') { + $join = " LEFT JOIN `ports` ON `devices`.`device_id`=`ports`.`device_id` LEFT JOIN `ipv4_mac` ON `ports`.`port_id`=`ipv4_mac`.`port_id` "; + $sql = "`ipv4_mac`.`mac_address`=?"; + $param[] = $query; + } + elseif ($type == 'ipv4') { + $join = " LEFT JOIN `ports` ON `devices`.`device_id`=`ports`.`device_id` LEFT JOIN `ipv4_addresses` ON `ports`.`port_id`=`ipv4_addresses`.`port_id` "; + $sql = "`ipv4_addresses`.`ipv4_address`=?"; + $param[] = $query; + } + elseif ($type == 'ipv6') { + $join = " LEFT JOIN `ports` ON `devices`.`device_id`=`ports`.`device_id` LEFT JOIN `ipv6_addresses` ON `ports`.`port_id`=`ipv6_addresses`.`port_id` "; + $sql = "`ipv6_addresses`.`ipv6_address`=? OR `ipv6_addresses`.`ipv6_compressed`=?"; + $param = array($query,$query); + } else { $sql = '1'; } $devices = array(); - foreach (dbFetchRows("SELECT * FROM `devices` WHERE $sql ORDER by $order") as $device) { + foreach (dbFetchRows("SELECT * FROM `devices` $join WHERE $sql ORDER by $order", $param) as $device) { $devices[] = $device; } + $count = count($devices); + $output = array( 'status' => 'ok', + 'count' => $count, 'devices' => $devices, ); $app->response->headers->set('Content-Type', 'application/json'); @@ -211,7 +232,7 @@ function add_device() { $message = 'No information has been provided to add this new device'; } - else if (empty($data['hostname'])) { + elseif (empty($data['hostname'])) { $message = 'Missing the device hostname'; } @@ -227,7 +248,7 @@ function add_device() { $snmpver = mres($data['version']); } - else if ($data['version'] == 'v3') { + elseif ($data['version'] == 'v3') { $v3 = array( 'authlevel' => mres($data['authlevel']), 'authname' => mres($data['authname']), @@ -581,8 +602,8 @@ function list_alerts() { global $config; $app = \Slim\Slim::getInstance(); $router = $app->router()->getCurrentRoute()->getParams(); - if (isset($_POST['state'])) { - $param = array(mres($_POST['state'])); + if (isset($_GET['state'])) { + $param = array(mres($_GET['state'])); } else { $param = array('1'); @@ -625,7 +646,7 @@ function add_edit_rule() { if (empty($device_id) && !isset($rule_id)) { $message = 'Missing the device id or global device id (-1)'; } - else if ($device_id == 0) { + elseif ($device_id == 0) { $device_id = '-1'; } @@ -672,8 +693,15 @@ function add_edit_rule() { ); $extra_json = json_encode($extra); - if (dbFetchCell('SELECT `name` FROM `alert_rules` WHERE `name`=?', array($name)) == $name) { - $message = 'Name has already been used'; + if(!isset($rule_id)) { + if (dbFetchCell('SELECT `name` FROM `alert_rules` WHERE `name`=?', array($name)) == $name) { + $message = 'Addition failed : Name has already been used'; + } + } + else { + if(dbFetchCell("SELECT name FROM alert_rules WHERE name=? AND id !=? ", array($name, $rule_id)) == $name) { + $message = 'Edition failed : Name has already been used'; + } } if (empty($message)) { @@ -687,7 +715,7 @@ function add_edit_rule() { $message = 'Failed to update existing alert rule'; } } - else if (dbInsert(array('name' => $name, 'device_id' => $device_id, 'rule' => $rule, 'severity' => $severity, 'disabled' => $disabled, 'extra' => $extra_json), 'alert_rules')) { + elseif (dbInsert(array('name' => $name, 'device_id' => $device_id, 'rule' => $rule, 'severity' => $severity, 'disabled' => $disabled, 'extra' => $extra_json), 'alert_rules')) { $status = 'ok'; $code = 200; } @@ -774,7 +802,39 @@ function ack_alert() { $app->response->setStatus($code); $app->response->headers->set('Content-Type', 'application/json'); echo _json_encode($output); +} +function unmute_alert() { + global $config; + $app = \Slim\Slim::getInstance(); + $router = $app->router()->getCurrentRoute()->getParams(); + $alert_id = mres($router['id']); + $status = 'error'; + $err_msg = ''; + $message = ''; + $code = 500; + if (is_numeric($alert_id)) { + $status = 'ok'; + $code = 200; + if (dbUpdate(array('state' => 1), 'alerts', '`id` = ? LIMIT 1', array($alert_id))) { + $message = 'Alert has been unmuted'; + } + else { + $message = 'No alert by that ID'; + } + } + else { + $err_msg = 'Invalid alert has been provided'; + } + + $output = array( + 'status' => $status, + 'err-msg' => $err_msg, + 'message' => $message, + ); + $app->response->setStatus($code); + $app->response->headers->set('Content-Type', 'application/json'); + echo _json_encode($output); } @@ -835,7 +895,7 @@ function list_oxidized() { $app->response->headers->set('Content-Type', 'application/json'); $devices = array(); - foreach (dbFetchRows("SELECT hostname,os FROM `devices` WHERE `status`='1'") as $device) { + foreach (dbFetchRows("SELECT hostname,os FROM `devices` LEFT JOIN devices_attribs AS `DA` ON devices.device_id = DA.device_id AND `DA`.attrib_type='override_Oxidized_disable' WHERE `status`='1' AND (DA.attrib_value = 'false' OR DA.attrib_value IS NULL)") as $device) { $devices[] = $device; } diff --git a/html/includes/application/proxmox.inc.php b/html/includes/application/proxmox.inc.php new file mode 100644 index 000000000..bd775247b --- /dev/null +++ b/html/includes/application/proxmox.inc.php @@ -0,0 +1,50 @@ + + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; version 2 dated June, + * 1991. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * See http://www.gnu.org/licenses/gpl.txt for the full license + */ + +/** + * Fetch all VM's in a Proxmox Cluster + * @param string $c Clustername + * @return array An array with all the VM's on this cluster + */ +function proxmox_cluster_vms($c) { + return dbFetchRows("SELECT * FROM proxmox WHERE cluster = ? ORDER BY vmid", array($c)); +} + +/** + * Fetch all VM's on a Proxmox node + * @param integer $n device_id + * @return array An array with all the VM's on this node + */ +function proxmox_node_vms($n) { + return dbFetchRows("SELECT * FROM proxmox WHERE device_id = ? ORDER BY vmid", array($n)); +} + +/** + * Fetch all info about a Proxmox VM + * @param integer $vmid Proxmox VM ID + * @param string $c Clustername + * @return array An array with all info of this VM on this cluster, including ports + */ +function proxmox_vm_info($vmid, $c) { + $vm = dbFetchRow("SELECT pm.*, d.hostname AS host, d.device_id FROM proxmox pm, devices d WHERE pm.device_id = d.device_id AND pm.vmid = ? AND pm.cluster = ?", array($vmid, $c)); + $appid = dbFetchRow("SELECT app_id FROM applications WHERE device_id = ? AND app_type = ?", array($vm['device_id'], 'proxmox')); + + $vm['ports'] = dbFetchRows("SELECT * FROM proxmox_ports WHERE vm_id = ?", array($vm['id'])); + $vm['app_id'] = $appid['app_id']; + return $vm; +} diff --git a/html/includes/authentication/mysql.inc.php b/html/includes/authentication/mysql.inc.php index 84e119cea..c16e716f8 100644 --- a/html/includes/authentication/mysql.inc.php +++ b/html/includes/authentication/mysql.inc.php @@ -3,7 +3,7 @@ function authenticate($username, $password) { $encrypted_old = md5($password); - $row = dbFetchRow('SELECT username,password FROM `users` WHERE `username`= ?', array($username)); + $row = dbFetchRow('SELECT username,password FROM `users` WHERE `username`= ?', array($username), true); if ($row['username'] && $row['username'] == $username) { // Migrate from old, unhashed password if ($row['password'] == $encrypted_old) { @@ -36,7 +36,7 @@ function authenticate($username, $password) { function reauthenticate($sess_id, $token) { list($uname,$hash) = explode('|', $token); - $session = dbFetchRow("SELECT * FROM `session` WHERE `session_username` = '$uname' AND session_value='$sess_id'"); + $session = dbFetchRow("SELECT * FROM `session` WHERE `session_username` = '$uname' AND session_value='$sess_id'", array(), true); $hasher = new PasswordHash(8, false); if ($hasher->CheckPassword($uname.$session['session_token'], $hash)) { $_SESSION['username'] = $uname; @@ -59,7 +59,7 @@ function passwordscanchange($username='') { return 1; } else { - return dbFetchCell('SELECT can_modify_passwd FROM users WHERE username = ?', array($username)); + return dbFetchCell('SELECT can_modify_passwd FROM users WHERE username = ?', array($username), true); } }//end passwordscanchange() @@ -114,20 +114,20 @@ function adduser($username, $password, $level, $email='', $realname='', $can_mod function user_exists($username) { - $return = @dbFetchCell('SELECT COUNT(*) FROM users WHERE username = ?', array($username)); + $return = @dbFetchCell('SELECT COUNT(*) FROM users WHERE username = ?', array($username), true); return $return; }//end user_exists() function get_userlevel($username) { - return dbFetchCell('SELECT `level` FROM `users` WHERE `username` = ?', array($username)); + return dbFetchCell('SELECT `level` FROM `users` WHERE `username` = ?', array($username), true); }//end get_userlevel() function get_userid($username) { - return dbFetchCell('SELECT `user_id` FROM `users` WHERE `username` = ?', array($username)); + return dbFetchCell('SELECT `user_id` FROM `users` WHERE `username` = ?', array($username), true); }//end get_userid() @@ -158,7 +158,7 @@ function can_update_users() { function get_user($user_id) { - return dbFetchRow('SELECT * FROM `users` WHERE `user_id` = ?', array($user_id)); + return dbFetchRow('SELECT * FROM `users` WHERE `user_id` = ?', array($user_id), true); }//end get_user() diff --git a/html/includes/authentication/twofactor.lib.php b/html/includes/authentication/twofactor.lib.php index 70cfed8ac..af175a5ec 100644 --- a/html/includes/authentication/twofactor.lib.php +++ b/html/includes/authentication/twofactor.lib.php @@ -168,24 +168,31 @@ function twofactor_form($form=true){ $ret = ""; if( $form ) { $ret .= ' -
'; +
+
+
+
+

+
+ +
+

+
+
+
+ '; } $ret .= '
-
-

Please Enter TwoFactor Token:

+
+
- -
- -
-
-
-
- +
+
+
'; $ret .= ''; if( $form ) { diff --git a/html/includes/common/availability-map.inc.php b/html/includes/common/availability-map.inc.php index 4073abd54..2fc72a090 100644 --- a/html/includes/common/availability-map.inc.php +++ b/html/includes/common/availability-map.inc.php @@ -9,45 +9,69 @@ * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ -require_once 'includes/object-cache.inc.php'; -$sql = 'SELECT `D`.`hostname`,`D`.`device_id`,`D`.`status`,`D`.`uptime` FROM `devices` AS `D`'; +if (defined('show_settings')) { + + $common_output[] = ' + +
+ +
+ +
+
+
+
+ +
+
+ + '; -if (is_normal_user() === true) { - $sql.= ' , `devices_perms` AS P WHERE D.`device_id` = P.`device_id` AND P.`user_id` = ? AND'; - $param = array( - $_SESSION['user_id'] - ); } else { - $sql.= ' WHERE'; -} -$sql.= " `D`.`ignore` = '0' AND `D`.`disabled` = '0' ORDER BY `hostname`"; -$temp_output = array(); -$c = '0'; + require_once 'includes/object-cache.inc.php'; + $tile_width = $widget_settings['tile_width']?:$config['availability-map-width']; -foreach(dbFetchRows($sql, $param) as $device) { - if ($device['status'] == '1') { - $btn_type = 'btn-success'; - if ($device['uptime'] < $config['uptime_warning']) { - $btn_type = 'btn-warning'; - $c++; - } + $sql = 'SELECT `D`.`hostname`,`D`.`device_id`,`D`.`status`,`D`.`uptime` FROM `devices` AS `D`'; + + if (is_normal_user() === true) { + $sql.= ' , `devices_perms` AS P WHERE D.`device_id` = P.`device_id` AND P.`user_id` = ? AND'; + $param = array( + $_SESSION['user_id'] + ); } else { - $btn_type = 'btn-danger'; + $sql.= ' WHERE'; } - $temp_output[] = ''; -} + $sql.= " `D`.`ignore` = '0' AND `D`.`disabled` = '0' ORDER BY `hostname`"; + $temp_output = array(); + $c = '0'; -$temp_rows = count($temp_output); -$temp_output[] = '
'; -$temp_header = array( - '
' . $devices['up'] . ' '. $c .' ' . $devices['down'] . '

' -); -$common_output = array_merge($temp_header, $temp_output); + foreach(dbFetchRows($sql, $param) as $device) { + if ($device['status'] == '1') { + $btn_type = 'btn-success'; + if ($device['uptime'] < $config['uptime_warning']) { + $btn_type = 'btn-warning'; + $c++; + } + } + else { + $btn_type = 'btn-danger'; + } + + $temp_output[] = ''; + } + + $temp_rows = count($temp_output); + $temp_output[] = '
'; + $temp_header = array( + '
' . $devices['up'] . ' '. $c .' ' . $devices['down'] . '

' + ); + $common_output = array_merge($temp_header, $temp_output); +} diff --git a/html/includes/common/device-summary-horiz.inc.php b/html/includes/common/device-summary-horiz.inc.php index 439234af4..75d110a37 100644 --- a/html/includes/common/device-summary-horiz.inc.php +++ b/html/includes/common/device-summary-horiz.inc.php @@ -7,11 +7,12 @@ $temp_output = '   - Total - Up - Down - Ignored - Disabled + Total + Up + Down + Ignored + Disabled + '.($config['summary_errors'] ? 'Errored' : '').' @@ -22,6 +23,7 @@ $temp_output = ' '.$devices['down'].' '.$devices['ignored'].' '.$devices['disabled'].' + '.($config['summary_errors'] ? '-' : '').' Ports @@ -30,6 +32,7 @@ $temp_output = ' '.$ports['down'].' '.$ports['ignored'].' '.$ports['shutdown'].' + '.($config['summary_errors'] ? ' '.$ports['errored'].'' : '').' '; if ($config['show_services']) { @@ -41,6 +44,7 @@ $temp_output .= ' '.$services['down'].' '.$services['ignored'].' '.$services['disabled'].' + '.($config['summary_errors'] ? '-' : '').' '; } $temp_output .= ' diff --git a/html/includes/common/device-summary-vert.inc.php b/html/includes/common/device-summary-vert.inc.php index e5d5706fe..647a03630 100644 --- a/html/includes/common/device-summary-vert.inc.php +++ b/html/includes/common/device-summary-vert.inc.php @@ -83,10 +83,25 @@ if ($config['show_services']) { } +if ($config['summary_errors']) { + $temp_output .= ' + + + Errored + - + '.$ports['errored'].' +'; + if ($config['show_services']) { + $temp_output .= ' + - +'; + } +} + $temp_output .= ' - Total + Total '. $devices['count'] .' '. $ports['count'] .' '; diff --git a/html/includes/common/eventlog.inc.php b/html/includes/common/eventlog.inc.php index 7ce1590c0..fcf5e955e 100644 --- a/html/includes/common/eventlog.inc.php +++ b/html/includes/common/eventlog.inc.php @@ -1,17 +1,18 @@ - - - Datetime - Hostname - Type - Message - - - - +
+ + + + + + + + + +
DatetimeHostnameTypeMessage
+
+'; +} +else { + $widget_settings['title'] = ""; + $type = explode('_',$widget_settings['graph_type'],2); + $type = array_shift($type); + $widget_settings['graph_'.$type] = json_decode($widget_settings['graph_'.$type],true)?:$widget_settings['graph_'.$type]; + if ($type == 'device') { + $widget_settings['title'] = $widget_settings['graph_device']['name']." / ".$widget_settings['graph_type']; + $param = 'device='.$widget_settings['graph_device']['device_id']; + } + elseif ($type == 'application') { + $param = 'id='.$widget_settings['graph_'.$type]['app_id']; + } + elseif ($type == 'munin') { + $param = 'device='.$widget_settings['graph_'.$type]['device_id'].'&plugin='.$widget_settings['graph_'.$type]['name']; + } + elseif ($type == 'transit' || $type == 'peering' || $type == 'core') { + $type_where = ' ('; + if (is_array($config[$type.'_descr']) === false) { + $config[$type.'_descr'] = array($config[$type.'_descr']); + } + foreach ($config[$type.'_descr'] as $additional_type) { + if (!empty($additional_type)) { + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $additional_type; + } + } + $type_where .= " $or `port_descr_type` = ?"; + $or = 'OR'; + $type_param[] = $type; + $type_where .= ') '; + foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE $type_where ORDER BY ifAlias", $type_param) as $port) { + $tmp[] = $port['port_id']; + } + $param = 'id='.implode(',',$tmp); + $widget_settings['graph_type']= 'multiport_bits_separate'; + $widget_settings['title'] = 'Overall '.ucfirst($type).' Bits ('.$widget_settings['graph_range'].')'; + } + elseif ($type == 'custom') { + foreach (dbFetchRows("SELECT port_id FROM `ports` WHERE `port_descr_type` = ? ORDER BY ifAlias", array($widget_settings['graph_custom'])) as $port) { + $tmp[] = $port['port_id']; + } + $param = 'id='.implode(',',$tmp); + $widget_settings['graph_type']= 'multiport_bits_separate'; + $widget_settings['title'] = 'Overall '.ucfirst(htmlspecialchars($widget_settings['graph_custom'])).' Bits ('.$widget_settings['graph_range'].')'; + } + else { + $param = 'id='.$widget_settings['graph_'.$type][$type.'_id']; + } + if (empty($widget_settings['title'])) { + $widget_settings['title'] = $widget_settings['graph_'.$type]['hostname']." / ".$widget_settings['graph_'.$type]['name']." / ".$widget_settings['graph_type']; + } + $common_output[] = ''; +} diff --git a/html/includes/common/syslog.inc.php b/html/includes/common/syslog.inc.php index d77936133..87eb4c04d 100644 --- a/html/includes/common/syslog.inc.php +++ b/html/includes/common/syslog.inc.php @@ -1,28 +1,31 @@ -
-
-
-
- Syslog entries -
- '; - -foreach (dbFetchRows($sql) as $entry) { - $entry = array_merge($entry, device_by_id_cache($entry['device_id'])); - include 'includes/print-syslog.inc.php'; -} - -$syslog_output .= ' -
-
-
-
+$common_output[] = ' +
+ + + + + + + + + +
DatetimeHostnameProgramMessage
-'; + +'; diff --git a/html/includes/common/top-devices.inc.php b/html/includes/common/top-devices.inc.php new file mode 100644 index 000000000..de1fdc27c --- /dev/null +++ b/html/includes/common/top-devices.inc.php @@ -0,0 +1,124 @@ + + * + * This widget is based on legacy frontpage module created by Paul Gear. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Top devices by traffic + * @author Sergiusz Paprzycki + * @copyright 2015 Sergiusz Paprzycki + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +if( defined('show_settings') || empty($widget_settings) ) { + $common_output[] = ' +
+
+
+ +
+
+ +
+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ '; +} +else { + $interval = $widget_settings['time_interval']; + (integer) $interval_seconds = ($interval * 60); + (integer) $device_count = $widget_settings['device_count']; + $common_output[] = ' +

Top '.$device_count.' devices (last '.$interval.' minutes)

+ '; + $params = array('user' => $_SESSION['user_id'], 'interval' => array($interval_seconds), 'count' => array($device_count)); + if (is_admin() || is_read()) { + $query = ' + SELECT *, sum(p.ifInOctets_rate + p.ifOutOctets_rate) as total + FROM ports as p, devices as d + WHERE d.device_id = p.device_id + AND unix_timestamp() - p.poll_time < :interval + AND ( p.ifInOctets_rate > 0 + OR p.ifOutOctets_rate > 0 ) + GROUP BY d.device_id + ORDER BY total desc + LIMIT :count + '; + } + else { + $query = ' + SELECT *, sum(p.ifInOctets_rate + p.ifOutOctets_rate) as total + FROM ports as p, devices as d, `devices_perms` AS `P` + WHERE `P`.`user_id` = :user AND `P`.`device_id` = `d`.`device_id` AND + d.device_id = p.device_id + AND unix_timestamp() - p.poll_time < :interval + AND ( p.ifInOctets_rate > 0 + OR p.ifOutOctets_rate > 0 ) + GROUP BY d.device_id + ORDER BY total desc + LIMIT :count + '; + } + $common_output[] = ' +
+ + + + + + + + + '; + + foreach (dbFetchRows($query, $params) as $result) { + $common_output[] = ' + + + + + '; + } + $common_output[] = ' + +
DeviceTotal traffic
'.generate_device_link($result, shorthost($result['hostname'])).''.generate_device_link( + $result, + generate_minigraph_image( + $result, $config['time']['day'], + $config['time']['now'], + 'device_bits', + 'no', 150, 21), + array(), 0, 0, 0).' +
+
+ '; +} diff --git a/html/includes/common/top-interfaces.inc.php b/html/includes/common/top-interfaces.inc.php new file mode 100644 index 000000000..cb9e16720 --- /dev/null +++ b/html/includes/common/top-interfaces.inc.php @@ -0,0 +1,160 @@ + + * + * This widget is based on legacy frontpage module created by Paul Gear. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Top interfaces by traffic + * @author Sergiusz Paprzycki + * @copyright 2015 Sergiusz Paprzycki + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +if( defined('show_settings') || empty($widget_settings) ) { + $common_output[] = ' +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+ + + '; +} +else { + $interval = $widget_settings['time_interval']; + (integer) $lastpoll_seconds = ($interval * 60); + (integer) $interface_count = $widget_settings['interface_count']; + $params = array('user' => $_SESSION['user_id'], 'lastpoll' => array($lastpoll_seconds), 'count' => array($interface_count), 'filter' => ($widget_settings['interface_filter']?:(int)1)); + if (is_admin() || is_read()) { + $query = ' + SELECT *, p.ifInOctets_rate + p.ifOutOctets_rate as total + FROM ports as p + INNER JOIN devices ON p.device_id = devices.device_id + AND unix_timestamp() - p.poll_time <= :lastpoll + AND ( p.ifType = :filter || 1 = :filter ) + AND ( p.ifInOctets_rate > 0 || p.ifOutOctets_rate > 0 ) + ORDER BY total DESC + LIMIT :count + '; + } + else { + $query = ' + SELECT ports.*, devices.hostname, ports.ifInOctets_rate + ports.ifOutOctets_rate as total + FROM ports + INNER JOIN devices ON ports.device_id = devices.device_id + LEFT JOIN ports_perms ON ports.port_id = ports_perms.port_id + LEFT JOIN devices_perms ON devices.device_id = devices_perms.device_id + WHERE ( ports_perms.user_id = :user || devices_perms.user_id = :user ) + AND unix_timestamp() - ports.poll_time <= :lastpoll + AND ( ports.ifType = :filter || 1 = :filter ) + AND ( ports.ifInOctets_rate > 0 || ports.ifOutOctets_rate > 0 ) + GROUP BY ports.port_id + ORDER BY total DESC + LIMIT :count + '; + } + $common_output[] = ' +

Top '.$interface_count.' interfaces polled within '.$interval.' minutes

+
+ + + + + + + + + + '; + + foreach (dbFetchRows($query, $params) as $result) { + $common_output[] = ' + + + + + + '; + } + $common_output[] = ' + +
DeviceInterfaceTotal traffic
'.generate_device_link($result, shorthost($result['hostname'])).''.generate_port_link($result, shorten_interface_type($result['ifName'])).''.generate_port_link($result, generate_port_thumbnail($result)).'
+
+ '; +} diff --git a/html/includes/common/worldmap.inc.php b/html/includes/common/worldmap.inc.php index 7ab55228c..bf9e6f36e 100644 --- a/html/includes/common/worldmap.inc.php +++ b/html/includes/common/worldmap.inc.php @@ -23,24 +23,93 @@ */ if ($config['map']['engine'] == 'leaflet') { - -$temp_output = ' + if (defined('show_settings') && $config['front_page'] == "pages/front/tiles.php") { + $temp_output = ' +
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+ '; + } + else { + $temp_output = '
'; - -} else { + } +} +else { $temp_output = 'Mapael engine not supported here'; } diff --git a/html/includes/forms/add-dashboard.inc.php b/html/includes/forms/add-dashboard.inc.php new file mode 100644 index 000000000..e34993a6e --- /dev/null +++ b/html/includes/forms/add-dashboard.inc.php @@ -0,0 +1,41 @@ + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Create Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_name']) && ($dash_id = dbInsert(array('dashboard_name'=>$_REQUEST['dashboard_name'],'user_id'=>$_SESSION['user_id']),'dashboards'))) { + $status = 'ok'; + $message = 'Created'; +} +else { + $status = 'error'; + $message = 'ERROR: Could not create'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, + 'dashboard_id' => $dash_id +))); + diff --git a/html/includes/forms/alert-templates.inc.php b/html/includes/forms/alert-templates.inc.php index 67182b1f2..74fda1b8c 100644 --- a/html/includes/forms/alert-templates.inc.php +++ b/html/includes/forms/alert-templates.inc.php @@ -52,7 +52,7 @@ if(!empty($name)) { elseif( $_REQUEST['template'] && is_numeric($_REQUEST['template_id']) ) { //Update template-text - if($ret = dbUpdate(array('template' => $_REQUEST['template'], 'name' => $name), "alert_templates", "id = ?", array($_REQUEST['template_id']))) { + if($ret = dbUpdate(array('template' => $_REQUEST['template'], 'name' => $name, 'title' => $_REQUEST['title'], 'title_rec' => $_REQUEST['title_rec']), "alert_templates", "id = ?", array($_REQUEST['template_id']))) { $ok = "Updated template"; } else { @@ -62,7 +62,7 @@ if(!empty($name)) { elseif( $_REQUEST['template'] ) { //Create new template - if(dbInsert(array('template' => $_REQUEST['template'], 'name' => $name), "alert_templates")) { + if(dbInsert(array('template' => $_REQUEST['template'], 'name' => $name, 'title' => $_REQUEST['title'], 'title_rec' => $_REQUEST['title_rec']), "alert_templates")) { $ok = "Alert template has been created."; } else { diff --git a/html/includes/forms/delete-dashboard.inc.php b/html/includes/forms/delete-dashboard.inc.php new file mode 100644 index 000000000..2874dec6e --- /dev/null +++ b/html/includes/forms/delete-dashboard.inc.php @@ -0,0 +1,45 @@ + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Delete Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_id'])) { + dbDelete('users_widgets','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id'])); + if (dbDelete('dashboards','user_id = ? && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { + $status = 'ok'; + $message = 'Deleted dashboard'; + } + else { + $message = 'ERROR: Could not delete dashboard '.$_REQUEST['dashboard_id']; + } +} +else { + $message = 'ERROR: Not enough params'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, +))); + diff --git a/html/includes/forms/edit-dashboard.inc.php b/html/includes/forms/edit-dashboard.inc.php new file mode 100644 index 000000000..fe9d9c527 --- /dev/null +++ b/html/includes/forms/edit-dashboard.inc.php @@ -0,0 +1,44 @@ + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Edit Dashboards + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Dashboards + */ + +$status = 'error'; +$message = 'unknown error'; +if (isset($_REQUEST['dashboard_id']) && isset($_REQUEST['dashboard_name']) && isset($_REQUEST['access'])) { + if(dbUpdate(array('dashboard_name'=>$_REQUEST['dashboard_name'],'access'=>$_REQUEST['access']),'dashboards','(user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$_REQUEST['dashboard_id']))) { + $status = 'ok'; + $message = 'Updated dashboard'; + } + else { + $message = 'ERROR: Could not update dashboard '.$_REQUEST['dashboard_id']; + } +} +else { + $message = 'ERROR: Not enough params'; +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message, +))); + diff --git a/html/includes/forms/override-config.inc.php b/html/includes/forms/override-config.inc.php new file mode 100644 index 000000000..6004710dc --- /dev/null +++ b/html/includes/forms/override-config.inc.php @@ -0,0 +1,48 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. +*/ + +if (is_admin() === false) { + $response = array( + 'status' => 'error', + 'message' => 'Need to be admin', + ); + echo _json_encode($response); + exit; +} + +$device['device_id'] = mres($_POST['device_id']); +$attrib = mres($_POST['attrib']); +$state = mres($_POST['state']); +$status = 'error'; +$message = 'Error with config'; + +if (empty($device['device_id'])) { + $message = 'No device passed'; +} +else { + if ($state == true) { + set_dev_attrib($device, $attrib, $state); + } + else { + del_dev_attrib($device, $attrib); + } + $status = 'ok'; + $message = 'Config has been updated'; +} + +$response = array( + 'status' => $status, + 'message' => $message, +); +echo _json_encode($response); diff --git a/html/includes/forms/parse-alert-template.inc.php b/html/includes/forms/parse-alert-template.inc.php index 31dc3c714..2b8bb2e56 100644 --- a/html/includes/forms/parse-alert-template.inc.php +++ b/html/includes/forms/parse-alert-template.inc.php @@ -21,8 +21,10 @@ $template_id = ($_POST['template_id']); if (is_numeric($template_id) && $template_id > 0) { $template = dbFetchRow('SELECT * FROM `alert_templates` WHERE `id` = ? LIMIT 1', array($template_id)); $output = array( - 'template' => $template['template'], - 'name' => $template['name'], + 'template' => $template['template'], + 'name' => $template['name'], + 'title' => $template['title'], + 'title_rec' => $template['title_rec'], ); echo _json_encode($output); } diff --git a/html/includes/forms/test-transport.inc.php b/html/includes/forms/test-transport.inc.php index 121961ee0..05b4dcfdd 100644 --- a/html/includes/forms/test-transport.inc.php +++ b/html/includes/forms/test-transport.inc.php @@ -18,31 +18,32 @@ if (is_admin() === false) { $transport = mres($_POST['transport']); +require_once $config['install_dir'].'/includes/alerts.inc.php'; +$tmp = array(dbFetchRow('select device_id,hostname from devices order by device_id asc limit 1')); +$tmp['contacts'] = GetContacts($tmp); $obj = array( - 'contacts' => $config['alert']['default_mail'], - 'title' => 'Testing transport from ' . $config['project_name'], - 'msg' => 'This is a test alert', - 'severity' => 'critical', - 'state' => 'critical', - 'hostname' => 'testing', - 'name' => 'Testing rule', + "hostname" => $tmp[0]['hostname'], + "device_id" => $tmp[0]['device_id'], + "title" => "Testing transport from ".$config['project_name'], + "elapsed" => "11s", + "id" => "000", + "faults" => false, + "uid" => "000", + "severity" => "critical", + "rule" => "%macros.device = 1", + "name" => "Test-Rule", + "timestamp" => date("Y-m-d H:i:s"), + "contacts" => $tmp['contacts'], + "state" => "1", + "msg" => "This is a test alert", ); -unset($obj); -$obj['contacts'] = 'test'; -$obj['title'] = 'test'; -$obj['msg'] = 'test'; -$obj['severity'] = 'test'; -$obj['state'] = 'test'; -$obj['hostname'] = 'test'; -$obj['name'] = 'test'; - $status = 'error'; -if (file_exists($config['install_dir']."/includes/alerts/transport.$transport.php")) { +if (file_exists($config['install_dir']."/includes/alerts/transport.".$transport.".php")) { $opts = $config['alert']['transports'][$transport]; if ($opts) { - eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' };'); + eval('$tmp = function($obj,$opts) { global $config; '.file_get_contents($config['install_dir'].'/includes/alerts/transport.'.$transport.'.php').' return false; };'); $tmp = $tmp($obj,$opts); if ($tmp) { $status = 'ok'; diff --git a/html/includes/forms/update-config-item.inc.php b/html/includes/forms/update-config-item.inc.php index b15444d9e..4b9ffe75d 100644 --- a/html/includes/forms/update-config-item.inc.php +++ b/html/includes/forms/update-config-item.inc.php @@ -23,7 +23,7 @@ $config_type = mres($_POST['config_type']); $status = 'error'; if (!is_numeric($config_id)) { - $message = 'ERROR: No alert selected'; + $message = 'ERROR: No config item'; } else if ($action == 'update-textarea') { $extras = explode(PHP_EOL, $_POST['config_value']); diff --git a/html/includes/forms/update-dashboard-config.inc.php b/html/includes/forms/update-dashboard-config.inc.php index c2760adb5..e9bdb23db 100644 --- a/html/includes/forms/update-dashboard-config.inc.php +++ b/html/includes/forms/update-dashboard-config.inc.php @@ -6,49 +6,65 @@ $message = 'Error updating user dashboard config'; $data = json_decode($_POST['data'],true); $sub_type = mres($_POST['sub_type']); $widget_id = mres($_POST['widget_id']); +$dasboard_id = mres($_POST['dashboard_id']); if ($sub_type == 'remove' && is_numeric($widget_id)) { - if ($widget_id == 0 || dbDelete('users_widgets','`user_id`=? AND `user_widget_id`=?', array($_SESSION['user_id'],$widget_id))) { - $status = 'ok'; - $message = ''; + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + if ($widget_id == 0 || dbDelete('users_widgets','`user_widget_id`=? AND `dashboard_id`=?', array($widget_id,$dasboard_id))) { + $status = 'ok'; + $message = ''; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; } } elseif ($sub_type == 'remove-all') { - if (dbDelete('users_widgets','`user_id`=?', array($_SESSION['user_id']))) { - $status = 'ok'; - $message = ''; + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + if (dbDelete('users_widgets','`dashboard_id`=?', array($dasboard_id))) { + $status = 'ok'; + $message = ''; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; } } elseif ($sub_type == 'add' && is_numeric($widget_id)) { - $dupe_check = dbFetchCEll('SELECT `user_widget_id` FROM `users_widgets` WHERE `user_id`=? AND `widget_id`=?',array($_SESSION['user_id'],$widget_id)); - - if (is_numeric($dupe_check)) { - $message = 'This widget has already been added'; - } - else { - + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { $widget = dbFetchRow('SELECT * FROM `widgets` WHERE `widget_id`=?', array($widget_id)); if (is_array($widget)) { list($x,$y) = explode(',',$widget['base_dimensions']); - $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y),'users_widgets'); + $item_id = dbInsert(array('user_id'=>$_SESSION['user_id'],'widget_id'=>$widget_id, 'col'=>1,'row'=>1,'refresh'=>60,'title'=>$widget['widget_title'],'size_x'=>$x,'size_y'=>$y,'settings'=>'','dashboard_id'=>$dasboard_id),'users_widgets'); if (is_numeric($item_id)) { - $extra = array('widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'size_x'=>$x,'size_y'=>$y); + $extra = array('user_widget_id'=>$item_id,'widget_id'=>$item_id,'title'=>$widget['widget_title'],'widget'=>$widget['widget'],'refresh'=>60,'size_x'=>$x,'size_y'=>$y); $status = 'ok'; $message = ''; } } } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; + } } else { - $status = 'ok'; - $message = ''; - - foreach ($data as $line) { - if (is_array($line)) { - $update = array('col'=>$line['col'],'row'=>$line['row'],'size_x'=>$line['size_x'],'size_y'=>$line['size_y']); - dbUpdate($update, 'users_widgets', '`user_widget_id`=?', array($line['id'])); + if (dbFetchCell('select 1 from dashboards where (user_id = ? || access = 2) && dashboard_id = ?',array($_SESSION['user_id'],$dasboard_id)) == 1) { + $status = 'ok'; + $message = ''; + foreach ($data as $line) { + if (is_array($line)) { + $update = array('col'=>$line['col'],'row'=>$line['row'],'size_x'=>$line['size_x'],'size_y'=>$line['size_y']); + dbUpdate($update, 'users_widgets', '`user_widget_id`=? AND `dashboard_id`=?', array($line['id'],$dasboard_id)); + } } } + else { + $status = 'error'; + $message = 'ERROR: You have no write access.'; + } } $response = array( diff --git a/html/includes/forms/update-ifalias.inc.php b/html/includes/forms/update-ifalias.inc.php new file mode 100644 index 000000000..f792ec520 --- /dev/null +++ b/html/includes/forms/update-ifalias.inc.php @@ -0,0 +1,48 @@ + + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. +*/ + +$status = 'error'; + +$descr = mres($_POST['descr']); +$device_id = mres($_POST['device_id']); +$ifName = mres($_POST['ifName']); +$port_id = mres($_POST['port_id']); + +logfile($descr . ','. $device_id . ','. $ifName. ','. $port_id); + +if (!empty($ifName) && is_numeric($port_id)) { + // We have ifName and port id so update ifAlias + if (empty($descr)) { + $descr = 'repoll'; + // Set to repoll so we avoid using ifDescr on port poll + } + if (dbUpdate(array('ifAlias'=>$descr), 'ports', '`port_id`=?', array($port_id)) > 0) { + $device = device_by_id_cache($device_id); + if ($descr === 'repoll') { + del_dev_attrib($device, 'ifName:'.$ifName); + } + else { + set_dev_attrib($device, 'ifName:'.$ifName, 1); + } + $status = 'ok'; + } + else { + $status = 'na'; + } +} + +$response = array( + 'status' => $status, +); +echo _json_encode($response); diff --git a/html/includes/forms/update-notes.inc.php b/html/includes/forms/update-notes.inc.php new file mode 100644 index 000000000..4848add6b --- /dev/null +++ b/html/includes/forms/update-notes.inc.php @@ -0,0 +1,32 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +$status = 'error'; +$message = 'unknown error'; + +$device_id = mres($_POST['device_id']); +$notes = mres($_POST['notes']); + +if (isset($notes) && (dbUpdate(array('notes' => $notes), 'devices', 'device_id = ?', array($device_id)))) { + $status = 'ok'; + $message = 'Updated'; +} +else { + $status = 'error'; + $message = 'ERROR: Could not update'; +} +die(json_encode(array( + 'status' => $status, + 'message' => $message, + 'notes' => $notes, + 'device_id' => $device_id +))); diff --git a/html/includes/forms/widget-settings.inc.php b/html/includes/forms/widget-settings.inc.php new file mode 100644 index 000000000..fabe6c4aa --- /dev/null +++ b/html/includes/forms/widget-settings.inc.php @@ -0,0 +1,57 @@ + + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Store per-widget settings + * @author Daniel Preussker + * @copyright 2015 Daniel Preussker, QuxLabs UG + * @license GPL + * @package LibreNMS + * @subpackage Widgets + */ + +$status = 'error'; +$message = 'unknown error'; +$widget_id = (int) $_REQUEST['id']; + +if ($widget_id < 1) { + $status = 'error'; + $message = 'ERROR: malformed widget ID.'; +} +else { + $widget_settings = $_REQUEST['settings']; + if (!is_array($widget_settings)) { + $widget_settings = array(); + } + if (dbFetchCell('select 1 from users_widgets inner join dashboards on users_widgets.dashboard_id = dashboards.dashboard_id where user_widget_id = ? && (users_widgets.user_id = ? || dashboards.access = 2)',array($widget_id,$_SESSION['user_id'])) == 1) { + if (dbUpdate(array('settings'=>json_encode($widget_settings)),'users_widgets','user_widget_id=?',array($widget_id))) { + $status = 'ok'; + $message = 'Updated'; + } + else { + $status = 'error'; + $message = 'ERROR: Could not update'; + } + } + else { + $status = 'error'; + $message = 'ERROR: You have no write-access to this dashboard'; + } +} + +die(json_encode(array( + 'status' => $status, + 'message' => $message +))); diff --git a/html/includes/functions.inc.php b/html/includes/functions.inc.php index b1c44481b..21121d0ce 100644 --- a/html/includes/functions.inc.php +++ b/html/includes/functions.inc.php @@ -12,6 +12,35 @@ * @copyright (C) 2013 LibreNMS Group */ +/** + * Compare $t with the value of $vars[$v], if that exists + * @param string $v Name of the var to test + * @param string $t Value to compare $vars[$v] to + * @return boolean true, if values are the same, false if $vars[$v] is unset or values differ + */ +function var_eq($v, $t) { + global $vars; + if (isset($vars[$v]) && $vars[$v] == $t) { + return true; + } + + return false; +} + +/** + * Get the value of $vars[$v], if it exists + * @param string $v Name of the var to get + * @return string|boolean The value of $vars[$v] if it exists, false if it does not exist + */ +function var_get($v) { + global $vars; + if (isset($vars[$v])) { + return $vars[$v]; + } + + return false; +} + function data_uri($file, $mime) { $contents = file_get_contents($file); @@ -152,8 +181,8 @@ function get_percentage_colours($percentage) { }//end get_percentage_colours() -function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image') { - return ''; +function generate_minigraph_image($device, $start, $end, $type, $legend='no', $width=275, $height=100, $sep='&', $class='minigraph-image',$absolute_size=0) { + return ''; }//end generate_minigraph_image() @@ -193,7 +222,7 @@ function generate_device_link($device, $text=null, $vars=array(), $start=0, $end $url = generate_device_url($device, $vars); // beginning of overlib box contains large hostname followed by hardware & OS details - $contents = '
'.$device['hostname'].''; + $contents = '
'.$device['hostname'].''; if ($device['hardware']) { $contents .= ' - '.$device['hardware']; } @@ -219,8 +248,8 @@ function generate_device_link($device, $text=null, $vars=array(), $start=0, $end foreach ($graphs as $entry) { $graph = $entry['graph']; $graphhead = $entry['text']; - $contents .= '
'; - $contents .= ''.$graphhead.'
'; + $contents .= '
'; + $contents .= ''.$graphhead.'
'; $contents .= generate_minigraph_image($device, $start, $end, $graph); $contents .= generate_minigraph_image($device, $config['time']['week'], $end, $graph); $contents .= '
'; @@ -250,6 +279,7 @@ function generate_device_link($device, $text=null, $vars=array(), $start=0, $end function overlib_link($url, $text, $contents, $class) { global $config; + $contents = "
".$contents.'
'; $contents = str_replace('"', "\'", $contents); $output = ''; if ($port['ifAlias']) { - $content .= $port['ifAlias'].'
'; + $content .= escape_quotes($port['ifAlias']).'
'; } $content .= "
"; @@ -1137,3 +1167,85 @@ function alert_details($details) { }//end alert_details() +function dynamic_override_config($type, $name, $device) { + $attrib_val = get_dev_attrib($device,$name); + if ($attrib_val == 'true') { + $checked = 'checked'; + } + else { + $checked = ''; + } + if ($type == 'checkbox') { + return ''; + } +}//end dynamic_override_config() + +function generate_dynamic_config_panel($title,$end_panel=true,$config_groups,$items=array(),$transport='') { + $anchor = md5($title); + $output = ' +
+
+

+ '.$title.' + '; + if (!empty($transport)) { + $output .= ''; + } + $output .= ' +

+
+
+
+ '; + + if (!empty($items)) { + foreach ($items as $item) { + $output .= ' +
+ +
+
+ '; + if ($item['type'] == 'checkbox') { + $output .= ''; + } + elseif ($item['type'] == 'text') { + $output .= ' + + + '; + } + elseif ($item['type'] == 'select') { + $output .= ' + + + '; + } + $output .= ' +
+
+ '; + } + } + + if ($end_panel === true) { + $output .= ' +
+
+
+ '; + } + return $output; +}//end generate_dynamic_config_panel() diff --git a/html/includes/graphs/application/auth.inc.php b/html/includes/graphs/application/auth.inc.php index 15c8f01ca..719145015 100644 --- a/html/includes/graphs/application/auth.inc.php +++ b/html/includes/graphs/application/auth.inc.php @@ -3,7 +3,12 @@ if (is_numeric($vars['id']) && ($auth || application_permitted($vars['id']))) { $app = get_application_by_id($vars['id']); $device = device_by_id_cache($app['device_id']); - $title = generate_device_link($device); - $title .= $graph_subtype; + if ($app['app_type'] != 'proxmox') { + $title = generate_device_link($device); + $title .= $graph_subtype; + } + else { + $title = $vars['port'].'@'.$vars['hostname'].' on '.generate_device_link($device); + } $auth = true; } diff --git a/html/includes/graphs/application/proxmox_traffic.inc.php b/html/includes/graphs/application/proxmox_traffic.inc.php new file mode 100644 index 000000000..26d6e6682 --- /dev/null +++ b/html/includes/graphs/application/proxmox_traffic.inc.php @@ -0,0 +1,30 @@ + + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; version 2 dated June, + * 1991. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * See http://www.gnu.org/licenses/gpl.txt for the full license + */ + +require 'includes/graphs/common.inc.php'; + +$proxmox_rrd = $config['rrd_dir'].'/proxmox/'.$vars['cluster'].'/'.$vars['vmid'].'_netif_'.$vars['port'].'.rrd'; + +if (is_file($proxmox_rrd)) { + $rrd_filename = $proxmox_rrd; +} + +$ds_in = 'INOCTETS'; +$ds_out = 'OUTOCTETS'; + +require 'includes/graphs/generic_data.inc.php'; diff --git a/html/includes/graphs/common.inc.php b/html/includes/graphs/common.inc.php index 9dbc97b80..ba77fb3f6 100644 --- a/html/includes/graphs/common.inc.php +++ b/html/includes/graphs/common.inc.php @@ -103,3 +103,7 @@ else { } $rrd_options .= ' --font-render-mode normal'; + +if (isset($_GET['absolute']) && $_GET['absolute'] == "1") { + $rrd_options .= ' --full-size-mode'; +} diff --git a/html/includes/graphs/device/ciscowlc_numaps.inc.php b/html/includes/graphs/device/ciscowlc_numaps.inc.php new file mode 100644 index 000000000..c8507252f --- /dev/null +++ b/html/includes/graphs/device/ciscowlc_numaps.inc.php @@ -0,0 +1,20 @@ + '99') { shell_exec($rrd_cmd); - if ($debug) { - echo '
'.$rrd_cmd.'
'; - } + d_echo('
'.$rrd_cmd.'
'); if (is_file($graphfile) && !$debug) { header('Content-type: image/png'); @@ -135,9 +133,7 @@ else { else { if ($rrd_options) { rrdtool_graph($graphfile, $rrd_options); - if ($debug) { - echo $rrd_cmd; - } + d_echo($rrd_cmd); if (is_file($graphfile)) { if (!$debug) { diff --git a/html/includes/graphs/macaccounting/auth.inc.php b/html/includes/graphs/macaccounting/auth.inc.php index 971874116..d6a2ccb5f 100644 --- a/html/includes/graphs/macaccounting/auth.inc.php +++ b/html/includes/graphs/macaccounting/auth.inc.php @@ -11,14 +11,10 @@ if (is_numeric($vars['id'])) { if (is_array($acc)) { if ($auth || port_permitted($acc['port_id'])) { - if ($debug) { - echo $config['rrd_dir'].'/'.$acc['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd'); - } + d_echo($config['rrd_dir'].'/'.$acc['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd')); if (is_file($config['rrd_dir'].'/'.$acc['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd'))) { - if ($debug) { - echo 'exists'; - } + d_echo('exists'); $rrd_filename = $config['rrd_dir'].'/'.$acc['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd'); $port = get_port_by_id($acc['port_id']); diff --git a/html/includes/modal/alert_template.inc.php b/html/includes/modal/alert_template.inc.php index 71574ba6f..8e96f3032 100644 --- a/html/includes/modal/alert_template.inc.php +++ b/html/includes/modal/alert_template.inc.php @@ -51,6 +51,8 @@ if(is_admin() === false) {

Give your template a name:

+ Optionally, add custom titles:
+

@@ -113,6 +115,8 @@ $('#alert-template').on('show.bs.modal', function (event) { success: function(output) { $('#template').val(output['template']); $('#name').val(output['name']); + $('#title').val(output['title']); + $('#title_rec').val(output['title_rec']); } }); } @@ -123,10 +127,12 @@ $('#create-template').click('', function(e) { var template = $("#template").val(); var template_id = $("#template_id").val(); var name = $("#name").val(); + var title = $("#title").val(); + var title_rec = $("#title_rec").val(); $.ajax({ type: "POST", url: "ajax_form.php", - data: { type: "alert-templates", template: template , name: name, template_id: template_id}, + data: { type: "alert-templates", template: template , name: name, template_id: template_id, title: title, title_rec: title_rec}, dataType: "html", success: function(msg){ if(msg.indexOf("ERROR:") <= -1) { diff --git a/html/includes/print-alert-rules.php b/html/includes/print-alert-rules.php index 670a57815..14ae13e0c 100644 --- a/html/includes/print-alert-rules.php +++ b/html/includes/print-alert-rules.php @@ -41,7 +41,7 @@ if (isset($_POST['create-default'])) { 'severity' => 'critical', 'extra' => '{"mute":false,"count":"1","delay":"300"}', 'disabled' => 0, - 'name' => 'BGP Session establised', + 'name' => 'BGP Session established', ); $default_rules[] = array( 'device_id' => '-1', @@ -107,7 +107,7 @@ echo '
echo ''; if ($_SESSION['userlevel'] >= '10') { - echo ''; + echo ''; } echo ' diff --git a/html/includes/print-date-selector.inc.php b/html/includes/print-date-selector.inc.php new file mode 100644 index 000000000..3333df0b6 --- /dev/null +++ b/html/includes/print-date-selector.inc.php @@ -0,0 +1,40 @@ + +
+ +"; + +echo ' +
+ + +
+
+ + +
+ +
+ +'; diff --git a/html/includes/print-device-graph.php b/html/includes/print-device-graph.php index cf629b884..d713859c6 100644 --- a/html/includes/print-device-graph.php +++ b/html/includes/print-device-graph.php @@ -1,13 +1,10 @@ '; -echo '
'.$graph_title.'
'; +echo '
+
+

'.$graph_title.'

+
+
+'; require 'includes/print-graphrow.inc.php'; echo '
'; - +echo '
'; $g_i++; diff --git a/html/includes/print-interface.inc.php b/html/includes/print-interface.inc.php index bfb5d1bd7..223c169fc 100644 --- a/html/includes/print-interface.inc.php +++ b/html/includes/print-interface.inc.php @@ -233,7 +233,7 @@ if (strpos($port['label'], 'oopback') === false && !$graph_type) { }//end foreach }//end if - if ($port_details && $config['enable_port_relationship'] === true) { + if ($port_details && $config['enable_port_relationship'] === true && port_permitted($int_link,$device['device_id'])) { foreach ($int_links as $int_link) { $link_if = dbFetchRow('SELECT * from ports AS I, devices AS D WHERE I.device_id = D.device_id and I.port_id = ?', array($int_link)); @@ -263,7 +263,7 @@ if (strpos($port['label'], 'oopback') === false && !$graph_type) { // unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br); }//end if -if ($port_details && $config['enable_port_relationship'] === true) { +if ($port_details && $config['enable_port_relationship'] === true && port_permitted($port['port_id'], $device['device_id'])) { foreach (dbFetchRows('SELECT * FROM `pseudowires` WHERE `port_id` = ?', array($port['port_id'])) as $pseudowire) { // `port_id`,`peer_device_id`,`peer_ldp_id`,`cpwVcID`,`cpwOid` $pw_peer_dev = dbFetchRow('SELECT * FROM `devices` WHERE `device_id` = ?', array($pseudowire['peer_device_id'])); diff --git a/html/includes/print-menubar.php b/html/includes/print-menubar.php index 06b4ffb04..09d4b57b7 100644 --- a/html/includes/print-menubar.php +++ b/html/includes/print-menubar.php @@ -51,7 +51,7 @@ else {
- +
+
+ +
+
+

+ -

To disable IPMI polling, please clear the setting fields and click Save.

diff --git a/html/pages/device/edit/misc.inc.php b/html/pages/device/edit/misc.inc.php new file mode 100644 index 000000000..a85689852 --- /dev/null +++ b/html/pages/device/edit/misc.inc.php @@ -0,0 +1,19 @@ + +
+ +
+ '.dynamic_override_config('checkbox','override_icmp_disable', $device).' +
+
+
+ +
+ '.dynamic_override_config('checkbox','override_Oxidized_disable', $device).' +
+
+ +'; + diff --git a/html/pages/device/edit/ports.inc.php b/html/pages/device/edit/ports.inc.php index 865439595..37cccb9d2 100644 --- a/html/pages/device/edit/ports.inc.php +++ b/html/pages/device/edit/ports.inc.php @@ -1,10 +1,12 @@ +
n.b For the first time, please click any button twice.
'> - +
+
@@ -17,9 +19,50 @@
Index
+
diff --git a/html/pages/device/overview/c6kxbar.inc.php b/html/pages/device/overview/c6kxbar.inc.php index cef09c13e..695ebc50d 100644 --- a/html/pages/device/overview/c6kxbar.inc.php +++ b/html/pages/device/overview/c6kxbar.inc.php @@ -6,7 +6,7 @@ echo '
'; echo ''; -echo " Catalyst 6k Crossbar"; +echo " Catalyst 6k Crossbar"; echo '
'; diff --git a/html/pages/device/overview/eventlog.inc.php b/html/pages/device/overview/eventlog.inc.php index d55511813..23a7ee94c 100644 --- a/html/pages/device/overview/eventlog.inc.php +++ b/html/pages/device/overview/eventlog.inc.php @@ -6,7 +6,7 @@ echo '
'; echo ''; -echo " Recent Events"; +echo " Recent Events"; echo '
'; diff --git a/html/pages/device/overview/generic/sensor.inc.php b/html/pages/device/overview/generic/sensor.inc.php index 39a841466..076f5b049 100644 --- a/html/pages/device/overview/generic/sensor.inc.php +++ b/html/pages/device/overview/generic/sensor.inc.php @@ -12,10 +12,6 @@ if (count($sensors)) { echo '
'; foreach ($sensors as $sensor) { - if ($config['memcached']['enable'] === true) { - $sensor['sensor_current'] = $memcache->get('sensor-'.$sensor['sensor_id'].'-value'); - } - if (empty($sensor['sensor_current'])) { $sensor['sensor_current'] = 'NaN'; } @@ -57,7 +53,7 @@ if (count($sensors)) { $sensor['sensor_descr'] = truncate($sensor['sensor_descr'], 48, ''); echo ' - + '; diff --git a/html/pages/device/overview/mempools.inc.php b/html/pages/device/overview/mempools.inc.php index 49884331d..4fd7fa2d9 100644 --- a/html/pages/device/overview/mempools.inc.php +++ b/html/pages/device/overview/mempools.inc.php @@ -12,26 +12,13 @@ if (count($mempools)) {
'; echo ''; - echo " Memory Pools"; + echo " Memory Pools"; echo '
'.overlib_link($link, shorten_interface_type($sensor['sensor_descr']), $overlib_content).''.overlib_link($link, shorten_interface_type($sensor['sensor_descr']), $overlib_content).' '.overlib_link($link, $sensor_minigraph, $overlib_content).' '.overlib_link($link, ' $sensor['sensor_limit'] ? "style='color: red'" : '').'>'.$sensor['sensor_current'].$sensor_unit.'', $overlib_content).'
'; foreach ($mempools as $mempool) { - if ($config['memcached']['enable'] === true) { - $state = $memcache->get('mempool-'.$mempool['mempool_id'].'-state'); - if ($debug) { - print_r($state); - } - - if (is_array($state)) { - $mempool = array_merge($mempool, $state); - } - - unset($state); - } - $percent = round($mempool['mempool_perc'], 0); $text_descr = rewrite_entity_descr($mempool['mempool_descr']); $total = formatStorage($mempool['mempool_total']); diff --git a/html/pages/device/overview/storage.inc.php b/html/pages/device/overview/storage.inc.php index ff1da3ae9..fcbf60378 100644 --- a/html/pages/device/overview/storage.inc.php +++ b/html/pages/device/overview/storage.inc.php @@ -11,7 +11,7 @@ if (count($drives)) {
'; echo ''; - echo " Storage"; + echo " Storage"; echo '
'; diff --git a/html/pages/device/overview/syslog.inc.php b/html/pages/device/overview/syslog.inc.php index 0b27b1a61..9206b1c11 100644 --- a/html/pages/device/overview/syslog.inc.php +++ b/html/pages/device/overview/syslog.inc.php @@ -8,7 +8,7 @@ if ($config['enable_syslog']) {
'; - echo ' Recent Syslog'; + echo ' Recent Syslog'; echo '
'; foreach ($syslog as $entry) { diff --git a/html/pages/device/overview/toner.inc.php b/html/pages/device/overview/toner.inc.php index a77edd31b..7014d74c6 100644 --- a/html/pages/device/overview/toner.inc.php +++ b/html/pages/device/overview/toner.inc.php @@ -10,7 +10,7 @@ if (count($toners)) {
'; echo ''; - echo " Toner"; + echo " Toner"; echo '
'; diff --git a/html/pages/device/performance.inc.php b/html/pages/device/performance.inc.php index da2056c54..b03c7b696 100644 --- a/html/pages/device/performance.inc.php +++ b/html/pages/device/performance.inc.php @@ -35,6 +35,7 @@ if (empty($vars['dtpickerto'])) { ?>
+
@@ -46,6 +47,7 @@ if (empty($vars['dtpickerto'])) {
+

@@ -75,7 +214,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", data: s}, + data: {type: "update-dashboard-config", data: s, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -90,44 +229,58 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg }); } + var gridster_state = 0; + $(function(){ + $('[data-toggle="tooltip"]').tooltip(); + dashboard_collapse(); gridster = $(".gridster ul").gridster({ widget_base_dimensions: [100, 100], widget_margins: [5, 5], avoid_overlapped_widgets: true, draggable: { - handle: 'header', + handle: 'header, span', stop: function(e, ui, $widget) { updatePos(gridster); }, }, resize: { enabled: true, - stop: function(e, ui, $widget) { + stop: function(e, ui, widget) { updatePos(gridster); + widget_reload(widget.attr('id'),widget.data('type')); } }, - serialize_params: function($w, wgd) { - return { - id: $($w).attr('id'), - col: wgd.col, - row: wgd.row, - size_x: wgd.size_x, - size_y: wgd.size_y + serialize_params: function(w, wgd) { + return { + id: $(w).attr('id'), + col: wgd.col, + row: wgd.row, + size_x: wgd.size_x, + size_y: wgd.size_y }; } }).data('gridster'); gridster.remove_all_widgets(); + gridster.disable(); + gridster.disable_resize(); $.each(serialization, function() { - gridster.add_widget( - '
  • '+ - '\var timeout'+this.user_widget_id+' = grab_data('+this.user_widget_id+','+this.refresh+',\''+this.widget+'\');\<\/script\>'+ - '
    '+this.title+'
    '+ - '
    '+this.widget+'
    '+ - '
  • ', - parseInt(this.size_x), parseInt(this.size_y), parseInt(this.col), parseInt(this.row) - ); + widget_dom(this); + }); + $(document).on('click','.edit-dash-btn', function() { + if (gridster_state == 0) { + gridster.enable(); + gridster.enable_resize(); + gridster_state = 1; + $('.fade-edit').fadeIn(); + } + else { + gridster.disable(); + gridster.disable_resize(); + gridster_state = 0; + $('.fade-edit').fadeOut(); + } }); $(document).on('click','#clear_widgets', function() { @@ -135,7 +288,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'remove-all'}, + data: {type: "update-dashboard-config", sub_type: 'remove-all', dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -156,23 +309,11 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'add', widget_id: widget_id}, + data: {type: "update-dashboard-config", sub_type: 'add', widget_id: widget_id, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { - var widget_id = data.extra.widget_id; - var title = data.extra.title; - var widget = data.extra.widget; - var size_x = data.extra.size_x; - var size_y = data.extra.size_y; - gridster.add_widget( - '
  • '+ - '\var timeout'+widget_id+' = grab_data('+widget_id+',60,\''+widget+'\');\<\/script\>'+ - '
    '+title+'
    '+ - '
    '+widget+'
    '+ - '
  • ', - parseInt(size_x), parseInt(size_y) - ); + widget_dom(data.extra); updatePos(gridster); } else { @@ -190,7 +331,7 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg $.ajax({ type: 'POST', url: 'ajax_form.php', - data: {type: "update-dashboard-config", sub_type: 'remove', widget_id: widget_id}, + data: {type: "update-dashboard-config", sub_type: 'remove', widget_id: widget_id, dashboard_id: }, dataType: "json", success: function (data) { if (data.status == 'ok') { @@ -207,33 +348,189 @@ foreach (dbFetchRows("SELECT * FROM `widgets` ORDER BY `widget_title`") as $widg }); }); + $(document).on("click",".edit-widget",function() { + obj = $(this).parent().parent().parent(); + if( obj.data('settings') == 1 ) { + obj.data('settings','0'); + } else { + obj.data('settings','1'); + } + widget_reload(obj.attr('id'),obj.data('type')); + }); + }); - function grab_data(id,refresh,data_type) { - new_refresh = refresh * 1000; - $.ajax({ - type: 'POST', - url: 'ajax_dash.php', - data: {type: data_type}, - dataType: "json", - success: function (data) { - if (data.status == 'ok') { - $("#widget_body_"+id).html(data.html); - } - else { - $("#widget_body_"+id).html('
    ' + data.message + '
    '); - } - }, - error: function () { - $("#widget_body_"+id).html('
    Problem with backend
    '); - } - }); - - setTimeout(function() { - grab_data(id,refresh,data_type); - }, - new_refresh); - } -$('#new-widget').popover(); + function dashboard_collapse(target) { + if (target !== undefined) { + $('.dash-collapse:not('+target+')').each(function() { + $(this).fadeOut(0); + }); + $(target).fadeToggle(300); + if (target != "#edit_dash") { + gridster.disable(); + gridster.disable_resize(); + gridster_state = 0; + $('.fade-edit').fadeOut(); + } + } else { + $('.dash-collapse').fadeOut(0); + } + } + function dashboard_delete(data) { + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'delete-dashboard', dashboard_id: $(data).data('dashboard')}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview"; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function dashboard_edit(data) { + datas = $(data).serializeArray(); + data = []; + for( var field in datas ) { + data[datas[field].name] = datas[field].value; + } + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'edit-dashboard', dashboard_name: data['dashboard_name'], dashboard_id: , access: data['access']}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview/dashboard="; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function dashboard_add(data) { + datas = $(data).serializeArray(); + data = []; + for( var field in datas ) { + data[datas[field].name] = datas[field].value; + } + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'add-dashboard', dashboard_name: data['dashboard_name']}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + $("#message").html('
    ' + data.message + '
    '); + window.location.href="/overview/dashboard="+data.dashboard_id; + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + + function widget_dom(data) { + dom = '
  • '+ + '
    '+data.title+ + ''+ + ''+ + '  '+ + '  '+ + ''+ + '
    '+ + '
    '+data.widget+'
    '+ + '\var timeout'+data.user_widget_id+' = grab_data('+data.user_widget_id+','+data.refresh+',\''+data.widget+'\');\<\/script\>'+ + '
  • '; + if (data.hasOwnProperty('col') && data.hasOwnProperty('row')) { + gridster.add_widget(dom, parseInt(data.size_x), parseInt(data.size_y), parseInt(data.col), parseInt(data.row)); + } else { + gridster.add_widget(dom, parseInt(data.size_x), parseInt(data.size_y)); + } + if (gridster_state == 0) { + $('.fade-edit').fadeOut(0); + } + $('[data-toggle="tooltip"]').tooltip(); + } + + function widget_settings(data) { + var widget_settings = {}; + var widget_id = 0; + datas = $(data).serializeArray(); + for( var field in datas ) { + widget_settings[datas[field].name] = datas[field].value; + } + $('.gridster').find('div[id^=widget_body_]').each(function() { + if(this.contains(data)) { + widget_id = $(this).parent().attr('id'); + widget_type = $(this).parent().data('type'); + $(this).parent().data('settings','0'); + } + }); + if( widget_id > 0 && widget_settings != {} ) { + $.ajax({ + type: 'POST', + url: 'ajax_form.php', + data: {type: 'widget-settings', id: widget_id, settings: widget_settings}, + dataType: "json", + success: function (data) { + if( data.status == "ok" ) { + widget_reload(widget_id,widget_type); + } + else { + $("#message").html('
    ' + data.message + '
    '); + } + } + }); + } + } + + function widget_reload(id,data_type) { + if( $("#widget_body_"+id).parent().data('settings') == 1 ) { + settings = 1; + } else { + settings = 0; + } + $.ajax({ + type: 'POST', + url: 'ajax_dash.php', + data: {type: data_type, id: id, dimensions: {x:$("#widget_body_"+id).innerWidth()-50, y:$("#widget_body_"+id).innerHeight()-50}, settings:settings}, + dataType: "json", + success: function (data) { + if (data.status == 'ok') { + $("#widget_title_"+id).html(data.title); + $("#widget_body_"+id).html(data.html); + } + else { + $("#widget_body_"+id).html('
    ' + data.message + '
    '); + } + }, + error: function () { + $("#widget_body_"+id).html('
    Problem with backend
    '); + } + }); + } + + function grab_data(id,refresh,data_type) { + if( $("#widget_body_"+id).parent().data('settings') == 0 ) { + widget_reload(id,data_type); + } + new_refresh = refresh * 1000; + setTimeout(function() { + grab_data(id,refresh,data_type); + }, + new_refresh); + } + $('#new-widget').popover(); diff --git a/html/pages/graphs.inc.php b/html/pages/graphs.inc.php index 6b431c40f..6385ea969 100644 --- a/html/pages/graphs.inc.php +++ b/html/pages/graphs.inc.php @@ -97,7 +97,7 @@ else { $link = generate_url($link_array); echo(''; foreach (dbFetchRows($sql, $param) as $sensor) { - if ($config['memcached']['enable'] === true) { - $sensor['sensor_current'] = $memcache->get('sensor-'.$sensor['sensor_id'].'-value'); - if ($debug) { - echo 'Memcached['.'sensor-'.$sensor['sensor_id'].'-value'.'='.$sensor['sensor_current'].']'; - } - } - if (empty($sensor['sensor_current'])) { $sensor['sensor_current'] = 'NaN'; } diff --git a/html/pages/logon.inc.php b/html/pages/logon.inc.php index a8a156574..c56115db5 100644 --- a/html/pages/logon.inc.php +++ b/html/pages/logon.inc.php @@ -4,57 +4,65 @@ if( $config['twofactor'] && isset($twofactorform) ) { } else { ?> - -
    -
    -

    Please log in:

    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - Remember me. +
    +
    +
    +
    +

    +
    + +
    +

    +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + 'error','message'=>$auth_message,'title'=>'Login error'); + } + ?> + + + +
    +
    +
    '.$config['login_message'].'
    '); + } + ?> +
    +
    +
    -
    -
    -
    - -
    -
    -'error','message'=>$auth_message,'title'=>'Login error'); -} -?> - -
    -
    '.$config['login_message'].'
    -
    -
    '); -} -?> - - - - - diff --git a/html/pages/poll-log.inc.php b/html/pages/poll-log.inc.php index ac912a6f8..ddeca02c8 100644 --- a/html/pages/poll-log.inc.php +++ b/html/pages/poll-log.inc.php @@ -1,5 +1,6 @@
    '); - echo(''.$text.'
    '); + echo(''.$text.'
    '); echo(''); echo generate_lazy_graph_tag($graph_array); echo(''); @@ -113,60 +113,10 @@ else { echo("
    "); - // datetime range picker -?> - - - "); - echo(' -
    - - -
    -
    - - -
    - - - - - '); - - echo("
    "); + include_once 'includes/print-date-selector.inc.php'; + echo ('
    '); + echo('
    '); if ($vars['legend'] == "no") { echo(generate_link("Show Legend",$vars, array('page' => "graphs", 'legend' => NULL))); } @@ -186,24 +136,22 @@ else { } # } - echo('
    '); - + echo(' | '); if ($vars['showcommand'] == "yes") { echo(generate_link("Hide RRD Command",$vars, array('page' => "graphs", 'showcommand' => NULL))); } else { echo(generate_link("Show RRD Command",$vars, array('page' => "graphs", 'showcommand' => "yes"))); } - - echo('
    '); + echo('
    '); print_optionbar_end(); echo generate_graph_js_state($graph_array); - echo('
    '); + echo('
    '); echo generate_lazy_graph_tag($graph_array); - echo("
    "); + echo("
    "); if (isset($config['graph_descr'][$vars['type']])) { diff --git a/html/pages/health/sensors.inc.php b/html/pages/health/sensors.inc.php index a51ba6e71..b882ab4d9 100644 --- a/html/pages/health/sensors.inc.php +++ b/html/pages/health/sensors.inc.php @@ -22,13 +22,6 @@ echo '
    diff --git a/html/pages/preferences.inc.php b/html/pages/preferences.inc.php index 91a02e1ce..00b1b1acd 100644 --- a/html/pages/preferences.inc.php +++ b/html/pages/preferences.inc.php @@ -4,7 +4,8 @@ $no_refresh = true; $pagetitle[] = 'Preferences'; -echo '

    User Preferences

    '; +echo '

    User Preferences

    '; +echo '
    '; if ($_SESSION['userlevel'] == 11) { demo_account(); @@ -30,15 +31,17 @@ else { include 'includes/update-preferences-password.inc.php'; - echo "
    "; + if (passwordscanchange($_SESSION['username'])) { echo '

    Change Password

    '; + echo '
    '; + echo "
    "; echo $changepass_message; echo "
    - +
    @@ -57,11 +60,13 @@ else {
    +
    +
    - + "; echo '
    '; }//end if @@ -183,9 +188,10 @@ else { }//end if }//end if -echo "
    "; -echo "
    Device Permissions
    "; +echo "

    Device Permissions

    "; +echo "
    "; +echo "
    "; if ($_SESSION['userlevel'] == '10') { echo "Global Administrative Access"; } diff --git a/html/pages/services.inc.php b/html/pages/services.inc.php index 83af21cfe..0e4d2edfc 100644 --- a/html/pages/services.inc.php +++ b/html/pages/services.inc.php @@ -16,16 +16,14 @@ if (isset($vars['state'])) { if ($vars['state'] == 'up') { $state = '1'; } - else if ($vars['state'] == 'down') { + elseif ($vars['state'] == 'down') { $state = '0'; } } if ($vars['state']) { - $where .= ' AND service_status= ?'; + $where .= " AND service_status= ? AND service_disabled='0' AND `service_ignore`='0'"; $sql_param[] = $state; - $where .= " AND service_disabled='0' AND `service_ignore`='0'"; - $sql_param[] = ''; } if ($vars['disabled']) { @@ -65,8 +63,15 @@ unset($sep); print_optionbar_end(); -echo '
    '; -// echo(""); +echo '
    +
    DeviceServiceStatusChangedCheckedMessage
    + + + + + + + '; if ($_SESSION['userlevel'] >= '5') { $host_sql = 'SELECT * FROM devices AS D, services AS S WHERE D.device_id = S.device_id GROUP BY D.hostname ORDER BY D.hostname'; $host_par = array(); @@ -123,4 +128,5 @@ foreach (dbFetchRows($host_sql, $host_par) as $device) { unset($samehost); }//end foreach -echo '
    DeviceServiceStatusChangedMessage
    '; +echo ' +
    '; diff --git a/html/pages/settings.inc.php b/html/pages/settings.inc.php index e3a6e21a2..1271e8d22 100644 --- a/html/pages/settings.inc.php +++ b/html/pages/settings.inc.php @@ -24,9 +24,26 @@ * @subpackage Page */ +if (empty($vars['sub'])) { + $page_name = 'Global'; +} +else { + $page_name = ucfirst($vars['sub']); +} + +$pagetitle[] = $page_name . ' Settings'; +$config['memcached']['enable'] = false; ?>
    +

    + +

    +
    @@ -56,7 +73,7 @@ else { foreach (dbFetchRows("SELECT `config_group` FROM `config` GROUP BY `config_group`") as $sub_page) { $sub_page = $sub_page['config_group']; ?> -
    + 'alert.admins', + 'descr' => 'Issue alerts to admins', + 'type' => 'checkbox', + ), + array('name' => 'alert.globals', + 'descr' => 'Issue alerts to read only users', + 'type' => 'checkbox', + ), + array('name' => 'alert.syscontact', + 'descr' => 'Issue alerts to sysContact', + 'type' => 'checkbox', + ), + array('name' => 'alert.default_only', + 'descr' => 'Send alerts to default contact only', + 'type' => 'checkbox', + ), + array('name' => 'alert.default_mail', + 'descr' => 'Default contact', + 'type' => 'text', + ), + array('name' => 'alert.tolerance_window', + 'descr' => 'Tolerance window for cron', + 'type' => 'text', + ), + array('name' => 'alert.fixed-contacts', + 'descr' => 'Updates to contact email addresses not honored', + 'type' => 'checkbox', + ), +); + +$mail_conf = array( + array('name' => 'alert.transports.mail', + 'descr' => 'Enable email alerting', + 'type' => 'checkbox', + ), + array('name' => 'email_backend', + 'descr' => 'How to deliver mail', + 'options' => $dyn_config['email_backend'], + 'type' => 'select', + ), + array('name' => 'email_user', + 'descr' => 'From name', + 'type' => 'text', + ), + array('name' => 'email_sendmail_path', + 'descr' => 'Sendmail path', + 'type' => 'text', + ), + array('name' => 'email_smtp_host', + 'descr' => 'SMTP Host', + 'type' => 'text', + ), + array('name' => 'email_smtp_port', + 'descr' => 'SMTP Port', + 'type' => 'text', + ), + array('name' => 'email_smtp_timeout', + 'descr' => 'SMTP Timeout', + 'type' => 'text', + ), + array('name' => 'email_smtp_secure', + 'descr' => 'SMTP Secure', + 'type' => 'select', + 'options' => $dyn_config['email_smtp_secure'], + ), + array('name' => 'email_smtp_auth', + 'descr' => 'SMTP Authentication', + 'type' => 'checkbox', + ), + array('name' => 'email_smtp_username', + 'descr' => 'SMTP Authentication Username', + 'type' => 'text', + ), + array('name' => 'email_smtp_password', + 'descr' => 'SMTP Authentication Password', + 'type' => 'text', + ), +); + echo '
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -

    - Email transport -

    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    -
    +echo '

    @@ -799,6 +697,25 @@ echo '

    +
    +
    +

    + Pushbullet +

    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    '; @@ -815,12 +732,33 @@ echo '
    $(".toolTip").tooltip(); $("button#test-alert").click(function() { - var transport = $(this).data("transport"); + var $this = $(this); + var transport = $this.data("transport"); $.ajax({ type: 'POST', url: '/ajax_form.php', data: { type: "test-transport", transport: transport }, - dataType: "json" + dataType: "json", + success: function(data){ + if (data.status == 'ok') { + $this.removeClass('btn-primary').addClass('btn-success'); + setTimeout(function(){ + $this.removeClass('btn-success').addClass('btn-primary'); + }, 2000); + } + else { + $this.removeClass('btn-primary').addClass('btn-danger'); + setTimeout(function(){ + $this.removeClass('btn-danger').addClass('btn-primary'); + }, 2000); + } + }, + error: function(){ + $this.removeClass('btn-primary').addClass('btn-danger'); + setTimeout(function(){ + $this.removeClass('btn-danger').addClass('btn-primary'); + }, 2000); + } }); }); @@ -1118,58 +1056,6 @@ echo '
    }); });// End delete Boxcar config - $("[name='global-config-check']").bootstrapSwitch('offColor','danger'); - $('input[name="global-config-check"]').on('switchChange.bootstrapSwitch', function(event, state) { - event.preventDefault(); - var config_id = $(this).data("config_id"); - $.ajax({ - type: 'POST', - url: 'ajax_form.php', - data: {type: "update-config-item", config_id: config_id, config_value: state}, - dataType: "json", - success: function (data) { - if (data.status == 'ok') { - } else { - $("#message").html('
    ' + data.message + '
    '); - } - }, - error: function () { - $("#message").html('
    An error occurred.
    '); - } - }); - }); - $(document).on('blur', 'input[name="global-config-input"]', function(event) { - event.preventDefault(); - var $this = $(this); - var config_id = $this.data("config_id"); - var config_value = $this.val(); - $.ajax({ - type: 'POST', - url: 'ajax_form.php', - data: {type: "update-config-item", config_id: config_id, config_value: config_value}, - dataType: "json", - success: function (data) { - if (data.status == 'ok') { - $this.closest('.form-group').addClass('has-success'); - $this.next().addClass('glyphicon-ok'); - setTimeout(function(){ - $this.closest('.form-group').removeClass('has-success'); - $this.next().removeClass('glyphicon-ok'); - }, 2000); - } else { - $(this).closest('.form-group').addClass('has-error'); - $this.next().addClass('glyphicon-remove'); - setTimeout(function(){ - $this.closest('.form-group').removeClass('has-error'); - $this.next().removeClass('glyphicon-remove'); - }, 2000); - } - }, - error: function () { - $("#message").html('
    An error occurred.
    '); - } - }); - }); $( 'select[name="global-config-select"]').change(function(event) { event.preventDefault(); var $this = $(this); diff --git a/html/pages/settings/external.inc.php b/html/pages/settings/external.inc.php new file mode 100644 index 000000000..2960b2e25 --- /dev/null +++ b/html/pages/settings/external.inc.php @@ -0,0 +1,32 @@ + 'oxidized.enabled', + 'descr' => 'Enable Oxidized support', + 'type' => 'checkbox', + ), + array('name' => 'oxidized.url', + 'descr' => 'URL to your Oxidized API', + 'type' => 'text', + ), + array('name' => 'oxidized.features.versioning', + 'descr' => 'Enable config versioning access', + 'type' => 'checkbox', + ), +); + +echo ' +
    +
    +'; + +echo generate_dynamic_config_panel('Oxidized integration',true,$config_groups,$oxidized_conf); + +echo ' +
    +
    +'; diff --git a/includes/alerts.inc.php b/includes/alerts.inc.php index 1d5c5c91c..85b897ee6 100644 --- a/includes/alerts.inc.php +++ b/includes/alerts.inc.php @@ -91,7 +91,7 @@ function GenSQL($rule) { } $i++; } - $sql = "SELECT * FROM ".implode(",",$tables)." WHERE (".$join."".str_replace("(","",$tables[0]).".device_id = ?) && (".str_replace(array("%","@","!~","~"),array("","%","NOT LIKE","LIKE"),$rule).")"; + $sql = "SELECT * FROM ".implode(",",$tables)." WHERE (".$join."".str_replace("(","",$tables[0]).".device_id = ?) && (".str_replace(array("%","@","!~","~"),array("",".*","NOT REGEXP","REGEXP"),$rule).")"; return $sql; } @@ -220,7 +220,6 @@ function IsMaintenance( $device ) { * @return void */ function RunRules($device) { - global $debug; if( IsMaintenance($device) > 0 ) { echo "Under Maintenance, Skipping alerts.\r\n"; return false; diff --git a/includes/alerts/transport.pushbullet.php b/includes/alerts/transport.pushbullet.php new file mode 100644 index 000000000..c5d75f4ef --- /dev/null +++ b/includes/alerts/transport.pushbullet.php @@ -0,0 +1,47 @@ +/* Copyright (C) 2015 Daniel Preussker + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +/** + * Pushbullet API Transport + * @author f0o + * @copyright 2015 f0o, LibreNMS + * @license GPL + * @package LibreNMS + * @subpackage Alerts + */ + +// Note: At this point it might be useful to iterate through $obj['contacts'] and send each of them a note ? + +$data = array("type" => "note", "title" => $obj['title'], "body" => $obj['msg']); +$data = json_encode($data); + +$curl = curl_init('https://api.pushbullet.com/v2/pushes'); +curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); +curl_setopt($curl, CURLOPT_POSTFIELDS, $data); +curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); +curl_setopt($curl, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Content-Length: '.strlen($data), + 'Authorization: Bearer '.$opts, +)); + +$ret = curl_exec($curl); +$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); +if( $code > 201 ) { + if( $debug ) { + var_dump($ret); + } + return false; +} +return true; diff --git a/includes/common.php b/includes/common.php index 03b239e85..248285600 100644 --- a/includes/common.php +++ b/includes/common.php @@ -33,15 +33,9 @@ function format_number_short($number, $sf) { } function external_exec($command) { - global $debug; - - if ($debug) { - echo($command."\n"); - } + d_echo($command."\n"); $output = shell_exec($command); - if ($debug) { - echo($output."\n"); - } + d_echo($output."\n"); return $output; } @@ -441,8 +435,14 @@ function get_dev_entity_state($device) { return $state; } -function get_dev_attrib($device, $attrib_type) { - if ($row = dbFetchRow("SELECT attrib_value FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ?", array($device['device_id'], $attrib_type))) { +function get_dev_attrib($device, $attrib_type, $attrib_value='') { + $sql = ''; + $params = array($device['device_id'], $attrib_type); + if (!empty($attrib_value)) { + $sql = " AND `attrib_value`=?"; + array_push($params, $attrib_value); + } + if ($row = dbFetchRow("SELECT attrib_value FROM devices_attribs WHERE `device_id` = ? AND `attrib_type` = ? $sql", $params)) { return $row['attrib_value']; } else { @@ -693,9 +693,7 @@ function get_graph_subtypes($type) { // find the MIB subtypes foreach ($config['graph_types'] as $type => $unused1) { - print_r($type); foreach ($config['graph_types'][$type] as $subtype => $unused2) { - print_r($subtype); if (is_mib_graph($type, $subtype)) { $types[] = $subtype; } @@ -760,3 +758,19 @@ function round_Nth($val = 0, $round_to) { } } // end round_Nth +/** + * Checks if config allows us to ping this device + * $attribs contains an array of all of this devices + * attributes + * @param array $attribs Device attributes + * @return bool +**/ +function can_ping_device($attribs) { + global $config; + if ($config['icmp_check'] === true && $attribs['override_icmp_disable'] != "true") { + return true; + } + else { + return false; + } +} // end can_ping_device diff --git a/includes/dbFacile.mysql.php b/includes/dbFacile.mysql.php index 0d1d7150c..bdcce1ac1 100644 --- a/includes/dbFacile.mysql.php +++ b/includes/dbFacile.mysql.php @@ -238,8 +238,15 @@ function dbDelete($table, $where=null, $parameters=array()) { * */ -function dbFetchRows($sql, $parameters=array()) { - global $db_stats; +function dbFetchRows($sql, $parameters=array(), $nocache=false) { + global $db_stats, $config; + + if ($config['memcached']['enable'] && $nocache === false) { + $result = $config['memcached']['resource']->get(hash('sha512',$sql.'|'.serialize($parameters))); + if (!empty($result)) { + return $result; + } + } $time_start = microtime(true); $result = dbQuery($sql, $parameters); @@ -251,6 +258,9 @@ function dbFetchRows($sql, $parameters=array()) { } mysql_free_result($result); + if ($config['memcached']['enable'] && $nocache === false) { + $config['memcached']['resource']->set(hash('sha512',$sql.'|'.serialize($parameters)),$rows,$config['memcached']['ttl']); + } return $rows; } @@ -273,8 +283,8 @@ function dbFetchRows($sql, $parameters=array()) { * */ -function dbFetch($sql, $parameters=array()) { - return dbFetchRows($sql, $parameters); +function dbFetch($sql, $parameters=array(), $nocache=false) { + return dbFetchRows($sql, $parameters, $nocache); /* // for now, don't do the iterator thing $result = dbQuery($sql, $parameters); @@ -295,8 +305,15 @@ function dbFetch($sql, $parameters=array()) { * */ -function dbFetchRow($sql=null, $parameters=array()) { - global $db_stats; +function dbFetchRow($sql=null, $parameters=array(), $nocache=false) { + global $db_stats, $config; + + if ($config['memcached']['enable'] && $nocache === false) { + $result = $config['memcached']['resource']->get(hash('sha512',$sql.'|'.serialize($parameters))); + if (!empty($result)) { + return $result; + } + } $time_start = microtime(true); $result = dbQuery($sql, $parameters); @@ -308,6 +325,9 @@ function dbFetchRow($sql=null, $parameters=array()) { $db_stats['fetchrow_sec'] += number_format(($time_end - $time_start), 8); $db_stats['fetchrow']++; + if ($config['memcached']['enable'] && $nocache === false) { + $config['memcached']['resource']->set(hash('sha512',$sql.'|'.serialize($parameters)),$row,$config['memcached']['ttl']); + } return $row; } else { @@ -324,10 +344,10 @@ function dbFetchRow($sql=null, $parameters=array()) { * */ -function dbFetchCell($sql, $parameters=array()) { +function dbFetchCell($sql, $parameters=array(), $nocache=false) { global $db_stats; $time_start = microtime(true); - $row = dbFetchRow($sql, $parameters); + $row = dbFetchRow($sql, $parameters, $nocache); if ($row) { return array_shift($row); // shift first field off first row @@ -349,11 +369,11 @@ function dbFetchCell($sql, $parameters=array()) { * */ -function dbFetchColumn($sql, $parameters=array()) { +function dbFetchColumn($sql, $parameters=array(), $nocache=false) { global $db_stats; $time_start = microtime(true); $cells = array(); - foreach (dbFetch($sql, $parameters) as $row) { + foreach (dbFetch($sql, $parameters, $nocache) as $row) { $cells[] = array_shift($row); } diff --git a/includes/dbFacile.mysqli.php b/includes/dbFacile.mysqli.php index 2408ca990..9e49491a6 100644 --- a/includes/dbFacile.mysqli.php +++ b/includes/dbFacile.mysqli.php @@ -239,8 +239,15 @@ function dbDelete($table, $where=null, $parameters=array()) { * */ -function dbFetchRows($sql, $parameters=array()) { - global $db_stats; +function dbFetchRows($sql, $parameters=array(), $nocache=false) { + global $db_stats, $config; + + if ($config['memcached']['enable'] && $nocache === false) { + $result = $config['memcached']['resource']->get(hash('sha512',$sql.'|'.serialize($parameters))); + if (!empty($result)) { + return $result; + } + } $time_start = microtime(true); $result = dbQuery($sql, $parameters); @@ -252,6 +259,9 @@ function dbFetchRows($sql, $parameters=array()) { } mysqli_free_result($result); + if ($config['memcached']['enable'] && $nocache === false) { + $config['memcached']['resource']->set(hash('sha512',$sql.'|'.serialize($parameters)),$rows,$config['memcached']['ttl']); + } return $rows; } @@ -274,8 +284,8 @@ function dbFetchRows($sql, $parameters=array()) { * */ -function dbFetch($sql, $parameters=array()) { - return dbFetchRows($sql, $parameters); +function dbFetch($sql, $parameters=array(), $nocache=false) { + return dbFetchRows($sql, $parameters, $nocache); /* // for now, don't do the iterator thing $result = dbQuery($sql, $parameters); @@ -296,8 +306,15 @@ function dbFetch($sql, $parameters=array()) { * */ -function dbFetchRow($sql=null, $parameters=array()) { - global $db_stats; +function dbFetchRow($sql=null, $parameters=array(), $nocache=false) { + global $db_stats, $config; + + if ($config['memcached']['enable'] && $nocache === false) { + $result = $config['memcached']['resource']->get(hash('sha512',$sql.'|'.serialize($parameters))); + if (!empty($result)) { + return $result; + } + } $time_start = microtime(true); $result = dbQuery($sql, $parameters); @@ -309,6 +326,9 @@ function dbFetchRow($sql=null, $parameters=array()) { $db_stats['fetchrow_sec'] += number_format(($time_end - $time_start), 8); $db_stats['fetchrow']++; + if ($config['memcached']['enable'] && $nocache === false) { + $config['memcached']['resource']->set(hash('sha512',$sql.'|'.serialize($parameters)),$row,$config['memcached']['ttl']); + } return $row; } else { @@ -325,10 +345,11 @@ function dbFetchRow($sql=null, $parameters=array()) { * */ -function dbFetchCell($sql, $parameters=array()) { - global $db_stats; +function dbFetchCell($sql, $parameters=array(), $nocache=false) { + global $db_stats, $config; + $time_start = microtime(true); - $row = dbFetchRow($sql, $parameters); + $row = dbFetchRow($sql, $parameters, $nocache); if ($row) { return array_shift($row); // shift first field off first row @@ -350,11 +371,11 @@ function dbFetchCell($sql, $parameters=array()) { * */ -function dbFetchColumn($sql, $parameters=array()) { +function dbFetchColumn($sql, $parameters=array(), $nocache=false) { global $db_stats; $time_start = microtime(true); $cells = array(); - foreach (dbFetch($sql, $parameters) as $row) { + foreach (dbFetch($sql, $parameters, $nocache) as $row) { $cells[] = array_shift($row); } @@ -375,9 +396,9 @@ function dbFetchColumn($sql, $parameters=array()) { */ -function dbFetchKeyValue($sql, $parameters=array()) { +function dbFetchKeyValue($sql, $parameters=array(), $nocache=false) { $data = array(); - foreach (dbFetch($sql, $parameters) as $row) { + foreach (dbFetch($sql, $parameters, $nocache) as $row) { $key = array_shift($row); if (sizeof($row) == 1) { // if there were only 2 fields in the result diff --git a/includes/defaults.inc.php b/includes/defaults.inc.php index 7807ba179..7f1e7bd77 100644 --- a/includes/defaults.inc.php +++ b/includes/defaults.inc.php @@ -51,11 +51,13 @@ $config['own_hostname'] = 'localhost'; // Location of executables $config['rrdtool'] = '/usr/bin/rrdtool'; +$config['rrdtool_version'] = 1.4; // Doesn't need to contain minor numbers. $config['fping'] = '/usr/bin/fping'; +$config['fping6'] = 'fping6'; $config['fping_options']['retries'] = 3; $config['fping_options']['timeout'] = 500; $config['fping_options']['count'] = 3; -$config['fping_options']['millisec'] = 20; +$config['fping_options']['millisec'] = 200; $config['snmpwalk'] = '/usr/bin/snmpwalk'; $config['snmpget'] = '/usr/bin/snmpget'; $config['snmpbulkwalk'] = '/usr/bin/snmpbulkwalk'; @@ -73,6 +75,7 @@ $config['sfdp'] = '/usr/bin/sfdp'; $config['memcached']['enable'] = false; $config['memcached']['host'] = 'localhost'; $config['memcached']['port'] = 11211; +$config['memcached']['ttl'] = 240; $config['slow_statistics'] = true; // THIS WILL CHANGE TO FALSE IN FUTURE @@ -110,7 +113,7 @@ $config['mono_font'] = 'DejaVuSansMono'; $config['favicon'] = ''; $config['page_refresh'] = '300'; // Refresh the page every xx seconds, 0 to disable -$config['front_page'] = 'pages/front/default.php'; +$config['front_page'] = 'pages/front/tiles.php'; $config['front_page_settings']['top']['ports'] = 10; $config['front_page_settings']['top']['devices'] = 10; $config['front_page_down_box_limit'] = 10; @@ -191,14 +194,9 @@ $config['snmp']['v3'][0]['cryptopass'] = ''; // Privacy (Encryption) Passphrase $config['snmp']['v3'][0]['cryptoalgo'] = 'AES'; // AES | DES -// RRD Format Settings -// These should not normally be changed -// Though one could conceivably increase or decrease the size of each RRA if one had performance problems -// Or if one had a very fast I/O subsystem with no performance worries. -$config['rrd_rra'] = ' RRA:AVERAGE:0.5:1:2016 RRA:AVERAGE:0.5:6:1440 RRA:AVERAGE:0.5:24:1440 RRA:AVERAGE:0.5:288:1440 '; -$config['rrd_rra'] .= ' RRA:MAX:0.5:1:720 RRA:MIN:0.5:6:1440 RRA:MIN:0.5:24:775 RRA:MIN:0.5:288:797 '; -$config['rrd_rra'] .= ' RRA:MAX:0.5:1:720 RRA:MAX:0.5:6:1440 RRA:MAX:0.5:24:775 RRA:MAX:0.5:288:797 '; -$config['rrd_rra'] .= ' RRA:LAST:0.5:1:1440 '; + +// Devices must respond to icmp by default +$config['icmp_check'] = true; // Autodiscovery Settings $config['autodiscovery']['xdp'] = true; @@ -339,11 +337,14 @@ $config['network_map_vis_options'] = '{ randomSeed:2 }, "edges": { + arrows: { + to: {enabled: true, scaleFactor:0.5}, + }, "smooth": { enabled: false }, font: { - size: 12, + size: 14, color: "red", face: "sans", background: "white", @@ -353,19 +354,53 @@ $config['network_map_vis_options'] = '{ } }, "physics": { - "forceAtlas2Based": { - "gravitationalConstant": -800, - "centralGravity": 0.03, - "springLength": 50, - "springConstant": 0, - "damping": 1, + "barnesHut": { + "gravitationalConstant": -2000, + "centralGravity": 0.3, + "springLength": 200, + "springConstant": 0.04, + "damping": 0.09, "avoidOverlap": 1 }, - "maxVelocity": 50, - "minVelocity": 0.01, - "solver": "forceAtlas2Based", - "timestep": 0.30 - } + + "forceAtlas2Based": { + "gravitationalConstant": -50, + "centralGravity": 0.01, + "springLength": 200, + "springConstant": 0.08, + "damping": 0.4, + "avoidOverlap": 1 + }, + + "repulsion": { + "centralGravity": 0.2, + "springLength": 250, + "springConstant": 0.2, + "nodeDistance": 200, + "damping": 0.07 + }, + + "hierarchicalRepulsion": { + "nodeDistance": 300, + "centralGravity": 0.2, + "springLength": 300, + "springConstant": 0.2, + "damping": 0.07 + }, + + "maxVelocity": 50, + "minVelocity": 0.4, + "solver": "hierarchicalRepulsion", + "stabilization": { + "enabled": true, + "iterations": 1000, + "updateInterval": 100, + "onlyDynamicEdges": false, + "fit": true + }, + + "timestep": 0.4, + } }'; // Device page options @@ -374,8 +409,6 @@ $config['show_overview_tab'] = true; // The device overview page options $config['overview_show_sysDescr'] = true; -// Enable version checker & stats -$config['version_check'] = 0; // Enable checking of version in discovery // Poller/Discovery Modules $config['enable_bgp'] = 1; @@ -502,16 +535,17 @@ $config['device_traffic_descr'][] = '/null/'; $config['device_traffic_descr'][] = '/dummy/'; // IRC Bot configuration -$config['irc_host'] = ''; -$config['irc_port'] = ''; -$config['irc_maxretry'] = 3; -$config['irc_nick'] = $config['project_name']; -$config['irc_chan'][] = '##'.$config['project_id']; -$config['irc_pass'] = ''; -$config['irc_external'] = ''; -$config['irc_authtime'] = 3; -$config['irc_debug'] = false; -$config['irc_alert'] = false; +$config['irc_host'] = ''; +$config['irc_port'] = ''; +$config['irc_maxretry'] = 3; +$config['irc_nick'] = $config['project_name']; +$config['irc_chan'][] = '##'.$config['project_id']; +$config['irc_pass'] = ''; +$config['irc_external'] = ''; +$config['irc_authtime'] = 3; +$config['irc_debug'] = false; +$config['irc_alert'] = false; +$config['irc_alert_utf8'] = false; // Authentication $config['allow_unauth_graphs'] = 0; @@ -708,9 +742,10 @@ $config['eventlog_purge'] = 30; $config['authlog_purge'] = 30; // Number in days of how long to keep authlog entries for. $config['perf_times_purge'] = 30; -// Number in days of how long to keep performace pooling stats entries for. -$config['device_perf_purge'] = 30; +// Number in days of how long to keep performace polling stats entries for. +$config['device_perf_purge'] = 7; // Number in days of how long to keep device performance data for. + // Date format for PHP date()s $config['dateformat']['long'] = 'r'; // RFC2822 style @@ -774,8 +809,8 @@ $config['geoloc']['latlng'] = false; // True to enab $config['geoloc']['engine'] = 'google'; $config['map']['engine'] = 'leaflet'; $config['mapael']['default_map'] = 'maps/world_countries.js'; -$config['leaflet']['default_lat'] = '50.898482'; -$config['leaflet']['default_lng'] = '-3.401402'; +$config['leaflet']['default_lat'] = '51.4800'; +$config['leaflet']['default_lng'] = '0'; $config['leaflet']['default_zoom'] = 2; // General GUI options @@ -783,3 +818,9 @@ $config['gui']['network-map']['style'] = 'new';//old is also va // Navbar variables $config['navbar']['manage_groups']['hide'] = 0; + +// Show errored ports in the summary table on the dashboard +$config['summary_errors'] = 0; + +// Default width of the availability map's tiles +$config['availability-map-width'] = 25; diff --git a/includes/definitions.inc.php b/includes/definitions.inc.php index 0fc20c740..d8a4a12f0 100644 --- a/includes/definitions.inc.php +++ b/includes/definitions.inc.php @@ -30,6 +30,19 @@ else { $database_db = mysql_select_db($config['db_name'], $database_link); } +if ($config['memcached']['enable'] === true) { + if (class_exists('Memcached')) { + $config['memcached']['ttl'] = 60; + $config['memcached']['resource'] = new Memcached(); + $config['memcached']['resource']->addServer($config['memcached']['host'], $config['memcached']['port']); + } + else { + echo "WARNING: You have enabled memcached but have not installed the PHP bindings. Disabling memcached support.\n"; + echo "Try 'apt-get install php5-memcached' or 'pecl install memcached'. You will need the php5-dev and libmemcached-dev packages to use pecl.\n\n"; + $config['memcached']['enable'] = 0; + } +} + $clone = $config; foreach (dbFetchRows('select config_name,config_value from config') as $obj) { $clone = array_replace_recursive($clone, mergecnf($obj)); @@ -201,7 +214,7 @@ $config['os'][$os]['group'] = 'unix'; $config['os'][$os]['text'] = 'FreeBSD'; $os = 'pfsense'; -$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['type'] = 'firewall'; $config['os'][$os]['group'] = 'unix'; $config['os'][$os]['text'] = 'pfSense'; @@ -413,6 +426,10 @@ $config['os'][$os]['over'][1]['graph'] = 'device_processor'; $config['os'][$os]['over'][1]['text'] = 'CPU Usage'; $config['os'][$os]['over'][2]['graph'] = 'device_mempool'; $config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +$config['os'][$os]['over'][3]['graph'] = 'device_ciscowlc_numaps'; +$config['os'][$os]['over'][3]['text'] = 'Number of APs'; +$config['os'][$os]['over'][4]['graph'] = 'device_ciscowlc_numclients'; +$config['os'][$os]['over'][4]['text'] = 'Number of Clients'; $config['os'][$os]['icon'] = 'cisco'; // Brocade NOS @@ -536,6 +553,18 @@ $config['os'][$os]['over'][1]['text'] = 'CPU Usage'; $config['os'][$os]['over'][2]['graph'] = 'device_mempool'; $config['os'][$os]['over'][2]['text'] = 'Memory Usage'; +// Pulse Secure OS definition +$os = 'pulse'; +$config['os'][$os]['text'] = 'Pulse Secure'; +$config['os'][$os]['type'] = 'firewall'; +$config['os'][$os]['icon'] = 'junos'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + $os = 'fortigate'; $config['os'][$os]['text'] = 'Fortinet Fortigate'; $config['os'][$os]['type'] = 'firewall'; @@ -634,6 +663,12 @@ $config['os'][$os]['icon'] = 'avaya'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Device Traffic'; +$os = 'avaya-ipo'; +$config['os'][$os]['text'] = 'IP Office Firmware'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'avaya'; + + $os = 'arista_eos'; $config['os'][$os]['text'] = 'Arista EOS'; $config['os'][$os]['type'] = 'network'; @@ -848,6 +883,10 @@ $config['os'][$os]['text'] = 'SonicWALL'; $config['os'][$os]['type'] = 'firewall'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory'; $os = 'zywall'; $config['os'][$os]['text'] = 'ZyXEL ZyWALL'; @@ -1276,6 +1315,42 @@ $config['os'][$os]['icon'] = 'perle'; $config['os'][$os]['over'][0]['graph'] = 'device_bits'; $config['os'][$os]['over'][0]['text'] = 'Traffic'; +// MACOSX +$os = 'macosx'; +$config['os'][$os]['text'] = 'Apple OS X'; +$config['os'][$os]['type'] = 'server'; +$config['os'][$os]['icon'] = 'generic'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// HP MSM +$os = 'hpmsm'; +$config['os'][$os]['text'] = 'HP MSM'; +$config['os'][$os]['type'] = 'wireless'; +$config['os'][$os]['icon'] = 'hp'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Riverbed +$os = 'riverbed'; +$config['os'][$os]['text'] = 'Riverbed'; +$config['os'][$os]['type'] = 'network'; +$config['os'][$os]['icon'] = 'riverbed'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; + +// Appliances +$os = 'fortios'; +$config['os'][$os]['text'] = 'FortiOS'; +$config['os'][$os]['type'] = 'appliance'; +$config['os'][$os]['icon'] = 'fortios'; +$config['os'][$os]['over'][0]['graph'] = 'device_bits'; +$config['os'][$os]['over'][0]['text'] = 'Traffic'; +$config['os'][$os]['over'][1]['graph'] = 'device_processor'; +$config['os'][$os]['over'][1]['text'] = 'CPU Usage'; +$config['os'][$os]['over'][2]['graph'] = 'device_mempool'; +$config['os'][$os]['over'][2]['text'] = 'Memory Usage'; + // Graph Types require_once $config['install_dir'].'/includes/load_db_graph_types.inc.php'; @@ -1439,6 +1514,14 @@ $config['graph_types']['device']['panos_sessions']['section'] = 'firewall'; $config['graph_types']['device']['panos_sessions']['order'] = '0'; $config['graph_types']['device']['panos_sessions']['descr'] = 'Active Sessions'; +//Pulse Secure Graphs +$config['graph_types']['device']['pulse_users']['section'] = 'firewall'; +$config['graph_types']['device']['pulse_users']['order'] = '0'; +$config['graph_types']['device']['pulse_users']['descr'] = 'Active Users'; +$config['graph_types']['device']['pulse_sessions']['section'] = 'firewall'; +$config['graph_types']['device']['pulse_sessions']['order'] = '0'; +$config['graph_types']['device']['pulse_sessions']['descr'] = 'Active Sessions'; + $config['graph_types']['device']['bits']['section'] = 'netstats'; $config['graph_types']['device']['bits']['order'] = '0'; $config['graph_types']['device']['bits']['descr'] = 'Total Traffic'; @@ -1630,10 +1713,15 @@ if (isset($config['enable_printers']) && $config['enable_printers']) { $config['device_types'][$i]['icon'] = 'printer.png'; } +$i++; +$config['device_types'][$i]['text'] = 'Appliance'; +$config['device_types'][$i]['type'] = 'appliance'; +$config['device_types'][$i]['icon'] = 'appliance.png'; + // // No changes below this line # // -$config['version'] = '2014.master'; +$config['version'] = '2015.master'; $config['project_name_version'] = $config['project_name'].' '.$config['version']; if (isset($config['rrdgraph_def_text'])) { @@ -1660,21 +1748,6 @@ if (isset($_SERVER['HTTPS'])) { $config['base_url'] = preg_replace('/^http:/', 'https:', $config['base_url']); } -if ($config['memcached']['enable'] === true) { - if (class_exists('Memcached')) { - $memcache = new Memcached(); - $memcache->addServer($config['memcached']['host'], $config['memcached']['port']); - if ($debug) { - print_r($memcache->getStats()); - } - } - else { - echo "WARNING: You have enabled memcached but have not installed the PHP bindings. Disabling memcached support.\n"; - echo "Try 'apt-get install php5-memcached' or 'pecl install memcached'. You will need the php5-dev and libmemcached-dev packages to use pecl.\n\n"; - $config['memcached']['enable'] = 0; - } -} - // Set some times needed by loads of scripts (it's dynamic, so we do it here!) $config['time']['now'] = time(); $config['time']['now'] -= ($config['time']['now'] % 300); diff --git a/includes/device-groups.inc.php b/includes/device-groups.inc.php index 3e5cee870..a1573ec03 100644 --- a/includes/device-groups.inc.php +++ b/includes/device-groups.inc.php @@ -63,7 +63,7 @@ function GenGroupSQL($pattern, $search='') { $search .= ' &&'; } - $sql = 'SELECT DISTINCT('.str_replace('(', '', $tables[0]).'.device_id) FROM '.implode(',', $tables).' WHERE '.$search.' ('.str_replace(array('%', '@', '!~', '~'), array('', '%', 'NOT LIKE', 'LIKE'), $pattern).')'; + $sql = 'SELECT DISTINCT('.str_replace('(', '', $tables[0]).'.device_id) FROM '.implode(',', $tables).' WHERE '.$search.' ('.str_replace(array('%', '@', '!~', '~'), array('', '.*', 'NOT REGEXP', 'REGEXP'), $pattern).')'; return $sql; }//end GenGroupSQL() diff --git a/includes/discovery/arp-table.inc.php b/includes/discovery/arp-table.inc.php index a292bf25b..69b0d9b75 100644 --- a/includes/discovery/arp-table.inc.php +++ b/includes/discovery/arp-table.inc.php @@ -43,9 +43,7 @@ foreach (explode("\n", $ipNetToMedia_data) as $data) { $old_mac = dbFetchCell('SELECT mac_address from ipv4_mac WHERE ipv4_address=? AND port_id=?', array($ip, $interface['port_id'])); if ($clean_mac != $old_mac && $clean_mac != '' && $old_mac != '') { - if ($debug) { - echo "Changed mac address for $ip from $old_mac to $clean_mac\n"; - } + d_echo("Changed mac address for $ip from $old_mac to $clean_mac\n"); log_event("MAC change: $ip : ".mac_clean_to_readable($old_mac).' -> '.mac_clean_to_readable($clean_mac), $device, 'interface', $interface['port_id']); } @@ -73,9 +71,7 @@ foreach (dbFetchRows($sql) as $entry) { $entry_if = $entry['port_id']; if (!$mac_table[$entry_if][$entry_mac]) { dbDelete('ipv4_mac', '`port_id` = ? AND `mac_address` = ?', array($entry_if, $entry_mac)); - if ($debug) { - echo "Removing MAC $entry_mac from interface ".$interface['ifName']; - } + d_echo("Removing MAC $entry_mac from interface ".$interface['ifName']); echo '-'; } diff --git a/includes/discovery/bgp-peers.inc.php b/includes/discovery/bgp-peers.inc.php index 304bbc6b1..1b87eaecf 100644 --- a/includes/discovery/bgp-peers.inc.php +++ b/includes/discovery/bgp-peers.inc.php @@ -1,7 +1,5 @@ $peer_ip, @@ -70,9 +64,7 @@ if ($config['enable_bgp']) { $peer_ip = Net_IPv6::compress(snmp2ipv6(implode('.', array_slice(explode('.', $peer_ip_snmp), (count(explode('.', $peer_ip_snmp)) - 16))))); if ($peer) { - if ($debug) { - echo "Found peer $peer_ip (AS$peer_as)\n"; - } + d_echo("Found peer $peer_ip (AS$peer_as)\n"); $peerlist[] = array( 'ip' => $peer_ip, @@ -121,19 +113,15 @@ if ($config['enable_bgp']) { $af_data = snmpwalk_cache_oid($device, 'cbgpPeerAddrFamilyEntry', $cbgp, 'CISCO-BGP4-MIB', $config['mibdir']); } - if ($debug) { - echo 'afi data :: '; - print_r($af_data); - } + d_echo('afi data :: '); + d_echo($af_data); foreach ($af_data as $k => $v) { if ($peer2 === true) { list(,$k) = explode('.', $k, 2); } - if ($debug) { - echo "AFISAFI = $k\n"; - } + d_echo("AFISAFI = $k\n"); $afisafi_tmp = explode('.', $k); $safi = array_pop($afisafi_tmp); @@ -162,9 +150,7 @@ if ($config['enable_bgp']) { switch ($entry['jnxBgpM2PeerRemoteAddrType']) { case 'ipv4': $ip = long2ip(hexdec($entry['jnxBgpM2PeerRemoteAddr'])); - if ($debug) { - echo "peerindex for ipv4 $ip is ".$entry['jnxBgpM2PeerIndex']."\n"; - } + d_echo("peerindex for ipv4 $ip is ".$entry['jnxBgpM2PeerIndex']."\n"); $j_peerIndexes[$ip] = $entry['jnxBgpM2PeerIndex']; break; @@ -173,9 +159,7 @@ if ($config['enable_bgp']) { $ip6 = trim(str_replace(' ', '', $entry['jnxBgpM2PeerRemoteAddr']), '"'); $ip6 = substr($ip6, 0, 4).':'.substr($ip6, 4, 4).':'.substr($ip6, 8, 4).':'.substr($ip6, 12, 4).':'.substr($ip6, 16, 4).':'.substr($ip6, 20, 4).':'.substr($ip6, 24, 4).':'.substr($ip6, 28, 4); $ip6 = Net_IPv6::compress($ip6); - if ($debug) { - echo "peerindex for ipv6 $ip6 is ".$entry['jnxBgpM2PeerIndex']."\n"; - } + d_echo("peerindex for ipv6 $ip6 is ".$entry['jnxBgpM2PeerIndex']."\n"); $j_peerIndexes[$ip6] = $entry['jnxBgpM2PeerIndex']; break; diff --git a/includes/discovery/charge.inc.php b/includes/discovery/charge.inc.php index c82863d0f..eeea0961f 100644 --- a/includes/discovery/charge.inc.php +++ b/includes/discovery/charge.inc.php @@ -6,9 +6,7 @@ echo 'Battery Charge: '; $include_dir = 'includes/discovery/charge'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['charge']); -} +d_echo($valid['sensor']['charge']); check_valid_sensors($device, 'charge', $valid['sensor']); diff --git a/includes/discovery/charge/apc.inc.php b/includes/discovery/charge/apc.inc.php index b9858b958..ce98b4b9d 100644 --- a/includes/discovery/charge/apc.inc.php +++ b/includes/discovery/charge/apc.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'apc') { $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.2.3.1.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); // Try High-Precision First if (!empty($oids)) { @@ -27,9 +25,7 @@ if ($device['os'] == 'apc') { else { // Try to just get capacity $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.2.2.1.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if (!empty($oids)) { echo 'APC UPS Battery Charge'; diff --git a/includes/discovery/charge/rfc1628.inc.php b/includes/discovery/charge/rfc1628.inc.php index c7d5742c7..02b85e03f 100644 --- a/includes/discovery/charge/rfc1628.inc.php +++ b/includes/discovery/charge/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.2.4', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { diff --git a/includes/discovery/cisco-cef.inc.php b/includes/discovery/cisco-cef.inc.php index 7b8ef3a80..5f9ef1ca6 100644 --- a/includes/discovery/cisco-cef.inc.php +++ b/includes/discovery/cisco-cef.inc.php @@ -4,9 +4,7 @@ echo 'Cisco CEF Switching Path: '; $cefs = array(); $cefs = snmpwalk_cache_threepart_oid($device, 'CISCO-CEF-MIB::cefSwitchingPath', $cefs); -if ($debug) { - print_r($cefs); -} +d_echo($cefs); if (is_array($cefs)) { if (!is_array($entity_array)) { diff --git a/includes/discovery/cisco-entity-sensor.inc.php b/includes/discovery/cisco-entity-sensor.inc.php index e7053a20d..66340dedb 100644 --- a/includes/discovery/cisco-entity-sensor.inc.php +++ b/includes/discovery/cisco-entity-sensor.inc.php @@ -33,9 +33,7 @@ if ($device['os_group'] == 'cisco') { echo ' entSensorThresholdValue'; $t_oids = snmpwalk_cache_twopart_oid($device, 'entSensorThresholdValue', $t_oids, 'CISCO-ENTITY-SENSOR-MIB'); - if ($debug) { - print_r($oids); - } + d_echo($oids); $entitysensor['voltsDC'] = 'voltage'; $entitysensor['voltsAC'] = 'voltage'; diff --git a/includes/discovery/cisco-vrf.inc.php b/includes/discovery/cisco-vrf.inc.php index 39928b734..aceef192f 100644 --- a/includes/discovery/cisco-vrf.inc.php +++ b/includes/discovery/cisco-vrf.inc.php @@ -34,10 +34,8 @@ if ($config['enable_vrfs']) { $ports_oid = '.1.3.6.1.2.1.10.166.11.1.2.1.1.2'; } - if ($debug) { - echo "\n[DEBUG]\nUsing $vpnmib\n[/DEBUG]\n"; - echo "\n[DEBUG OIDS]\n$rds\n[/DEBUG]\n"; - } + d_echo("\n[DEBUG]\nUsing $vpnmib\n[/DEBUG]\n"); + d_echo("\n[DEBUG OIDS]\n$rds\n[/DEBUG]\n"); $rds = trim($rds); diff --git a/includes/discovery/current.inc.php b/includes/discovery/current.inc.php index c28644184..143d6068c 100644 --- a/includes/discovery/current.inc.php +++ b/includes/discovery/current.inc.php @@ -5,9 +5,7 @@ echo 'Current: '; $include_dir = 'includes/discovery/current'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['current']); -} +d_echo($valid['sensor']['current']); check_valid_sensors($device, 'current', $valid['sensor']); diff --git a/includes/discovery/current/apc.inc.php b/includes/discovery/current/apc.inc.php index e57f26640..8e35df882 100644 --- a/includes/discovery/current/apc.inc.php +++ b/includes/discovery/current/apc.inc.php @@ -9,9 +9,7 @@ if ($device['os'] == 'apc') { } if ($oids) { - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { @@ -64,9 +62,7 @@ if ($device['os'] == 'apc') { // should work with firmware v2 and v3 if ($oids) { echo 'APC PowerNet-MIB Banks '; - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); $type = 'apc'; @@ -132,9 +128,7 @@ if ($device['os'] == 'apc') { $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.26.9.4.3.1.1', '-t 30 -OsqnU', 'PowerNet-MIB'); if ($oids) { echo 'APC PowerNet-MIB Outlets '; - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); $type = 'apc'; @@ -179,9 +173,7 @@ if ($device['os'] == 'apc') { $oids = snmp_walk($device, 'atsConfigPhaseTableIndex', '-OsqnU', 'PowerNet-MIB'); if ($oids) { $type = 'apc'; - if ($debug) { - print_r($oids); - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { @@ -239,9 +231,7 @@ if ($device['os'] == 'apc') { } if (!empty($oids)) { - if ($debug) { - print_r($oids); - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/current/mgeups.inc.php b/includes/discovery/current/mgeups.inc.php index c2a7b77a7..bc80a0b16 100644 --- a/includes/discovery/current/mgeups.inc.php +++ b/includes/discovery/current/mgeups.inc.php @@ -4,9 +4,7 @@ if ($device['os'] == 'mgeups') { echo 'MGE '; $oids = trim(snmp_walk($device, '1.3.6.1.4.1.705.1.7.1', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { @@ -36,9 +34,7 @@ if ($device['os'] == 'mgeups') { }//end for $oids = trim(snmp_walk($device, '1.3.6.1.4.1.705.1.6.1', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/current/rfc1628.inc.php b/includes/discovery/current/rfc1628.inc.php index d86b70808..73811ae10 100644 --- a/includes/discovery/current/rfc1628.inc.php +++ b/includes/discovery/current/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.2.6', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { @@ -28,9 +26,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.4.3.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -49,9 +45,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -70,9 +64,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.5.2.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/current/sentry3.inc.php b/includes/discovery/current/sentry3.inc.php index 6946d3770..45bcc6d9f 100644 --- a/includes/discovery/current/sentry3.inc.php +++ b/includes/discovery/current/sentry3.inc.php @@ -12,9 +12,7 @@ if ($device['os'] == 'sentry3') { // // Check for Infeeds $infeed_oids = snmp_walk($device, "infeedID.$towers.1", '-Osqn', 'Sentry3-MIB'); - if ($debug) { - echo $infeed_oids."\n"; - } + d_echo($infeed_oids."\n"); $infeed_oids = trim($infeed_oids); diff --git a/includes/discovery/current/xups.inc.php b/includes/discovery/current/xups.inc.php index 328ed9801..d6dff4d3f 100644 --- a/includes/discovery/current/xups.inc.php +++ b/includes/discovery/current/xups.inc.php @@ -5,9 +5,7 @@ if ($device['os'] == 'powerware') { echo 'XUPS-MIB '; $oids = snmp_walk($device, 'xupsBatCurrent', '-Osqn', 'XUPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { @@ -28,9 +26,7 @@ if ($device['os'] == 'powerware') { } $oids = trim(snmp_walk($device, 'xupsOutputCurrent', '-OsqnU', 'XUPS-MIB')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -49,9 +45,7 @@ if ($device['os'] == 'powerware') { } $oids = trim(snmp_walk($device, 'xupsInputCurrent', '-OsqnU', 'XUPS-MIB')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/discovery-protocols.inc.php b/includes/discovery/discovery-protocols.inc.php index 0e5d540f1..0afe43311 100644 --- a/includes/discovery/discovery-protocols.inc.php +++ b/includes/discovery/discovery-protocols.inc.php @@ -186,25 +186,19 @@ else { echo "disabled\n"; } -if ($debug) { - print_r($link_exists); -} +d_echo($link_exists); $sql = "SELECT * FROM `links` AS L, `ports` AS I WHERE L.local_port_id = I.port_id AND I.device_id = '".$device['device_id']."'"; foreach (dbFetchRows($sql) as $test) { $local_port_id = $test['local_port_id']; $remote_hostname = $test['remote_hostname']; $remote_port = $test['remote_port']; - if ($debug) { - echo "$local_port_id -> $remote_hostname -> $remote_port \n"; - } + d_echo("$local_port_id -> $remote_hostname -> $remote_port \n"); if (!$link_exists[$local_port_id][$remote_hostname][$remote_port]) { echo '-'; $rows = dbDelete('links', '`id` = ?', array($test['id'])); - if ($debug) { - echo "$rows deleted "; - } + d_echo("$rows deleted "); } } diff --git a/includes/discovery/fanspeeds.inc.php b/includes/discovery/fanspeeds.inc.php index 6ad629549..536232149 100644 --- a/includes/discovery/fanspeeds.inc.php +++ b/includes/discovery/fanspeeds.inc.php @@ -6,9 +6,7 @@ echo 'Fanspeeds : '; $include_dir = 'includes/discovery/fanspeeds'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['fanspeed']); -} +d_echo($valid['sensor']['fanspeed']); check_valid_sensors($device, 'fanspeed', $valid['sensor']); diff --git a/includes/discovery/fanspeeds/areca.inc.php b/includes/discovery/fanspeeds/areca.inc.php index 831cd78a5..cdb0fb791 100644 --- a/includes/discovery/fanspeeds/areca.inc.php +++ b/includes/discovery/fanspeeds/areca.inc.php @@ -3,9 +3,7 @@ // Areca Fanspeeds if ($device['os'] == 'areca') { $oids = snmp_walk($device, '1.3.6.1.4.1.18928.1.2.2.1.9.1.2', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'Areca '; diff --git a/includes/discovery/fanspeeds/dell.inc.php b/includes/discovery/fanspeeds/dell.inc.php index f1ee40d94..d1522a656 100644 --- a/includes/discovery/fanspeeds/dell.inc.php +++ b/includes/discovery/fanspeeds/dell.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'linux') { $oids = snmp_walk($device, 'coolingDevicechassisIndex.1', '-OsqnU', 'MIB-Dell-10892'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/fanspeeds/drac.inc.php b/includes/discovery/fanspeeds/drac.inc.php index 38b80c340..3d9e0bf41 100644 --- a/includes/discovery/fanspeeds/drac.inc.php +++ b/includes/discovery/fanspeeds/drac.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'drac') { $oids = snmp_walk($device, 'coolingDevicechassisIndex.1', '-OsqnU', 'IDRAC-MIB-SMIv2'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/fanspeeds/lmsensors.inc.php b/includes/discovery/fanspeeds/lmsensors.inc.php index a4aa7c6ca..8e288e73d 100644 --- a/includes/discovery/fanspeeds/lmsensors.inc.php +++ b/includes/discovery/fanspeeds/lmsensors.inc.php @@ -3,9 +3,7 @@ // LMSensors Fanspeeds if ($device['os'] == 'linux') { $oids = snmp_walk($device, 'lmFanSensorsDevice', '-OsqnU', 'LM-SENSORS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/fanspeeds/mikrotik.inc.php b/includes/discovery/fanspeeds/mikrotik.inc.php index 9908fdbf0..789769f7d 100644 --- a/includes/discovery/fanspeeds/mikrotik.inc.php +++ b/includes/discovery/fanspeeds/mikrotik.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'routeros') { $oids = snmp_walk($device, 'mtxrHlActiveFan', '-OsqnU', 'MIKROTIK-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids !== false) { echo 'MIKROTIK-MIB '; diff --git a/includes/discovery/fanspeeds/supermicro.inc.php b/includes/discovery/fanspeeds/supermicro.inc.php index be56aec02..c16eb1b09 100644 --- a/includes/discovery/fanspeeds/supermicro.inc.php +++ b/includes/discovery/fanspeeds/supermicro.inc.php @@ -3,9 +3,7 @@ // Supermicro Fanspeeds if ($device['os'] == 'linux') { $oids = snmp_walk($device, '1.3.6.1.4.1.10876.2.1.1.1.1.3', '-OsqnU', 'SUPERMICRO-HEALTH-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/frequencies.inc.php b/includes/discovery/frequencies.inc.php index 23b30b092..93fa17117 100644 --- a/includes/discovery/frequencies.inc.php +++ b/includes/discovery/frequencies.inc.php @@ -6,9 +6,7 @@ echo 'Frequencies: '; $include_dir = 'includes/discovery/frequencies'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['frequency']); -} +d_echo($valid['sensor']['frequency']); check_valid_sensors($device, 'frequency', $valid['sensor']); diff --git a/includes/discovery/frequencies/apc.inc.php b/includes/discovery/frequencies/apc.inc.php index cfb4d08ef..794fe5fc5 100644 --- a/includes/discovery/frequencies/apc.inc.php +++ b/includes/discovery/frequencies/apc.inc.php @@ -3,9 +3,7 @@ // APC if ($device['os'] == 'apc') { $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.8.5.3.2.1.4', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'APC In '; @@ -26,9 +24,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.8.5.4.2.1.4', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC Out '; @@ -53,9 +49,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.3.2.4.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC In '; @@ -68,9 +62,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.4.2.2.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC Out '; diff --git a/includes/discovery/frequencies/mgeups.inc.php b/includes/discovery/frequencies/mgeups.inc.php index 67a31218c..1815a30c6 100644 --- a/includes/discovery/frequencies/mgeups.inc.php +++ b/includes/discovery/frequencies/mgeups.inc.php @@ -4,9 +4,7 @@ if ($device['os'] == 'mgeups') { echo 'MGE '; $oids = trim(snmp_walk($device, '1.3.6.1.4.1.705.1.7.1', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { @@ -30,9 +28,7 @@ if ($device['os'] == 'mgeups') { } $oids = trim(snmp_walk($device, '1.3.6.1.4.1.705.1.6.1', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/frequencies/rfc1628.inc.php b/includes/discovery/frequencies/rfc1628.inc.php index aeadbf3e6..707318154 100644 --- a/includes/discovery/frequencies/rfc1628.inc.php +++ b/includes/discovery/frequencies/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/functions.inc.php b/includes/discovery/functions.inc.php index 512f39cff..dbe5d08dd 100644 --- a/includes/discovery/functions.inc.php +++ b/includes/discovery/functions.inc.php @@ -14,7 +14,7 @@ function discover_new_device($hostname, $device='', $method='', $interface='') { - global $config, $debug; + global $config; if (!empty($config['mydomain']) && isDomainResolves($hostname.'.'.$config['mydomain'])) { $dst_host = $hostname.'.'.$config['mydomain']; @@ -23,32 +23,24 @@ function discover_new_device($hostname, $device='', $method='', $interface='') { $dst_host = $hostname; } - if ($debug) { - echo "discovering $dst_host\n"; - } + d_echo("discovering $dst_host\n"); $ip = gethostbyname($dst_host); if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false && filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) { // $ip isn't a valid IP so it must be a name. if ($ip == $dst_host) { - if ($debug) { - echo "name lookup of $dst_host failed\n"; - } + d_echo("name lookup of $dst_host failed\n"); return false; } } - if ($debug) { - echo "ip lookup result: $ip\n"; - } + d_echo("ip lookup result: $ip\n"); $dst_host = rtrim($dst_host, '.'); // remove trailing dot if (match_network($config['autodiscovery']['nets-exclude'], $ip)) { - if ($debug) { - echo "$ip in an excluded network - skipping\n"; - } + d_echo("$ip in an excluded network - skipping\n"); return false; } @@ -77,9 +69,7 @@ function discover_new_device($hostname, $device='', $method='', $interface='') { } } else { - if ($debug) { - echo "$ip not in a matched network - skipping\n"; - } + d_echo("$ip not in a matched network - skipping\n"); }//end if }//end discover_new_device() @@ -161,11 +151,9 @@ function discover_device($device, $options=null) { function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, $divisor='1', $multiplier='1', $low_limit=null, $low_warn_limit=null, $warn_limit=null, $high_limit=null, $current=null, $poller_type='snmp', $entPhysicalIndex=null, $entPhysicalIndex_measured=null) { - global $config, $debug; + global $config; - if ($debug) { - echo "Discover sensor: $oid, $index, $type, $descr, $poller_type, $precision, $entPhysicalIndex\n"; - } + d_echo("Discover sensor: $oid, $index, $type, $descr, $poller_type, $precision, $entPhysicalIndex\n"); if (is_null($low_warn_limit) && !is_null($warn_limit)) { // Warn limits only make sense when we have both a high and a low limit @@ -218,9 +206,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, $inserted = dbInsert($insert, 'sensors'); - if ($debug) { - echo "( $inserted inserted )\n"; - } + d_echo("( $inserted inserted )\n"); echo '+'; log_event('Sensor Added: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr), $device, 'sensor', $inserted); @@ -258,9 +244,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, if ($high_limit != $sensor_entry['sensor_limit'] && $sensor_entry['sensor_custom'] == 'No') { $update = array('sensor_limit' => ($high_limit == null ? array('NULL') : $high_limit)); $updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id'])); - if ($debug) { - echo "( $updated updated )\n"; - } + d_echo("( $updated updated )\n"); echo 'H'; log_event('Sensor High Limit Updated: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr).' ('.$high_limit.')', $device, 'sensor', $sensor_id); @@ -269,9 +253,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, if ($sensor_entry['sensor_limit_low'] != $low_limit && $sensor_entry['sensor_custom'] == 'No') { $update = array('sensor_limit_low' => ($low_limit == null ? array('NULL') : $low_limit)); $updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id'])); - if ($debug) { - echo "( $updated updated )\n"; - } + d_echo("( $updated updated )\n"); echo 'L'; log_event('Sensor Low Limit Updated: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr).' ('.$low_limit.')', $device, 'sensor', $sensor_id); @@ -280,9 +262,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, if ($warn_limit != $sensor_entry['sensor_limit_warn'] && $sensor_entry['sensor_custom'] == 'No') { $update = array('sensor_limit_warn' => ($warn_limit == null ? array('NULL') : $warn_limit)); $updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id'])); - if ($debug) { - echo "( $updated updated )\n"; - } + d_echo("( $updated updated )\n"); echo 'WH'; log_event('Sensor Warn High Limit Updated: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr).' ('.$warn_limit.')', $device, 'sensor', $sensor_id); @@ -291,9 +271,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, if ($sensor_entry['sensor_limit_low_warn'] != $low_warn_limit && $sensor_entry['sensor_custom'] == 'No') { $update = array('sensor_limit_low_warn' => ($low_warn_limit == null ? array('NULL') : $low_warn_limit)); $updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id'])); - if ($debug) { - echo "( $updated updated )\n"; - } + d_echo("( $updated updated )\n"); echo 'WL'; log_event('Sensor Warn Low Limit Updated: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr).' ('.$low_warn_limit.')', $device, 'sensor', $sensor_id); @@ -314,9 +292,7 @@ function discover_sensor(&$valid, $class, $device, $oid, $index, $type, $descr, $updated = dbUpdate($update, 'sensors', '`sensor_id` = ?', array($sensor_entry['sensor_id'])); echo 'U'; log_event('Sensor Updated: '.mres($class).' '.mres($type).' '.mres($index).' '.mres($descr), $device, 'sensor', $sensor_id); - if ($debug) { - echo "( $updated updated )\n"; - } + d_echo("( $updated updated )\n"); } }//end if $valid[$class][$type][$index] = 1; @@ -417,9 +393,7 @@ function check_valid_sensors($device, $class, $valid, $poller_type='snmp') { foreach ($entries as $entry) { $index = $entry['sensor_index']; $type = $entry['sensor_type']; - if ($debug) { - echo $index.' -> '.$type."\n"; - } + d_echo($index.' -> '.$type."\n"); if (!$valid[$class][$type][$index]) { echo '-'; @@ -436,13 +410,11 @@ function check_valid_sensors($device, $class, $valid, $poller_type='snmp') { function discover_juniAtmVp(&$valid, $port_id, $vp_id, $vp_descr) { - global $config, $debug; + global $config; if (dbFetchCell('SELECT COUNT(*) FROM `juniAtmVp` WHERE `port_id` = ? AND `vp_id` = ?', array($port_id, $vp_id)) == '0') { $inserted = dbInsert(array('port_id' => $port_id, 'vp_id' => $vp_id, 'vp_descr' => $vp_descr), 'juniAtmVp'); - if ($debug) { - echo "( $inserted inserted )\n"; - } + d_echo("( $inserted inserted )\n"); // FIXME vv no $device! log_event('Juniper ATM VP Added: port '.mres($port_id).' vp '.mres($vp_id).' descr'.mres($vp_descr), 'juniAtmVp', $inserted); @@ -457,7 +429,7 @@ function discover_juniAtmVp(&$valid, $port_id, $vp_id, $vp_descr) { function discover_link($local_port_id, $protocol, $remote_port_id, $remote_hostname, $remote_port, $remote_platform, $remote_version, $local_device_id, $remote_device_id) { - global $config, $debug, $link_exists; + global $config, $link_exists; d_echo("$local_port_id, $protocol, $remote_port_id, $remote_hostname, $remote_port, $remote_platform, $remote_version"); @@ -488,9 +460,7 @@ function discover_link($local_port_id, $protocol, $remote_port_id, $remote_hostn $inserted = dbInsert($insert_data, 'links'); echo '+'; - if ($debug) { - echo "( $inserted inserted )"; - } + d_echo("( $inserted inserted )"); } else { $data = dbFetchRow('SELECT * FROM `links` WHERE `remote_hostname` = ? AND `local_port_id` = ? AND `protocol` = ? AND `remote_port` = ?', array($remote_hostname, $local_port_id, $protocol, $remote_port)); @@ -512,9 +482,7 @@ function discover_link($local_port_id, $protocol, $remote_port_id, $remote_hostn $updated = dbUpdate($update_data, 'links', '`id` = ?', array($data['id'])); echo 'U'; - if ($debug) { - echo "( $updated updated )"; - } + d_echo("( $updated updated )"); }//end if }//end if $link_exists[$local_port_id][$remote_hostname][$remote_port] = 1; @@ -523,11 +491,9 @@ function discover_link($local_port_id, $protocol, $remote_port_id, $remote_hostn function discover_storage(&$valid, $device, $index, $type, $mib, $descr, $size, $units, $used=null) { - global $config, $debug; + global $config; - if ($debug) { - echo "$device, $index, $type, $mib, $descr, $units, $used, $size\n"; - } + d_echo("$device, $index, $type, $mib, $descr, $units, $used, $size\n"); if ($descr && $size > '0') { $storage = dbFetchRow('SELECT * FROM `storage` WHERE `storage_index` = ? AND `device_id` = ? AND `storage_mib` = ?', array($index, $device['device_id'], $mib)); @@ -565,11 +531,9 @@ function discover_storage(&$valid, $device, $index, $type, $mib, $descr, $size, function discover_processor(&$valid, $device, $oid, $index, $type, $descr, $precision='1', $current=null, $entPhysicalIndex=null, $hrDeviceIndex=null) { - global $config, $debug; + global $config; - if ($debug) { - echo "$device, $oid, $index, $type, $descr, $precision, $current, $entPhysicalIndex, $hrDeviceIndex\n"; - } + d_echo("$device, $oid, $index, $type, $descr, $precision, $current, $entPhysicalIndex, $hrDeviceIndex\n"); if ($descr) { $descr = trim(str_replace('"', '', $descr)); @@ -604,9 +568,7 @@ function discover_processor(&$valid, $device, $oid, $index, $type, $descr, $prec 'processor_precision' => $precision, ); dbUpdate($update_data, 'processors', '`device_id`=? AND `processor_index`=? AND `processor_type`=?', array($device['device_id'], $index, $type)); - if ($debug) { - print $query."\n"; - } + d_echo($query."\n"); }//end if $valid[$type][$index] = 1; }//end if @@ -615,11 +577,9 @@ function discover_processor(&$valid, $device, $oid, $index, $type, $descr, $prec function discover_mempool(&$valid, $device, $index, $type, $descr, $precision='1', $entPhysicalIndex=null, $hrDeviceIndex=null) { - global $config, $debug; + global $config; - if ($debug) { - echo "$device, $oid, $index, $type, $descr, $precision, $current, $entPhysicalIndex, $hrDeviceIndex\n"; - } + d_echo("$device, $oid, $index, $type, $descr, $precision, $current, $entPhysicalIndex, $hrDeviceIndex\n"); // FIXME implement the mempool_perc, mempool_used, etc. if ($descr) { @@ -663,9 +623,7 @@ function discover_mempool(&$valid, $device, $index, $type, $descr, $precision='1 } dbUpdate($update_data, 'mempools', 'device_id=? AND mempool_index=? AND mempool_type=?', array($device['device_id'], $index, $type)); - if ($debug) { - print $query."\n"; - } + d_echo($query."\n"); }//end if $valid[$type][$index] = 1; }//end if @@ -674,11 +632,9 @@ function discover_mempool(&$valid, $device, $index, $type, $descr, $precision='1 function discover_toner(&$valid, $device, $oid, $index, $type, $descr, $capacity_oid=null, $capacity=null, $current=null) { - global $config, $debug; + global $config; - if ($debug) { - echo "$oid, $index, $type, $descr, $capacity, $capacity_oid\n"; - } + d_echo("$oid, $index, $type, $descr, $capacity, $capacity_oid\n"); if (dbFetchCell('SELECT COUNT(toner_id) FROM `toner` WHERE device_id = ? AND toner_type = ? AND `toner_index` = ? AND `toner_capacity_oid` =?', array($device['device_id'], $type, $index, $capacity_oid)) == '0') { $inserted = dbInsert(array('device_id' => $device['device_id'], 'toner_oid' => $oid, 'toner_capacity_oid' => $capacity_oid, 'toner_index' => $index, 'toner_type' => $type, 'toner_descr' => $descr, 'toner_capacity' => $capacity, 'toner_current' => $current), 'toner'); diff --git a/includes/discovery/hr-device.inc.php b/includes/discovery/hr-device.inc.php index aa168da8c..a00ddc887 100644 --- a/includes/discovery/hr-device.inc.php +++ b/includes/discovery/hr-device.inc.php @@ -6,18 +6,14 @@ $hrDevice_oids = array( 'hrDeviceEntry', 'hrProcessorEntry', ); -if ($debug) { - print_r($hrDevices); -} +d_echo($hrDevices); $hrDevices = array(); foreach ($hrDevice_oids as $oid) { $hrDevices = snmpwalk_cache_oid($device, $oid, $hrDevices, 'HOST-RESOURCES-MIB:HOST-RESOURCES-TYPES'); } -if ($debug) { - print_r($hrDevices); -} +d_echo($hrDevices); if (is_array($hrDevices)) { $hrDevices = $hrDevices; @@ -40,10 +36,8 @@ if (is_array($hrDevices)) { else { $inserted_rows = dbInsert(array('hrDeviceIndex' => mres($hrDevice['hrDeviceIndex']), 'device_id' => mres($device['device_id']), 'hrDeviceType' => mres($hrDevice['hrDeviceType']), 'hrDeviceDescr' => mres($hrDevice['hrDeviceDescr']), 'hrDeviceStatus' => mres($hrDevice['hrDeviceStatus']), 'hrDeviceErrors' => (int) mres($hrDevice['hrDeviceErrors'])), 'hrDevice'); echo '+'; - if ($debug) { - print_r($hrDevice); - echo "$inserted_rows row inserted"; - } + d_echo($hrDevice); + d_echo("$inserted_rows row inserted"); }//end if $valid_hrDevice[$hrDevice['hrDeviceIndex']] = 1; @@ -57,9 +51,7 @@ foreach (dbFetchRows($sql) as $test_hrDevice) { if (!$valid_hrDevice[$test_hrDevice['hrDeviceIndex']]) { echo '-'; dbDelete('hrDevice', '`hrDevice_id` = ?', array($test_hrDevice['hrDevice_id'])); - if ($debug) { - print_r($test_hrDevice); - } + d_echo($test_hrDevice); } } diff --git a/includes/discovery/humidity.inc.php b/includes/discovery/humidity.inc.php index 69b3d9d97..d32be07e4 100644 --- a/includes/discovery/humidity.inc.php +++ b/includes/discovery/humidity.inc.php @@ -6,9 +6,7 @@ echo 'Humidity : '; $include_dir = 'includes/discovery/humidity'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['humidity']); -} +d_echo($valid['sensor']['humidity']); check_valid_sensors($device, 'humidity', $valid['sensor']); diff --git a/includes/discovery/humidity/akcp.inc.php b/includes/discovery/humidity/akcp.inc.php index 07dc0864c..d32406ba2 100644 --- a/includes/discovery/humidity/akcp.inc.php +++ b/includes/discovery/humidity/akcp.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'akcp' || $device['os'] == 'minkelsrms') { $oids = snmp_walk($device, '.1.3.6.1.4.1.3854.1.2.2.1.16.1.4', '-Osqn', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/humidity/mgeups.inc.php b/includes/discovery/humidity/mgeups.inc.php index 3d524d259..0f15b3c24 100644 --- a/includes/discovery/humidity/mgeups.inc.php +++ b/includes/discovery/humidity/mgeups.inc.php @@ -1,7 +1,5 @@ Sensor not available diff --git a/includes/discovery/humidity/netbotz.inc.php b/includes/discovery/humidity/netbotz.inc.php index e4dd44dab..e3f686fd9 100644 --- a/includes/discovery/humidity/netbotz.inc.php +++ b/includes/discovery/humidity/netbotz.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'netbotz') { $oids = snmp_walk($device, '.1.3.6.1.4.1.5528.100.4.1.2.1.4', '-Osqn', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/humidity/sentry3.inc.php b/includes/discovery/humidity/sentry3.inc.php index c3e4ff440..e1417993c 100644 --- a/includes/discovery/humidity/sentry3.inc.php +++ b/includes/discovery/humidity/sentry3.inc.php @@ -4,9 +4,7 @@ if ($device['os'] == 'sentry3') { $oids = snmp_walk($device, 'tempHumidSensorHumidValue', '-Osqn', 'Sentry3-MIB'); $divisor = '1'; $multiplier = '1'; - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/junose-atm-vp.inc.php b/includes/discovery/junose-atm-vp.inc.php index 53916e8dc..f65320fcc 100644 --- a/includes/discovery/junose-atm-vp.inc.php +++ b/includes/discovery/junose-atm-vp.inc.php @@ -7,9 +7,7 @@ if ($device['os'] == 'junose' && $config['enable_ports_junoseatmvp']) { echo 'JunOSe ATM vps : '; $vp_array = snmpwalk_cache_multi_oid($device, 'juniAtmVpStatsInCells', $vp_array, 'Juniper-UNI-ATM-MIB', $config['install_dir'].'/mibs/junose'); $valid_vp = array(); - if ($debug) { - print_r($vp_array); - } + d_echo($vp_array); if (is_array($vp_array)) { foreach ($vp_array as $index => $entry) { @@ -28,16 +26,12 @@ if ($device['os'] == 'junose' && $config['enable_ports_junoseatmvp']) { // Remove ATM vps which weren't redetected here $sql = "SELECT * FROM `ports` AS P, `juniAtmVp` AS J WHERE P.`device_id` = '".$device['device_id']."' AND J.port_id = P.port_id"; - if ($debug) { - print_r($valid_vp); - } + d_echo($valid_vp); foreach (dbFetchRows($sql) as $test) { $port_id = $test['port_id']; $vp_id = $test['vp_id']; - if ($debug) { - echo $port_id.' -> '.$vp_id."\n"; - } + d_echo($port_id.' -> '.$vp_id."\n"); if (!$valid_vp[$port_id][$vp_id]) { echo '-'; diff --git a/includes/discovery/libvirt-vminfo.inc.php b/includes/discovery/libvirt-vminfo.inc.php index 38777b902..8825bf7b4 100644 --- a/includes/discovery/libvirt-vminfo.inc.php +++ b/includes/discovery/libvirt-vminfo.inc.php @@ -59,9 +59,7 @@ if ($config['enable_libvirt'] == '1' && $device['os'] == 'linux') { } $xml = simplexml_load_string(' '.$vm_info_xml); - if ($debug) { - print_r($xml); - } + d_echo($xml); $vmwVmDisplayName = $xml->name; $vmwVmGuestOS = ''; diff --git a/includes/discovery/load.inc.php b/includes/discovery/load.inc.php index aa28fe866..f09ae86e3 100644 --- a/includes/discovery/load.inc.php +++ b/includes/discovery/load.inc.php @@ -5,9 +5,7 @@ echo 'Load: '; $include_dir = 'includes/discovery/load'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['load']); -} +d_echo($valid['sensor']['load']); check_valid_sensors($device, 'load', $valid['sensor']); diff --git a/includes/discovery/load/apc.inc.php b/includes/discovery/load/apc.inc.php index 39927b59f..1d0c7ce5e 100644 --- a/includes/discovery/load/apc.inc.php +++ b/includes/discovery/load/apc.inc.php @@ -30,9 +30,7 @@ if ($device['os'] == 'apc') { } if (!empty($oids)) { - if ($debug) { - print_r($oids); - } + d_echo($oids); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/load/rfc1628.inc.php b/includes/discovery/load/rfc1628.inc.php index c11522f45..01f006782 100644 --- a/includes/discovery/load/rfc1628.inc.php +++ b/includes/discovery/load/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.4.4.1.5', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { diff --git a/includes/discovery/mempools.inc.php b/includes/discovery/mempools.inc.php index 9435b0207..b865b9f43 100644 --- a/includes/discovery/mempools.inc.php +++ b/includes/discovery/mempools.inc.php @@ -9,16 +9,12 @@ require 'includes/include-dir.inc.php'; // Remove memory pools which weren't redetected here $sql = "SELECT * FROM `mempools` WHERE `device_id` = '".$device['device_id']."'"; -if ($debug) { - print_r($valid_mempool); -} +d_echo($valid_mempool); foreach (dbFetchRows($sql) as $test_mempool) { $mempool_index = $test_mempool['mempool_index']; $mempool_type = $test_mempool['mempool_type']; - if ($debug) { - echo $mempool_index.' -> '.$mempool_type."\n"; - } + d_echo($mempool_index.' -> '.$mempool_type."\n"); if (!$valid_mempool[$mempool_type][$mempool_index]) { echo '-'; diff --git a/includes/discovery/mempools/junos.inc.php b/includes/discovery/mempools/junos.inc.php index f3a30c139..2a9ed6bd2 100644 --- a/includes/discovery/mempools/junos.inc.php +++ b/includes/discovery/mempools/junos.inc.php @@ -7,9 +7,7 @@ if ($device['os'] == 'junos') { $mempools_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingDRAMSize', $mempools_array, 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); $mempools_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingMemory', $mempools_array, 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); $mempools_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingDescr', $mempools_array, 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); - if ($debug) { - print_r($mempools_array); - } + d_echo($mempools_array); if (is_array($mempools_array)) { foreach ($mempools_array as $index => $entry) { @@ -18,9 +16,7 @@ if ($device['os'] == 'junos') { continue; } - if ($debug) { - echo $index.' '.$entry['jnxOperatingDescr'].' -> '.$entry['jnxOperatingBuffer'].' -> '.$entry['jnxOperatingDRAMSize']."\n"; - } + d_echo($index.' '.$entry['jnxOperatingDescr'].' -> '.$entry['jnxOperatingBuffer'].' -> '.$entry['jnxOperatingDRAMSize']."\n"); $usage_oid = '.1.3.6.1.4.1.2636.3.1.13.1.8.'.$index; $descr = $entry['jnxOperatingDescr']; diff --git a/includes/discovery/mempools/pulse.inc.php b/includes/discovery/mempools/pulse.inc.php new file mode 100644 index 000000000..97b514a98 --- /dev/null +++ b/includes/discovery/mempools/pulse.inc.php @@ -0,0 +1,23 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +// +// Hardcoded discovery of Memory usage on Pulse Secure devices. +// +if ($device['os'] == 'pulse') { + echo 'PULSE-MEMORY-POOL: '; + + $usage = str_replace('"', "", snmp_get($device, 'PULSESECURE-PSG-MIB::iveMemoryUtil.0', '-OvQ')); + + if (is_numeric($usage)) { + discover_mempool($valid_mempool, $device, 0, 'pulse-mem', 'Main Memory', '100', null, null); + } +} diff --git a/includes/discovery/mempools/sonicwall.inc.php b/includes/discovery/mempools/sonicwall.inc.php new file mode 100644 index 000000000..335237cc6 --- /dev/null +++ b/includes/discovery/mempools/sonicwall.inc.php @@ -0,0 +1,19 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if ($device['os'] == 'sonicwall') { + echo 'SonicWALL-MEMORY-POOL: '; + $usage = snmp_get($device, 'SONICWALL-FIREWALL-IP-STATISTICS-MIB::sonicCurrentRAMUtil.0', '-Ovq'); + if (is_numeric($usage)) { + discover_mempool($valid_mempool, $device, 0, 'sonicwall-mem', 'Memory Utilization', '100', null, null); + } +} diff --git a/includes/discovery/mempools/vrp.inc.php b/includes/discovery/mempools/vrp.inc.php index 180514368..ca06a851e 100644 --- a/includes/discovery/mempools/vrp.inc.php +++ b/includes/discovery/mempools/vrp.inc.php @@ -6,16 +6,12 @@ if ($device['os'] == 'vrp') { $mempools_array = snmpwalk_cache_multi_oid($device, 'hwEntityMemUsage', $mempools_array, 'HUAWEI-ENTITY-EXTENT-MIB', $config['install_dir'].'/mibs'); $mempools_array = snmpwalk_cache_multi_oid($device, 'hwEntityMemSize', $mempools_array, 'HUAWEI-ENTITY-EXTENT-MIB', $config['install_dir'].'/mibs'); $mempools_array = snmpwalk_cache_multi_oid($device, 'hwEntityBomEnDesc', $mempools_array, 'HUAWEI-ENTITY-EXTENT-MIB', $config['install_dir'].'/mibs'); - if ($debug) { - print_r($mempools_array); - } + d_echo($mempools_array); if (is_array($mempools_array)) { foreach ($mempools_array as $index => $entry) { if ($entry['hwEntityMemSize'] != 0) { - if ($debug) { - echo $index.' '.$entry['hwEntityBomEnDesc'].' -> '.$entry['hwEntityMemUsage'].' -> '.$entry['hwEntityMemSize']."\n"; - } + d_echo($index.' '.$entry['hwEntityBomEnDesc'].' -> '.$entry['hwEntityMemUsage'].' -> '.$entry['hwEntityMemSize']."\n"); $usage_oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.1.1.7.'.$index; $descr = $entry['hwEntityBomEnDesc']; diff --git a/includes/discovery/os/avaya-ipo.inc.php b/includes/discovery/os/avaya-ipo.inc.php new file mode 100644 index 000000000..ec4dcfbae --- /dev/null +++ b/includes/discovery/os/avaya-ipo.inc.php @@ -0,0 +1,7 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +if (!$os) { + if (strpos($sysObjectId, '1.3.6.1.4.1.8744.1') !== false) { + $split_oid = explode('.',$sysObjectId); + $model_oid = $split_oid[count($split_oid)-1]; + if ($model_oid >= 40 && $model_oid < 60 || $model_oid = 67) { + $os = 'hpmsm'; + } + } +} diff --git a/includes/discovery/os/ies.inc.php b/includes/discovery/os/ies.inc.php index 62b2e49a6..1079ba8d8 100644 --- a/includes/discovery/os/ies.inc.php +++ b/includes/discovery/os/ies.inc.php @@ -1,7 +1,7 @@ + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +if (!$os) { + if (strpos($sysObjectId, '1.3.6.1.4.1.8072.3.2.16') !== false) { + $os = 'macosx'; + } +} diff --git a/includes/discovery/os/multimatic.inc.php b/includes/discovery/os/multimatic.inc.php index bda05bfb4..13af1913e 100644 --- a/includes/discovery/os/multimatic.inc.php +++ b/includes/discovery/os/multimatic.inc.php @@ -5,5 +5,8 @@ if (!$os) { if (strstr(snmp_get($device, 'UPS-MIB::upsIdentManufacturer.0', '-Oqv', ''), 'Multimatic')) { $os = 'multimatic'; } + if (strstr(snmp_get($device, 'UPS-MIB::upsIdentManufacturer.0', '-Oqv', ''), 'S2S')) { + $os = 'multimatic'; + } } } diff --git a/includes/discovery/os/netgear.inc.php b/includes/discovery/os/netgear.inc.php index 4c8e8246c..21068df05 100644 --- a/includes/discovery/os/netgear.inc.php +++ b/includes/discovery/os/netgear.inc.php @@ -4,4 +4,7 @@ if (!$os) { if (stristr($sysDescr, 'ProSafe')) { $os = 'netgear'; } + elseif (strpos($sysObjectId, '1.3.6.1.4.1.4526') !== FALSE) { + $os = 'netgear'; + } } diff --git a/includes/discovery/os/powerconnect.inc.php b/includes/discovery/os/powerconnect.inc.php index a661245c5..f13f00cc7 100644 --- a/includes/discovery/os/powerconnect.inc.php +++ b/includes/discovery/os/powerconnect.inc.php @@ -2,7 +2,7 @@ if (!$os) { // if (strstr($sysDescr, "Neyland 24T")) { $os = "powerconnect"; } /* Powerconnect 5324 */ - if (stristr($sysDescr, 'PowerConnect ')) { + if (stristr($sysDescr, 'PowerConnect ') && !stristr($sysDescr, 'ArubaOS')) { $os = 'powerconnect'; } else if (preg_match('/Dell.*Gigabit\ Ethernet/i', $sysDescr)) { diff --git a/includes/discovery/os/pulse.inc.php b/includes/discovery/os/pulse.inc.php new file mode 100644 index 000000000..608403dc0 --- /dev/null +++ b/includes/discovery/os/pulse.inc.php @@ -0,0 +1,16 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +if (!$os) { + if (strstr($sysDescr, 'Pulse Connect Secure')) { + $os = 'pulse'; + } +} diff --git a/includes/discovery/os/riverbed.inc.php b/includes/discovery/os/riverbed.inc.php new file mode 100644 index 000000000..f97e68fd8 --- /dev/null +++ b/includes/discovery/os/riverbed.inc.php @@ -0,0 +1,16 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +if (!$os) { + if (strpos($sysObjectId, '1.3.6.1.4.1.17163.1.1') !== false) { + $os = 'riverbed'; + } +} diff --git a/includes/discovery/os/vmware.inc.php b/includes/discovery/os/vmware.inc.php index 9bdeee49f..c6cfe20b5 100644 --- a/includes/discovery/os/vmware.inc.php +++ b/includes/discovery/os/vmware.inc.php @@ -4,4 +4,7 @@ if (!$os) { if (preg_match('/^VMware ESX/', $sysDescr)) { $os = 'vmware'; } + if (preg_match('/^VMware-vCenter-Server-Appliance/', $sysDescr)) { + $os = 'vmware'; + } } diff --git a/includes/discovery/os/vrp.inc.php b/includes/discovery/os/vrp.inc.php index 6c49cf862..b57689271 100644 --- a/includes/discovery/os/vrp.inc.php +++ b/includes/discovery/os/vrp.inc.php @@ -1,15 +1,7 @@ diff --git a/includes/discovery/power.inc.php b/includes/discovery/power.inc.php index 2161e5ec2..d204c4b5c 100644 --- a/includes/discovery/power.inc.php +++ b/includes/discovery/power.inc.php @@ -6,9 +6,7 @@ echo 'Power: '; $include_dir = 'includes/discovery/power'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['power']); -} +d_echo($valid['sensor']['power']); check_valid_sensors($device, 'power', $valid['sensor']); diff --git a/includes/discovery/power/rfc1628.inc.php b/includes/discovery/power/rfc1628.inc.php index 8816ff9b4..adaa5c918 100644 --- a/includes/discovery/power/rfc1628.inc.php +++ b/includes/discovery/power/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo("RFC1628 "); $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.4.3.0", "-OsqnU")); - if ($debug) { - echo($oids."\n"); - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ',$oids); for($i = 1; $i <= $numPhase;$i++) { $current_oid = ".1.3.6.1.2.1.33.1.4.4.1.4.$i"; @@ -22,9 +20,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.3.2.0", "-OsqnU")); - if ($debug) { - echo($oids."\n"); - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ',$oids); for($i = 1; $i <= $numPhase;$i++) { $current_oid = "1.3.6.1.2.1.33.1.3.3.1.5.$i"; @@ -39,9 +35,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, "1.3.6.1.2.1.33.1.5.2.0", "-OsqnU")); - if ($debug) { - echo($oids."\n"); - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ',$oids); for($i = 1; $i <= $numPhase;$i++) { $current_oid = ".1.3.6.1.2.1.33.1.5.3.1.4.$i"; diff --git a/includes/discovery/processors.inc.php b/includes/discovery/processors.inc.php index 3d0eb0cb4..c09501598 100644 --- a/includes/discovery/processors.inc.php +++ b/includes/discovery/processors.inc.php @@ -12,16 +12,12 @@ require 'processors-ucd-old.inc.php'; // Remove processors which weren't redetected here $sql = "SELECT * FROM `processors` WHERE `device_id` = '".$device['device_id']."'"; -if ($debug) { - print_r($valid['processor']); -} +d_echo($valid['processor']); foreach (dbFetchRows($sql) as $test_processor) { $processor_index = $test_processor['processor_index']; $processor_type = $test_processor['processor_type']; - if ($debug) { - echo $processor_index.' -> '.$processor_type."\n"; - } + d_echo($processor_index.' -> '.$processor_type."\n"); if (!$valid['processor'][$processor_type][$processor_index]) { echo '-'; diff --git a/includes/discovery/processors/hrdevice.inc.php b/includes/discovery/processors/hrdevice.inc.php index 2f6c152b7..070a49f06 100644 --- a/includes/discovery/processors/hrdevice.inc.php +++ b/includes/discovery/processors/hrdevice.inc.php @@ -53,6 +53,12 @@ if (is_array($hrDevice_array)) { $descr = 'Processor'; } + // Workaround for Linux where some CPUs don't have a description + if ($device['os'] == 'linux' && empty($entry['hrDeviceDescr'])) { + $descr = 'Processor'; + } + + $descr = str_replace('CPU ', '', $descr); $descr = str_replace('(TM)', '', $descr); $descr = str_replace('(R)', '', $descr); @@ -60,9 +66,7 @@ if (is_array($hrDevice_array)) { $old_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('hrProcessor-'.$index.'.rrd'); $new_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('processor-hr-'.$index.'.rrd'); - if ($debug) { - echo "$old_rrd $new_rrd"; - } + d_echo("$old_rrd $new_rrd"); if (is_file($old_rrd)) { rename($old_rrd, $new_rrd); diff --git a/includes/discovery/processors/ios.inc.php b/includes/discovery/processors/ios.inc.php index 36a18493f..4bcaa0ffa 100644 --- a/includes/discovery/processors/ios.inc.php +++ b/includes/discovery/processors/ios.inc.php @@ -3,9 +3,7 @@ if ($device['os_group'] == 'cisco' || $device['os'] == 'acsw') { echo 'CISCO-PROCESS-MIB: '; $processors_array = snmpwalk_cache_oid($device, 'cpmCPU', null, 'CISCO-PROCESS-MIB'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); foreach ($processors_array as $index => $entry) { if (is_numeric($entry['cpmCPUTotal5minRev']) || is_numeric($entry['cpmCPUTotal5min'])) { @@ -34,9 +32,7 @@ if ($device['os_group'] == 'cisco' || $device['os'] == 'acsw') { if (is_file($old_rrd)) { rename($old_rrd, $new_rrd); - if ($debug) { - echo "$old_rrd $new_rrd"; - } + d_echo("$old_rrd $new_rrd"); echo 'Moved RRD '; } diff --git a/includes/discovery/processors/ironware.inc.php b/includes/discovery/processors/ironware.inc.php index b3f995c87..7acb763d7 100644 --- a/includes/discovery/processors/ironware.inc.php +++ b/includes/discovery/processors/ironware.inc.php @@ -3,9 +3,7 @@ if ($device['os'] == 'ironware' || $device['os_group'] == 'ironware') { echo 'IronWare : '; $processors_array = snmpwalk_cache_triple_oid($device, 'snAgentCpuUtilEntry', $processors_array, 'FOUNDRY-SN-AGENT-MIB'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); foreach ($processors_array as $index => $entry) { if (($entry['snAgentCpuUtilValue'] || $entry['snAgentCpuUtil100thPercent']) && $entry['snAgentCpuUtilInterval'] == '300') { diff --git a/includes/discovery/processors/junos.inc.php b/includes/discovery/processors/junos.inc.php index d15c898f6..c66785ddc 100644 --- a/includes/discovery/processors/junos.inc.php +++ b/includes/discovery/processors/junos.inc.php @@ -7,9 +7,7 @@ if ($device['os'] == 'junos') { $processors_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingDRAMSize', $processors_array, 'JUNIPER-MIB', '+'.$config['install_dir'].'/mibs/junos'); $processors_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingMemory', $processors_array, 'JUNIPER-MIB', '+'.$config['install_dir'].'/mibs/junos'); $processors_array = snmpwalk_cache_multi_oid($device, 'jnxOperatingDescr', $processors_array, 'JUNIPER-MIB', '+'.$config['install_dir'].'/mibs/junos'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); if (is_array($processors_array)) { foreach ($processors_array as $index => $entry) { @@ -18,9 +16,7 @@ if ($device['os'] == 'junos') { continue; } - if ($debug) { - echo $index.' '.$entry['jnxOperatingDescr'].' -> '.$entry['jnxOperatingCPU'].' -> '.$entry['jnxOperatingDRAMSize']."\n"; - } + d_echo($index.' '.$entry['jnxOperatingDescr'].' -> '.$entry['jnxOperatingCPU'].' -> '.$entry['jnxOperatingDRAMSize']."\n"); $usage_oid = '.1.3.6.1.4.1.2636.3.1.13.1.8.'.$index; $descr = $entry['jnxOperatingDescr']; @@ -33,9 +29,7 @@ if ($device['os'] == 'junos') { } $srx_processors_array = snmpwalk_cache_multi_oid($device, 'jnxJsSPUMonitoringCPUUsage', $srx_processors_array, 'JUNIPER-SRX5000-SPU-MONITORING-MIB', '+'.$config['install_dir'].'/mibs/junos'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); if (is_array($srx_processors_array)) { foreach ($srx_processors_array as $index => $entry) { diff --git a/includes/discovery/processors/junose.inc.php b/includes/discovery/processors/junose.inc.php index 81fd03247..a0c997607 100644 --- a/includes/discovery/processors/junose.inc.php +++ b/includes/discovery/processors/junose.inc.php @@ -4,9 +4,7 @@ if ($device['os'] == 'junose') { echo 'JUNOSe : '; $processors_array = snmpwalk_cache_double_oid($device, 'juniSystemModule', $processors_array, 'Juniper-System-MIB', $config['install_dir'].'/mibs/junose'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); foreach ($processors_array as $index => $entry) { if ($entry['juniSystemModuleCpuUtilPct'] && $entry['juniSystemModuleCpuUtilPct'] != '-1') { diff --git a/includes/discovery/processors/pulse.inc.php b/includes/discovery/processors/pulse.inc.php new file mode 100644 index 000000000..4faa47dbb --- /dev/null +++ b/includes/discovery/processors/pulse.inc.php @@ -0,0 +1,25 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. +*/ +// +// Hardcoded discovery of CPU usage on Pulse Secure devices. +// +if ($device['os'] == 'pulse') { + echo 'Pulse Secure : '; + + $descr = 'Processor'; + $usage = str_replace('"', "", snmp_get($device, 'PULSESECURE-PSG-MIB::iveCpuUtil.0', '-OvQ')); + + if (is_numeric($usage)) { + discover_processor($valid['processor'], $device, 'PULSESECURE-PSG-MIB::iveCpuUtil.0', '0', 'pulse-cpu', $descr, + '100', $usage, null, null); + } +} diff --git a/includes/discovery/processors/sonicwall.inc.php b/includes/discovery/processors/sonicwall.inc.php new file mode 100644 index 000000000..8f2f52b0e --- /dev/null +++ b/includes/discovery/processors/sonicwall.inc.php @@ -0,0 +1,23 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ + +if ($device['os'] == 'sonicwall') { + echo 'SonicWALL CPU: '; + + $usage_oid = 'SONICWALL-FIREWALL-IP-STATISTICS-MIB::sonicCurrentCPUUtil.0'; + $usage = snmp_get($device, $usage_oid, '-Ovqn'); + if (is_numeric($usage)) { + discover_processor($valid['processor'], $device, $usage_oid, '0', 'sonicwall', 'CPU', '1', $usage, null, null); + } +} + +unset($processors_array); diff --git a/includes/discovery/processors/vrp.inc.php b/includes/discovery/processors/vrp.inc.php index c8a17126b..3cdbcdf2e 100644 --- a/includes/discovery/processors/vrp.inc.php +++ b/includes/discovery/processors/vrp.inc.php @@ -6,16 +6,12 @@ if ($device['os'] == 'vrp') { $processors_array = snmpwalk_cache_multi_oid($device, 'hwEntityCpuUsage', $processors_array, 'HUAWEI-ENTITY-EXTENT-MIB', '+'.$config['install_dir'].'/mibs'); $processors_array = snmpwalk_cache_multi_oid($device, 'hwEntityMemSize', $processors_array, 'HUAWEI-ENTITY-EXTENT-MIB', '+'.$config['install_dir'].'/mibs'); $processors_array = snmpwalk_cache_multi_oid($device, 'hwEntityBomEnDesc', $processors_array, 'HUAWEI-ENTITY-EXTENT-MIB', '+'.$config['install_dir'].'/mibs'); - if ($debug) { - print_r($processors_array); - } + d_echo($processors_array); if (is_array($processors_array)) { foreach ($processors_array as $index => $entry) { if ($entry['hwEntityMemSize'] != 0) { - if ($debug) { - echo $index.' '.$entry['hwEntityBomEnDesc'].' -> '.$entry['hwEntityCpuUsage'].' -> '.$entry['hwEntityMemSize']."\n"; - } + d_echo($index.' '.$entry['hwEntityBomEnDesc'].' -> '.$entry['hwEntityCpuUsage'].' -> '.$entry['hwEntityMemSize']."\n"); $usage_oid = '.1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5.'.$index; $descr = $entry['hwEntityBomEnDesc']; diff --git a/includes/discovery/sensors-openbsd.inc.php b/includes/discovery/sensors-openbsd.inc.php new file mode 100644 index 000000000..d479fd49d --- /dev/null +++ b/includes/discovery/sensors-openbsd.inc.php @@ -0,0 +1,63 @@ + $entry) { + // echo("[" . $entry['sensorType'] . "|" . $entry['sensorValue']. "|" . $index . "] "); + if ($entitysensor[$entry['sensorType']] && is_numeric($entry['sensorValue']) && is_numeric($index)) { + $entPhysicalIndex = $index; + $oid = '.1.3.6.1.4.1.30155.2.1.2.1.5.'.$index; + $current = $entry['sensorValue']; + $descr = $entry['sensorDevice'].' '.$entry['sensorDescr']; + $bogus = false; + + $type = $entitysensor[$entry['sensorType']]; + + if ($type == 'voltage') { + $descr = preg_replace('/ voltage/i', '', $descr); + } + + if ($type == 'temperature') { + if ($current < -40 || $current > 200) { + $bogus = true; + } + $descr = preg_replace('/ temperature/i', '', $descr); + } + + // echo($descr . "|" . $index . "|" .$current . "|" . $bogus . "\n"); + if (! $bogus) { + discover_sensor($valid['sensor'], $type, $device, $oid, $index, 'openbsd-sensor', $descr, '1', '1', null, null, null, null, $current); + } + }//end if + }//end foreach +}//end if + +echo "\n"; diff --git a/includes/discovery/sensors.inc.php b/includes/discovery/sensors.inc.php index 6f4d17b35..257777049 100644 --- a/includes/discovery/sensors.inc.php +++ b/includes/discovery/sensors.inc.php @@ -12,6 +12,10 @@ if ($device['os'] == 'netscaler') { include 'includes/discovery/sensors-netscaler.inc.php'; } +if ($device['os'] == 'openbsd') { + include 'includes/discovery/sensors-openbsd.inc.php'; +} + require 'includes/discovery/temperatures.inc.php'; require 'includes/discovery/humidity.inc.php'; require 'includes/discovery/voltages.inc.php'; diff --git a/includes/discovery/states.inc.php b/includes/discovery/states.inc.php index 12a07296b..2eb1c740e 100644 --- a/includes/discovery/states.inc.php +++ b/includes/discovery/states.inc.php @@ -17,9 +17,7 @@ echo 'States: '; $include_dir = 'includes/discovery/states'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['states']); -} +d_echo($valid['sensor']['states']); check_valid_sensors($device, 'states', $valid['sensor']); diff --git a/includes/discovery/states/dell.inc.php b/includes/discovery/states/dell.inc.php index c5c070a74..b8dca50df 100644 --- a/includes/discovery/states/dell.inc.php +++ b/includes/discovery/states/dell.inc.php @@ -15,9 +15,7 @@ if ($device['os'] == 'linux') { $oids = snmp_walk($device, 'virtualDiskNumber', '-Oesqn', 'StorageManagement-MIB'); $main_oid = '.1.3.6.1.4.1.674.10893.1.20.140.1.1.'; - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/states/drac.inc.php b/includes/discovery/states/drac.inc.php index 099599108..5e4c5eba8 100644 --- a/includes/discovery/states/drac.inc.php +++ b/includes/discovery/states/drac.inc.php @@ -15,9 +15,7 @@ if ($device['os'] == "drac") { $oids = snmp_walk($device, "virtualDiskNumber", "-Oesqn", "IDRAC-MIB-SMIv2"); $main_oid = ".1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1."; - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { echo "Dell iDRAC"; diff --git a/includes/discovery/states/rfc1628.inc.php b/includes/discovery/states/rfc1628.inc.php index 0a8a482fd..0dd8e6a14 100644 --- a/includes/discovery/states/rfc1628.inc.php +++ b/includes/discovery/states/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.2.2', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { @@ -27,9 +25,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.2.3', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { diff --git a/includes/discovery/storage.inc.php b/includes/discovery/storage.inc.php index b8b8fd7e3..d04817c9b 100644 --- a/includes/discovery/storage.inc.php +++ b/includes/discovery/storage.inc.php @@ -9,16 +9,12 @@ require 'includes/include-dir.inc.php'; // Remove storage which weren't redetected here $sql = "SELECT * FROM `storage` WHERE `device_id` = '".$device['device_id']."'"; -if ($debug) { - print_r($valid_storage); -} +d_echo($valid_storage); foreach (dbFetchRows($sql) as $test_storage) { $storage_index = $test_storage['storage_index']; $storage_mib = $test_storage['storage_mib']; - if ($debug) { - echo $storage_index.' -> '.$storage_mib."\n"; - } + d_echo($storage_index.' -> '.$storage_mib."\n"); if (!$valid_storage[$storage_mib][$storage_index]) { echo '-'; diff --git a/includes/discovery/storage/hrstorage.inc.php b/includes/discovery/storage/hrstorage.inc.php index f32a48faa..46907e10a 100644 --- a/includes/discovery/storage/hrstorage.inc.php +++ b/includes/discovery/storage/hrstorage.inc.php @@ -36,49 +36,37 @@ if (is_array($hrstorage_array)) { foreach ($config['ignore_mount'] as $bi) { if ($bi == $descr) { $deny = 1; - if ($debug) { - echo "$bi == $descr \n"; - } + d_echo("$bi == $descr \n"); } } foreach ($config['ignore_mount_string'] as $bi) { if (strpos($descr, $bi) !== false) { $deny = 1; - if ($debug) { - echo "strpos: $descr, $bi \n"; - } + d_echo("strpos: $descr, $bi \n"); } } foreach ($config['ignore_mount_regexp'] as $bi) { if (preg_match($bi, $descr) > '0') { $deny = 1; - if ($debug) { - echo "preg_match $bi, $descr \n"; - } + d_echo("preg_match $bi, $descr \n"); } } if (isset($config['ignore_mount_removable']) && $config['ignore_mount_removable'] && $fstype == 'hrStorageRemovableDisk') { $deny = 1; - if ($debug) { - echo "skip(removable)\n"; - } + d_echo("skip(removable)\n"); } if (isset($config['ignore_mount_network']) && $config['ignore_mount_network'] && $fstype == 'hrStorageNetworkDisk') { $deny = 1; - if ($debug) { - echo "skip(network)\n"; - } + d_echo("skip(network)\n"); } if (isset($config['ignore_mount_optical']) && $config['ignore_mount_optical'] && $fstype == 'hrStorageCompactDisc') { $deny = 1; - if ($debug) { - echo "skip(cd)\n"; - } + d_echo("skip(cd)\n"); } if (!$deny && is_numeric($index)) { diff --git a/includes/discovery/storage/netapp-storage.inc.php b/includes/discovery/storage/netapp-storage.inc.php index 83709c07f..49cd0d803 100644 --- a/includes/discovery/storage/netapp-storage.inc.php +++ b/includes/discovery/storage/netapp-storage.inc.php @@ -20,27 +20,21 @@ if (is_array($netapp_storage)) { foreach ($config['ignore_mount'] as $bi) { if ($bi == $descr) { $deny = 1; - if ($debug) { - echo "$bi == $descr \n"; - } + d_echo("$bi == $descr \n"); } } foreach ($config['ignore_mount_string'] as $bi) { if (strpos($descr, $bi) !== false) { $deny = 1; - if ($debug) { - echo "strpos: $descr, $bi \n"; - } + d_echo("strpos: $descr, $bi \n"); } } foreach ($config['ignore_mount_regexp'] as $bi) { if (preg_match($bi, $descr) > '0') { $deny = 1; - if ($debug) { - echo "preg_match $bi, $descr \n"; - } + d_echo("preg_match $bi, $descr \n"); } } diff --git a/includes/discovery/temperatures.inc.php b/includes/discovery/temperatures.inc.php index 25f385500..60e01b0ba 100644 --- a/includes/discovery/temperatures.inc.php +++ b/includes/discovery/temperatures.inc.php @@ -6,9 +6,7 @@ echo 'Temperatures: '; $include_dir = 'includes/discovery/temperatures'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['temperature']); -} +d_echo($valid['sensor']['temperature']); check_valid_sensors($device, 'temperature', $valid['sensor']); diff --git a/includes/discovery/temperatures/akcp.inc.php b/includes/discovery/temperatures/akcp.inc.php index 76602e418..b60e9ab87 100644 --- a/includes/discovery/temperatures/akcp.inc.php +++ b/includes/discovery/temperatures/akcp.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'akcp' || $device['os'] == 'minkelsrms') { $oids = snmp_walk($device, '.1.3.6.1.4.1.3854.1.2.2.1.16.1.4', '-Osqn', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/temperatures/apc.inc.php b/includes/discovery/temperatures/apc.inc.php index 93aa89dd9..4c7d53cc9 100644 --- a/includes/discovery/temperatures/apc.inc.php +++ b/includes/discovery/temperatures/apc.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'apc') { $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.2.2.2.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'APC UPS Internal '; @@ -77,10 +75,8 @@ if ($device['os'] == 'apc') { $set_oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.13.2.2.4.0', '-OsqnU', ''); $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.13.2.2.10.0', '-OsqnU', ''); - if ($debug) { - echo $set_oids."\n"; - echo $oids."\n"; - } + d_echo($oids."\n"); + d_echo($set_oids."\n"); if ($oids !== false) { echo 'APC Portable Supply Temp '; @@ -103,9 +99,7 @@ if ($device['os'] == 'apc') { unset($oids); $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.13.2.2.12.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids !== false) { echo 'APC Portable Return Temp '; @@ -128,10 +122,7 @@ if ($device['os'] == 'apc') { unset($oids); $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.13.2.2.14.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } - + d_echo($oids."\n"); if ($oids !== false) { echo 'APC Portable Remote Temp '; list($oid,$current_raw) = explode(' ', $oids); diff --git a/includes/discovery/temperatures/areca.inc.php b/includes/discovery/temperatures/areca.inc.php index beffb9dd4..a286ad62f 100644 --- a/includes/discovery/temperatures/areca.inc.php +++ b/includes/discovery/temperatures/areca.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'areca') { $oids = snmp_walk($device, '1.3.6.1.4.1.18928.1.1.2.14.1.2', '-Osqn', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { @@ -29,9 +27,7 @@ if ($device['os'] == 'areca') { } $oids = snmp_walk($device, '1.3.6.1.4.1.18928.1.2.2.1.10.1.2', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'Areca Controller '; diff --git a/includes/discovery/temperatures/cometsystem-p85xx.inc.php b/includes/discovery/temperatures/cometsystem-p85xx.inc.php index 4049e00fb..28e8f0908 100644 --- a/includes/discovery/temperatures/cometsystem-p85xx.inc.php +++ b/includes/discovery/temperatures/cometsystem-p85xx.inc.php @@ -14,7 +14,6 @@ if ($device['os'] == 'cometsystem-p85xx') { /x'; $oids = snmp_walk($device, '.1.3.6.1.4.1.22626.1.5.2', '-OsqnU', ''); - // if ($debug) { echo($oids."\n"); } if ($oids) { $out = array(); foreach (explode("\n", $oids) as $line) { diff --git a/includes/discovery/temperatures/dell.inc.php b/includes/discovery/temperatures/dell.inc.php index acddb2cbc..dcf6a3b9c 100644 --- a/includes/discovery/temperatures/dell.inc.php +++ b/includes/discovery/temperatures/dell.inc.php @@ -27,9 +27,7 @@ if (strstr($device['hardware'], 'Dell')) { // stuff partially copied from akcp sensor $oids = snmp_walk($device, 'temperatureProbeStatus', '-Osqn', 'MIB-Dell-10892'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { @@ -40,9 +38,7 @@ if (strstr($device['hardware'], 'Dell')) { $data = trim($data); if ($data) { list($oid,$status) = explode(' ', $data, 2); - if ($debug) { - echo 'status : '.$status."\n"; - } + d_echo('status : '.$status."\n"); if ($status == 'ok') { // 2 = normal, 0 = not connected diff --git a/includes/discovery/temperatures/ftos-s-series.inc.php b/includes/discovery/temperatures/dnos-ftos-s-series.inc.php similarity index 91% rename from includes/discovery/temperatures/ftos-s-series.inc.php rename to includes/discovery/temperatures/dnos-ftos-s-series.inc.php index f1628240f..fc18b4a6a 100644 --- a/includes/discovery/temperatures/ftos-s-series.inc.php +++ b/includes/discovery/temperatures/dnos-ftos-s-series.inc.php @@ -3,7 +3,7 @@ // Force10 S-Series // F10-S-SERIES-CHASSIS-MIB::chStackUnitTemp.1 = Gauge32: 47 // F10-S-SERIES-CHASSIS-MIB::chStackUnitModelID.1 = STRING: S25-01-GE-24V -if ($device['os'] == 'ftos' || $device['os_group'] == 'ftos') { +if ($device['os'] == 'ftos' || $device['os_group'] == 'ftos' || $device['os'] == 'dnos') { echo 'FTOS C-Series '; $oids = snmpwalk_cache_oid($device, 'chStackUnitTemp', array(), 'F10-S-SERIES-CHASSIS-MIB', $config['mib_dir'].':'.$config['mib_dir'].'/ftos'); diff --git a/includes/discovery/temperatures/drac.inc.php b/includes/discovery/temperatures/drac.inc.php index 1edc63b53..3687db6c9 100644 --- a/includes/discovery/temperatures/drac.inc.php +++ b/includes/discovery/temperatures/drac.inc.php @@ -13,9 +13,7 @@ if (strstr($device['os'], 'drac')) { $oids = snmp_walk($device, 'temperatureProbeStatus', '-Osqn', 'IDRAC-MIB-SMIv2'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { @@ -26,9 +24,7 @@ if (strstr($device['os'], 'drac')) { $data = trim($data); if ($data) { list($oid,$status) = explode(' ', $data, 2); - if ($debug) { - echo 'status : '.$status."\n"; - } + d_echo('status : '.$status."\n"); if ($status == 'ok') { $split_oid = explode('.', $oid); diff --git a/includes/discovery/temperatures/lm-sensors.inc.php b/includes/discovery/temperatures/lm-sensors.inc.php index 1df73f023..1482b356c 100644 --- a/includes/discovery/temperatures/lm-sensors.inc.php +++ b/includes/discovery/temperatures/lm-sensors.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'linux') { $oids = snmp_walk($device, 'lmTempSensorsDevice', '-Osqn', 'LM-SENSORS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/temperatures/mgeups.inc.php b/includes/discovery/temperatures/mgeups.inc.php index 269664697..f60170a5a 100644 --- a/includes/discovery/temperatures/mgeups.inc.php +++ b/includes/discovery/temperatures/mgeups.inc.php @@ -1,7 +1,5 @@ $entry) { if ($entry['diskIONRead'] > '0' || $entry['diskIONWritten'] > '0') { - if ($debug) { - echo "$index ".$entry['diskIODevice']."\n"; - } + d_echo("$index ".$entry['diskIODevice']."\n"); if (dbFetchCell('SELECT COUNT(*) FROM `ucd_diskio` WHERE `device_id` = ? AND `diskio_index` = ?', array($device['device_id'], $index)) == '0') { $inserted = dbInsert(array('device_id' => $device['device_id'], 'diskio_index' => $index, 'diskio_descr' => $entry['diskIODevice']), 'ucd_diskio'); echo '+'; - if ($debug) { - echo $sql." - $inserted inserted "; - } + d_echo($sql." - $inserted inserted "); } else { echo '.'; @@ -31,14 +26,10 @@ if (is_array($diskio_array)) { // Remove diskio entries which weren't redetected here $sql = "SELECT * FROM `ucd_diskio` where `device_id` = '".$device['device_id']."'"; -if ($debug) { - print_r($valid_diskio); -} +d_echo($valid_diskio); foreach (dbFetchRows($sql) as $test) { - if ($debug) { - echo $test['diskio_index'].' -> '.$test['diskio_descr']."\n"; - } + d_echo($test['diskio_index'].' -> '.$test['diskio_descr']."\n"); if (!$valid_diskio[$test['diskio_index']]) { echo '-'; diff --git a/includes/discovery/voltages.inc.php b/includes/discovery/voltages.inc.php index d91fe5d4e..5ce7b438d 100644 --- a/includes/discovery/voltages.inc.php +++ b/includes/discovery/voltages.inc.php @@ -6,9 +6,7 @@ echo 'Voltages: '; $include_dir = 'includes/discovery/voltages'; require 'includes/include-dir.inc.php'; -if ($debug) { - print_r($valid['sensor']['voltage']); -} +d_echo($valid['sensor']['voltage']); check_valid_sensors($device, 'voltage', $valid['sensor']); diff --git a/includes/discovery/voltages/apc.inc.php b/includes/discovery/voltages/apc.inc.php index b309d21fb..a45b7027a 100644 --- a/includes/discovery/voltages/apc.inc.php +++ b/includes/discovery/voltages/apc.inc.php @@ -3,9 +3,7 @@ // APC Voltages if ($device['os'] == 'apc') { $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.8.5.3.3.1.3', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'APC In '; @@ -27,9 +25,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.8.5.4.3.1.3', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC Out '; @@ -54,9 +50,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.3.2.1.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC In '; @@ -70,9 +64,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_get($device, '1.3.6.1.4.1.318.1.1.1.4.2.1.0', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' APC Out '; @@ -88,9 +80,7 @@ if ($device['os'] == 'apc') { // PDU // $oids = snmp_get($device, "1.3.6.1.4.1.318.1.1.12.1.15.0", "-OsqnU", ""); $oids = snmp_walk($device, 'rPDUIdentDeviceLinetoLineVoltage.0', '-OsqnU', 'PowerNet-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' Voltage In '; @@ -104,9 +94,7 @@ if ($device['os'] == 'apc') { } $oids = snmp_walk($device, '1.3.6.1.4.1.318.1.1.26.6.3.1.6', '-OsqnU', 'PowerNet-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo ' Voltage In '; diff --git a/includes/discovery/voltages/areca.inc.php b/includes/discovery/voltages/areca.inc.php index 258203a80..0958f3b50 100644 --- a/includes/discovery/voltages/areca.inc.php +++ b/includes/discovery/voltages/areca.inc.php @@ -3,9 +3,7 @@ // Areca Voltages if ($device['os'] == 'areca') { $oids = snmp_walk($device, '1.3.6.1.4.1.18928.1.2.2.1.8.1.2', '-OsqnU', ''); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'Areca '; diff --git a/includes/discovery/voltages/drac.inc.php b/includes/discovery/voltages/drac.inc.php index e94ce8f02..f009a74cb 100644 --- a/includes/discovery/voltages/drac.inc.php +++ b/includes/discovery/voltages/drac.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == "drac") { $oids = snmp_walk($device, "powerSupplyIndex.1", "-OsqnU", "IDRAC-MIB-SMIv2"); - if ($debug) { - echo($oids."\n"); - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { echo("Dell iDRAC"); diff --git a/includes/discovery/voltages/linux.inc.php b/includes/discovery/voltages/linux.inc.php index f599f02ee..061594ede 100644 --- a/includes/discovery/voltages/linux.inc.php +++ b/includes/discovery/voltages/linux.inc.php @@ -3,9 +3,7 @@ // LMSensors Voltages if ($device['os'] == 'linux') { $oids = snmp_walk($device, 'lmVoltSensorsDevice', '-OsqnU', 'LM-SENSORS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'LM-SENSORS '; diff --git a/includes/discovery/voltages/mgeups.inc.php b/includes/discovery/voltages/mgeups.inc.php index 6e715b995..b31cba73c 100644 --- a/includes/discovery/voltages/mgeups.inc.php +++ b/includes/discovery/voltages/mgeups.inc.php @@ -4,9 +4,7 @@ if ($device['os'] == 'mgeups') { echo 'MGE '; $oids = trim(snmp_walk($device, 'mgoutputVoltage', '-OsqnU', 'MG-SNMP-UPS-MIB')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { @@ -31,9 +29,7 @@ if ($device['os'] == 'mgeups') { } $oids = trim(snmp_walk($device, 'mgeinputVoltage', '-OsqnU', 'MG-SNMP-UPS-MIB')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $numPhase = count(explode("\n", $oids)); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/voltages/mikrotik.inc.php b/includes/discovery/voltages/mikrotik.inc.php index 23bff12ad..0127469e0 100644 --- a/includes/discovery/voltages/mikrotik.inc.php +++ b/includes/discovery/voltages/mikrotik.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == "routeros") { $oids = snmp_walk($device, "mtxrHlVoltage", "-OsqnU", "MIKROTIK-MIB"); - if ($debug) { - echo($oids."\n"); - } + d_echo($oids."\n"); if ($oids !== false) echo("MIKROTIK-MIB "); $divisor = 10.0; $type = "mikrotik"; diff --git a/includes/discovery/voltages/rfc1628.inc.php b/includes/discovery/voltages/rfc1628.inc.php index 4c1f654d6..a89efbbd1 100644 --- a/includes/discovery/voltages/rfc1628.inc.php +++ b/includes/discovery/voltages/rfc1628.inc.php @@ -5,9 +5,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul echo 'RFC1628 '; $oids = snmp_walk($device, '1.3.6.1.2.1.33.1.2.5', '-Osqn', 'UPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { @@ -31,9 +29,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.4.3.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -55,9 +51,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.3.2.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -79,9 +73,7 @@ if (isset($config['modules_compat']['rfc1628'][$device['os']]) && $config['modul } $oids = trim(snmp_walk($device, '1.3.6.1.2.1.33.1.5.2.0', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/discovery/voltages/sentry3.inc.php b/includes/discovery/voltages/sentry3.inc.php index e2d704322..7ccebb3e7 100644 --- a/includes/discovery/voltages/sentry3.inc.php +++ b/includes/discovery/voltages/sentry3.inc.php @@ -2,9 +2,7 @@ if ($device['os'] == 'sentry3') { $oids = snmp_walk($device, 'infeedVoltage', '-OsqnU', 'Sentry3-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if ($oids) { echo 'Sentry3-MIB '; diff --git a/includes/discovery/voltages/siklu.inc.php b/includes/discovery/voltages/siklu.inc.php index 867d0bd30..c80b2e75d 100644 --- a/includes/discovery/voltages/siklu.inc.php +++ b/includes/discovery/voltages/siklu.inc.php @@ -3,9 +3,7 @@ if ($device['os'] == 'siklu') { $oid = 'rbSysVoltage.0'; $oids = snmp_walk($device, "$oid", '-OsqnU', 'RADIO-BRIDGE-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); if (!empty($oids)) { echo 'Siklu Voltage '; diff --git a/includes/discovery/voltages/supermicro.inc.php b/includes/discovery/voltages/supermicro.inc.php index 690d34747..21fc75f8a 100644 --- a/includes/discovery/voltages/supermicro.inc.php +++ b/includes/discovery/voltages/supermicro.inc.php @@ -3,9 +3,7 @@ // Supermicro Voltages if ($device['os'] == 'linux') { $oids = snmp_walk($device, '1.3.6.1.4.1.10876.2.1.1.1.1.3', '-OsqnU', 'SUPERMICRO-HEALTH-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); if ($oids) { diff --git a/includes/discovery/voltages/xups.inc.php b/includes/discovery/voltages/xups.inc.php index b01a94341..8b26b3c08 100644 --- a/includes/discovery/voltages/xups.inc.php +++ b/includes/discovery/voltages/xups.inc.php @@ -6,9 +6,7 @@ if ($device['os'] == 'powerware') { // XUPS-MIB::xupsBatVoltage.0 = INTEGER: 51 $oids = snmp_walk($device, 'xupsBatVoltage', '-Osqn', 'XUPS-MIB'); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); $oids = trim($oids); foreach (explode("\n", $oids) as $data) { @@ -30,9 +28,7 @@ if ($device['os'] == 'powerware') { // XUPS-MIB::xupsInputNumPhases.0 = INTEGER: 1 $oids = trim(snmp_walk($device, 'xupsInputNumPhases', '-OsqnU', 'XUPS-MIB')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -53,9 +49,7 @@ if ($device['os'] == 'powerware') { // XUPS-MIB::xupsOutputNumPhases.0 = INTEGER: 1 $oids = trim(snmp_walk($device, 'xupsOutputNumPhases', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { @@ -76,9 +70,7 @@ if ($device['os'] == 'powerware') { // XUPS-MIB::xupsBypassNumPhases.0 = INTEGER: 1 $oids = trim(snmp_walk($device, 'xupsBypassNumPhases', '-OsqnU')); - if ($debug) { - echo $oids."\n"; - } + d_echo($oids."\n"); list($unused,$numPhase) = explode(' ', $oids); for ($i = 1; $i <= $numPhase; $i++) { diff --git a/includes/functions.php b/includes/functions.php index c29a4fea5..11411158a 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -96,14 +96,12 @@ function logfile($string) { } function getHostOS($device){ - global $config, $debug; + global $config; $sysDescr = snmp_get ($device, "SNMPv2-MIB::sysDescr.0", "-Ovq"); $sysObjectId = snmp_get ($device, "SNMPv2-MIB::sysObjectID.0", "-Ovqn"); - if ($debug) { - echo("| $sysDescr | $sysObjectId | "); - } + d_echo("| $sysDescr | $sysObjectId | "); $path = $config['install_dir'] . "/includes/discovery/os"; $dir_handle = @opendir($path) or die("Unable to open $path"); @@ -152,31 +150,7 @@ function interface_errors($rrd_file, $period = '-1d') { function getImage($device) { global $config; - $device['os'] = strtolower($device['os']); - - if ($device['icon'] && file_exists($config['html_dir'] . "/images/os/" . $device['icon'] . ".png")) { - $image = ''; - } - elseif (isset($config['os'][$device['os']]['icon']) && $config['os'][$device['os']]['icon'] && file_exists($config['html_dir'] . "/images/os/" . $config['os'][$device['os']]['icon'] . ".png")) { - $image = ''; - } - else { - if (file_exists($config['html_dir'] . '/images/os/' . $device['os'] . '.png')) { - $image = ''; - } - if ($device['os'] == "linux") { - $features = strtolower(trim($device['features'])); - list($distro) = explode(" ", $features); - if (file_exists($config['html_dir'] . "/images/os/$distro" . ".png")) { - $image = ''; - } - } - if (empty($image)) { - $image = ''; - } - } - - return $image; + return ''; } function getImageSrc($device) { @@ -184,10 +158,10 @@ function getImageSrc($device) { $device['os'] = strtolower($device['os']); - if ($device['icon'] && file_exists($config['html_dir'] . "/images/os/" . $device['icon'] . ".png")) { + if (!empty($device['icon']) && file_exists($config['html_dir'] . "/images/os/" . $device['icon'] . ".png")) { $image = $config['base_url'] . '/images/os/' . $device['icon'] . '.png'; } - elseif ($config['os'][$device['os']]['icon'] && file_exists($config['html_dir'] . "/images/os/" . $config['os'][$device['os']]['icon'] . ".png")) { + elseif (!empty($config['os'][$device['os']]['icon']) && file_exists($config['html_dir'] . "/images/os/" . $config['os'][$device['os']]['icon'] . ".png")) { $image = $config['base_url'] . '/images/os/' . $config['os'][$device['os']]['icon'] . '.png'; } else { @@ -270,7 +244,7 @@ function addHost($host, $snmpver, $port = '161', $transport = 'udp', $quiet = '0 list($hostshort) = explode(".", $host); // Test Database Exists - if (dbFetchCell("SELECT COUNT(*) FROM `devices` WHERE `hostname` = ?", array($host)) == '0') { + if (host_exists($host) === false) { if ($config['addhost_alwayscheckip'] === TRUE) { $ip = gethostbyname($host); } else { @@ -278,7 +252,8 @@ function addHost($host, $snmpver, $port = '161', $transport = 'udp', $quiet = '0 } if (ip_exists($ip) === false) { // Test reachability - if ($force_add == 1 || isPingable($host)) { + $address_family = snmpTransportToAddressFamily($transport); + if ($force_add == 1 || isPingable($host, $address_family)) { if (empty($snmpver)) { // Try SNMPv2c $snmpver = 'v2c'; @@ -504,34 +479,49 @@ function isSNMPable($device) { } } -function isPingable($hostname,$device_id = FALSE) { +/** + * Check if the given host responds to ICMP echo requests ("pings"). + * + * @param string $hostname The hostname or IP address to send ping requests to. + * @param int $address_family The address family (AF_INET for IPv4 or AF_INET6 for IPv6) to use. Defaults to IPv4. Will *not* be autodetected for IP addresses, so it has to be set to AF_INET6 when pinging an IPv6 address or an IPv6-only host. + * @param array $attribs The device attributes + * + * @return bool TRUE if the host responded to at least one ping request, FALSE otherwise. + */ +function isPingable($hostname, $address_family = AF_INET, $attribs = array()) { global $config; - $fping_params = ''; - if(is_numeric($config['fping_options']['retries']) || $config['fping_options']['retries'] > 1) { - $fping_params .= ' -r ' . $config['fping_options']['retries']; - } - if(is_numeric($config['fping_options']['timeout']) || $config['fping_options']['timeout'] > 1) { - $fping_params .= ' -t ' . $config['fping_options']['timeout']; - } - if(is_numeric($config['fping_options']['count']) || $config['fping_options']['count'] > 0) { - $fping_params .= ' -c ' . $config['fping_options']['count']; - } - if(is_numeric($config['fping_options']['millisec']) || $config['fping_options']['millisec'] > 0) { - $fping_params .= ' -p ' . $config['fping_options']['millisec']; - } $response = array(); - $status = fping($hostname,$fping_params); - if ($status['loss'] == 100) { - $response['result'] = FALSE; + if (can_ping_device($attribs) === true) { + $fping_params = ''; + if(is_numeric($config['fping_options']['retries']) || $config['fping_options']['retries'] > 1) { + $fping_params .= ' -r ' . $config['fping_options']['retries']; + } + if(is_numeric($config['fping_options']['timeout']) || $config['fping_options']['timeout'] > 1) { + $fping_params .= ' -t ' . $config['fping_options']['timeout']; + } + if(is_numeric($config['fping_options']['count']) || $config['fping_options']['count'] > 0) { + $fping_params .= ' -c ' . $config['fping_options']['count']; + } + if(is_numeric($config['fping_options']['millisec']) || $config['fping_options']['millisec'] > 0) { + $fping_params .= ' -p ' . $config['fping_options']['millisec']; + } + $status = fping($hostname,$fping_params,$address_family); + if ($status['loss'] == 100) { + $response['result'] = FALSE; + } + else { + $response['result'] = TRUE; + } + if (is_numeric($status['avg'])) { + $response['last_ping_timetaken'] = $status['avg']; + } + $response['db'] = $status; } else { - $response['result'] = TRUE; + $response['result'] = true; + $response['last_ping_timetaken'] = 0; } - if (is_numeric($status['avg'])) { - $response['last_ping_timetaken'] = $status['avg']; - } - $response['db'] = $status; return($response); } @@ -594,13 +584,17 @@ function createHost($host, $community = NULL, $snmpver, $port = 161, $transport if ($device['os']) { - $device_id = dbInsert($device, 'devices'); - - if ($device_id) { - return($device_id); + if (host_exists($host) === false) { + $device_id = dbInsert($device, 'devices'); + if ($device_id) { + return($device_id); + } + else { + return false; + } } else { - return FALSE; + return false; } } else { @@ -699,8 +693,6 @@ function get_astext($asn) { # Use this function to write to the eventlog table function log_event($text, $device = NULL, $type = NULL, $reference = NULL) { - global $debug; - if (!is_array($device)) { $device = device_by_id_cache($device); } @@ -831,7 +823,7 @@ function isHexString($str) { # Include all .inc.php files in $dir function include_dir($dir, $regex = "") { - global $device, $config, $debug, $valid; + global $device, $config, $valid; if ($regex == "") { $regex = "/\.inc\.php$/"; @@ -840,9 +832,7 @@ function include_dir($dir, $regex = "") { if ($handle = opendir($config['install_dir'] . '/' . $dir)) { while (false !== ($file = readdir($handle))) { if (filetype($config['install_dir'] . '/' . $dir . '/' . $file) == 'file' && preg_match($regex, $file)) { - if ($debug) { - echo("Including: " . $config['install_dir'] . '/' . $dir . '/' . $file . "\n"); - } + d_echo("Including: " . $config['install_dir'] . '/' . $dir . '/' . $file . "\n"); include($config['install_dir'] . '/' . $dir . '/' . $file); } @@ -854,7 +844,7 @@ function include_dir($dir, $regex = "") { function is_port_valid($port, $device) { - global $config, $debug; + global $config; if (strstr($port['ifDescr'], "irtual")) { $valid = 0; @@ -869,9 +859,7 @@ function is_port_valid($port, $device) { foreach ($fringe as $bi) { if (strstr($if, $bi)) { $valid = 0; - if ($debug) { - echo("ignored : $bi : $if"); - } + d_echo("ignored : $bi : $if"); } } if (is_array($config['bad_if_regexp'])) { @@ -882,9 +870,7 @@ function is_port_valid($port, $device) { foreach ($fringe as $bi) { if (preg_match($bi ."i", $if)) { $valid = 0; - if ($debug) { - echo("ignored : $bi : ".$if); - } + d_echo("ignored : $bi : ".$if); } } } @@ -896,9 +882,7 @@ function is_port_valid($port, $device) { foreach ($fringe as $bi) { if (strstr($port['ifType'], $bi)) { $valid = 0; - if ($debug) { - echo("ignored ifType : ".$port['ifType']." (matched: ".$bi." )"); - } + d_echo("ignored ifType : ".$port['ifType']." (matched: ".$bi." )"); } } } @@ -918,7 +902,7 @@ function is_port_valid($port, $device) { function scan_new_plugins() { - global $config, $debug; + global $config; $installed = 0; // Track how many plugins we install. @@ -1199,7 +1183,7 @@ function ip_exists($ip) { return true; } -function fping($host,$params) { +function fping($host,$params,$address_family = AF_INET) { global $config; @@ -1209,7 +1193,13 @@ function fping($host,$params) { 2 => array("pipe", "w") ); - $process = proc_open($config['fping'] . ' -e -q ' .$params . ' ' .$host.' 2>&1', $descriptorspec, $pipes); + // Default to AF_INET (IPv4) + $fping_path = $config['fping']; + if ($address_family == AF_INET6) { + $fping_path = $config['fping6']; + } + + $process = proc_open($fping_path . ' -e -q ' .$params . ' ' .$host.' 2>&1', $descriptorspec, $pipes); $read = ''; if (is_resource($process)) { @@ -1246,3 +1236,52 @@ function force_influx_data($type,$data) { return(sprintf("%.1f",$data)); } }// end force_influx_data + +function get_last_commit() { + return `git log -n 1|head -n1`; +}//end get_last_commit + +/** + * Try to determine the address family (IPv4 or IPv6) associated with an SNMP + * transport specifier (like "udp", "udp6", etc.). + * + * @param string $transport The SNMP transport specifier, for example "udp", + * "udp6", "tcp", or "tcp6". See `man snmpcmd`, + * section "Agent Specification" for a full list. + * + * @return int The address family associated with the given transport + * specifier: AF_INET for IPv4 (or local connections not associated + * with an IP stack), AF_INET6 for IPv6. + */ +function snmpTransportToAddressFamily($transport) { + if (!isset($transport)) { + $transport = 'udp'; + } + + $ipv6_snmp_transport_specifiers = array('udp6', 'udpv6', 'udpipv6', 'tcp6', 'tcpv6', 'tcpipv6'); + + if (in_array($transport, $ipv6_snmp_transport_specifiers)) { + return AF_INET6; + } + else { + return AF_INET; + } +} + +/** + * Checks if the $hostname provided exists in the DB already + * + * @param string $hostname The hostname to check for + * + * @return bool true if hostname already exists + * false if hostname doesn't exist +**/ +function host_exists($hostname) { + $count = dbFetchCell("SELECT COUNT(*) FROM `devices` WHERE `hostname` = ?", array($hostname)); + if ($count > 0) { + return true; + } + else { + return false; + } +} diff --git a/includes/include-dir.inc.php b/includes/include-dir.inc.php index d5c0a7eab..2d6c1456d 100644 --- a/includes/include-dir.inc.php +++ b/includes/include-dir.inc.php @@ -8,9 +8,7 @@ if ($include_dir_regexp == '' || !isset($include_dir_regexp)) { if ($handle = opendir($config['install_dir'].'/'.$include_dir)) { while (false !== ($file = readdir($handle))) { if (filetype($config['install_dir'].'/'.$include_dir.'/'.$file) == 'file' && preg_match($include_dir_regexp, $file)) { - if ($debug) { - echo 'Including: '.$config['install_dir'].'/'.$include_dir.'/'.$file."\n"; - } + d_echo('Including: '.$config['install_dir'].'/'.$include_dir.'/'.$file."\n"); include $config['install_dir'].'/'.$include_dir.'/'.$file; } diff --git a/includes/polling/applications.inc.php b/includes/polling/applications.inc.php index f0291ac67..4258129a6 100644 --- a/includes/polling/applications.inc.php +++ b/includes/polling/applications.inc.php @@ -1,9 +1,7 @@ 0) { if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:any:COUNTER:600:0:125000000000 \ - DS:a:COUNTER:600:0:125000000000 \ - DS:aaaa:COUNTER:600:0:125000000000 \ - DS:cname:COUNTER:600:0:125000000000 \ - DS:mx:COUNTER:600:0:125000000000 \ - DS:ns:COUNTER:600:0:125000000000 \ - DS:ptr:COUNTER:600:0:125000000000 \ - DS:soa:COUNTER:600:0:125000000000 \ - DS:srv:COUNTER:600:0:125000000000 \ + '--step 300 + DS:any:COUNTER:600:0:125000000000 + DS:a:COUNTER:600:0:125000000000 + DS:aaaa:COUNTER:600:0:125000000000 + DS:cname:COUNTER:600:0:125000000000 + DS:mx:COUNTER:600:0:125000000000 + DS:ns:COUNTER:600:0:125000000000 + DS:ptr:COUNTER:600:0:125000000000 + DS:soa:COUNTER:600:0:125000000000 + DS:srv:COUNTER:600:0:125000000000 DS:spf:COUNTER:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/drbd.inc.php b/includes/polling/applications/drbd.inc.php index e7027d1ff..13ae0d3dd 100644 --- a/includes/polling/applications/drbd.inc.php +++ b/includes/polling/applications/drbd.inc.php @@ -12,17 +12,17 @@ foreach (explode('|', $agent_data['app']['drbd'][$app['app_instance']]) as $part if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:ns:DERIVE:600:0:125000000000 \ - DS:nr:DERIVE:600:0:125000000000 \ - DS:dw:DERIVE:600:0:125000000000 \ - DS:dr:DERIVE:600:0:125000000000 \ - DS:al:DERIVE:600:0:125000000000 \ - DS:bm:DERIVE:600:0:125000000000 \ - DS:lo:GAUGE:600:0:125000000000 \ - DS:pe:GAUGE:600:0:125000000000 \ - DS:ua:GAUGE:600:0:125000000000 \ - DS:ap:GAUGE:600:0:125000000000 \ + '--step 300 + DS:ns:DERIVE:600:0:125000000000 + DS:nr:DERIVE:600:0:125000000000 + DS:dw:DERIVE:600:0:125000000000 + DS:dr:DERIVE:600:0:125000000000 + DS:al:DERIVE:600:0:125000000000 + DS:bm:DERIVE:600:0:125000000000 + DS:lo:GAUGE:600:0:125000000000 + DS:pe:GAUGE:600:0:125000000000 + DS:ua:GAUGE:600:0:125000000000 + DS:ap:GAUGE:600:0:125000000000 DS:oos:GAUGE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/mailscanner.inc.php b/includes/polling/applications/mailscanner.inc.php index ed85c61e3..8796b506d 100644 --- a/includes/polling/applications/mailscanner.inc.php +++ b/includes/polling/applications/mailscanner.inc.php @@ -14,13 +14,13 @@ list ($msg_recv, $msg_rejected, $msg_relay, $msg_sent, $msg_waiting, $spam, $vir if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:msg_recv:COUNTER:600:0:125000000000 \ - DS:msg_rejected:COUNTER:600:0:125000000000 \ - DS:msg_relay:COUNTER:600:0:125000000000 \ - DS:msg_sent:COUNTER:600:0:125000000000 \ - DS:msg_waiting:COUNTER:600:0:125000000000 \ - DS:spam:COUNTER:600:0:125000000000 \ + '--step 300 + DS:msg_recv:COUNTER:600:0:125000000000 + DS:msg_rejected:COUNTER:600:0:125000000000 + DS:msg_relay:COUNTER:600:0:125000000000 + DS:msg_sent:COUNTER:600:0:125000000000 + DS:msg_waiting:COUNTER:600:0:125000000000 + DS:spam:COUNTER:600:0:125000000000 DS:virus:COUNTER:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/memcached.inc.php b/includes/polling/applications/memcached.inc.php index f6ce4a55c..e5246a40e 100644 --- a/includes/polling/applications/memcached.inc.php +++ b/includes/polling/applications/memcached.inc.php @@ -9,25 +9,25 @@ echo 'memcached('.$app['app_instance'].') '; if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:uptime:GAUGE:600:0:125000000000 \ - DS:threads:GAUGE:600:0:125000000000 \ - DS:rusage_user_ms:DERIVE:600:0:125000000000 \ - DS:rusage_system_ms:DERIVE:600:0:125000000000 \ - DS:curr_items:GAUGE:600:0:125000000000 \ - DS:total_items:DERIVE:600:0:125000000000 \ - DS:limit_maxbytes:GAUGE:600:0:125000000000 \ - DS:curr_connections:GAUGE:600:0:125000000000 \ - DS:total_connections:DERIVE:600:0:125000000000 \ - DS:conn_structures:GAUGE:600:0:125000000000 \ - DS:bytes:GAUGE:600:0:125000000000 \ - DS:cmd_get:DERIVE:600:0:125000000000 \ - DS:cmd_set:DERIVE:600:0:125000000000 \ - DS:get_hits:DERIVE:600:0:125000000000 \ - DS:get_misses:DERIVE:600:0:125000000000 \ - DS:evictions:DERIVE:600:0:125000000000 \ - DS:bytes_read:DERIVE:600:0:125000000000 \ - DS:bytes_written:DERIVE:600:0:125000000000 \ + '--step 300 + DS:uptime:GAUGE:600:0:125000000000 + DS:threads:GAUGE:600:0:125000000000 + DS:rusage_user_ms:DERIVE:600:0:125000000000 + DS:rusage_system_ms:DERIVE:600:0:125000000000 + DS:curr_items:GAUGE:600:0:125000000000 + DS:total_items:DERIVE:600:0:125000000000 + DS:limit_maxbytes:GAUGE:600:0:125000000000 + DS:curr_connections:GAUGE:600:0:125000000000 + DS:total_connections:DERIVE:600:0:125000000000 + DS:conn_structures:GAUGE:600:0:125000000000 + DS:bytes:GAUGE:600:0:125000000000 + DS:cmd_get:DERIVE:600:0:125000000000 + DS:cmd_set:DERIVE:600:0:125000000000 + DS:get_hits:DERIVE:600:0:125000000000 + DS:get_misses:DERIVE:600:0:125000000000 + DS:evictions:DERIVE:600:0:125000000000 + DS:bytes_read:DERIVE:600:0:125000000000 + DS:bytes_written:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/mysql.inc.php b/includes/polling/applications/mysql.inc.php index bbdc57638..5931f4fdc 100644 --- a/includes/polling/applications/mysql.inc.php +++ b/includes/polling/applications/mysql.inc.php @@ -118,85 +118,85 @@ $string = implode(':', $values); if (!is_file($mysql_rrd)) { rrdtool_create( $mysql_rrd, - '--step 300 \ - DS:IDBLBSe:GAUGE:600:0:125000000000 \ - DS:IBLFh:DERIVE:600:0:125000000000 \ - DS:IBLWn:DERIVE:600:0:125000000000 \ - DS:SRows:DERIVE:600:0:125000000000 \ - DS:SRange:DERIVE:600:0:125000000000 \ - DS:SMPs:DERIVE:600:0:125000000000 \ - DS:SScan:DERIVE:600:0:125000000000 \ - DS:IBIRd:DERIVE:600:0:125000000000 \ - DS:IBIWr:DERIVE:600:0:125000000000 \ - DS:IBILg:DERIVE:600:0:125000000000 \ - DS:IBIFSc:DERIVE:600:0:125000000000 \ - DS:IDBRDd:DERIVE:600:0:125000000000 \ - DS:IDBRId:DERIVE:600:0:125000000000 \ - DS:IDBRRd:DERIVE:600:0:125000000000 \ - DS:IDBRUd:DERIVE:600:0:125000000000 \ - DS:IBRd:DERIVE:600:0:125000000000 \ - DS:IBCd:DERIVE:600:0:125000000000 \ - DS:IBWr:DERIVE:600:0:125000000000 \ - DS:TLIe:DERIVE:600:0:125000000000 \ - DS:TLWd:DERIVE:600:0:125000000000 \ - DS:IBPse:GAUGE:600:0:125000000000 \ - DS:IBPDBp:GAUGE:600:0:125000000000 \ - DS:IBPFe:GAUGE:600:0:125000000000 \ - DS:IBPMps:GAUGE:600:0:125000000000 \ - DS:TOC:GAUGE:600:0:125000000000 \ - DS:OFs:GAUGE:600:0:125000000000 \ - DS:OTs:GAUGE:600:0:125000000000 \ - DS:OdTs:COUNTER:600:0:125000000000 \ - DS:IBSRs:DERIVE:600:0:125000000000 \ - DS:IBSWs:DERIVE:600:0:125000000000 \ - DS:IBOWs:DERIVE:600:0:125000000000 \ - DS:QCs:GAUGE:600:0:125000000000 \ - DS:QCeFy:GAUGE:600:0:125000000000 \ - DS:MaCs:GAUGE:600:0:125000000000 \ - DS:MUCs:GAUGE:600:0:125000000000 \ - DS:ACs:DERIVE:600:0:125000000000 \ - DS:AdCs:DERIVE:600:0:125000000000 \ - DS:TCd:GAUGE:600:0:125000000000 \ - DS:Cs:DERIVE:600:0:125000000000 \ - DS:IBTNx:DERIVE:600:0:125000000000 \ - DS:KRRs:DERIVE:600:0:125000000000 \ - DS:KRs:DERIVE:600:0:125000000000 \ - DS:KWR:DERIVE:600:0:125000000000 \ - DS:KWs:DERIVE:600:0:125000000000 \ - DS:QCQICe:DERIVE:600:0:125000000000 \ - DS:QCHs:DERIVE:600:0:125000000000 \ - DS:QCIs:DERIVE:600:0:125000000000 \ - DS:QCNCd:DERIVE:600:0:125000000000 \ - DS:QCLMPs:DERIVE:600:0:125000000000 \ - DS:CTMPDTs:DERIVE:600:0:125000000000 \ - DS:CTMPTs:DERIVE:600:0:125000000000 \ - DS:CTMPFs:DERIVE:600:0:125000000000 \ - DS:IBIIs:DERIVE:600:0:125000000000 \ - DS:IBIMRd:DERIVE:600:0:125000000000 \ - DS:IBIMs:DERIVE:600:0:125000000000 \ - DS:IBILog:DERIVE:602:0:125000000000 \ - DS:IBISc:DERIVE:602:0:125000000000 \ - DS:IBIFLg:DERIVE:600:0:125000000000 \ - DS:IBFBl:DERIVE:600:0:125000000000 \ - DS:IBIIAo:DERIVE:600:0:125000000000 \ - DS:IBIAd:DERIVE:600:0:125000000000 \ - DS:IBIAe:DERIVE:600:0:125000000000 \ - DS:SFJn:DERIVE:600:0:125000000000 \ - DS:SFRJn:DERIVE:600:0:125000000000 \ - DS:SRe:DERIVE:600:0:125000000000 \ - DS:SRCk:DERIVE:600:0:125000000000 \ - DS:SSn:DERIVE:600:0:125000000000 \ - DS:SQs:DERIVE:600:0:125000000000 \ - DS:BRd:DERIVE:600:0:125000000000 \ - DS:BSt:DERIVE:600:0:125000000000 \ - DS:CDe:DERIVE:600:0:125000000000 \ - DS:CIt:DERIVE:600:0:125000000000 \ - DS:CISt:DERIVE:600:0:125000000000 \ - DS:CLd:DERIVE:600:0:125000000000 \ - DS:CRe:DERIVE:600:0:125000000000 \ - DS:CRSt:DERIVE:600:0:125000000000 \ - DS:CSt:DERIVE:600:0:125000000000 \ - DS:CUe:DERIVE:600:0:125000000000 \ + '--step 300 + DS:IDBLBSe:GAUGE:600:0:125000000000 + DS:IBLFh:DERIVE:600:0:125000000000 + DS:IBLWn:DERIVE:600:0:125000000000 + DS:SRows:DERIVE:600:0:125000000000 + DS:SRange:DERIVE:600:0:125000000000 + DS:SMPs:DERIVE:600:0:125000000000 + DS:SScan:DERIVE:600:0:125000000000 + DS:IBIRd:DERIVE:600:0:125000000000 + DS:IBIWr:DERIVE:600:0:125000000000 + DS:IBILg:DERIVE:600:0:125000000000 + DS:IBIFSc:DERIVE:600:0:125000000000 + DS:IDBRDd:DERIVE:600:0:125000000000 + DS:IDBRId:DERIVE:600:0:125000000000 + DS:IDBRRd:DERIVE:600:0:125000000000 + DS:IDBRUd:DERIVE:600:0:125000000000 + DS:IBRd:DERIVE:600:0:125000000000 + DS:IBCd:DERIVE:600:0:125000000000 + DS:IBWr:DERIVE:600:0:125000000000 + DS:TLIe:DERIVE:600:0:125000000000 + DS:TLWd:DERIVE:600:0:125000000000 + DS:IBPse:GAUGE:600:0:125000000000 + DS:IBPDBp:GAUGE:600:0:125000000000 + DS:IBPFe:GAUGE:600:0:125000000000 + DS:IBPMps:GAUGE:600:0:125000000000 + DS:TOC:GAUGE:600:0:125000000000 + DS:OFs:GAUGE:600:0:125000000000 + DS:OTs:GAUGE:600:0:125000000000 + DS:OdTs:COUNTER:600:0:125000000000 + DS:IBSRs:DERIVE:600:0:125000000000 + DS:IBSWs:DERIVE:600:0:125000000000 + DS:IBOWs:DERIVE:600:0:125000000000 + DS:QCs:GAUGE:600:0:125000000000 + DS:QCeFy:GAUGE:600:0:125000000000 + DS:MaCs:GAUGE:600:0:125000000000 + DS:MUCs:GAUGE:600:0:125000000000 + DS:ACs:DERIVE:600:0:125000000000 + DS:AdCs:DERIVE:600:0:125000000000 + DS:TCd:GAUGE:600:0:125000000000 + DS:Cs:DERIVE:600:0:125000000000 + DS:IBTNx:DERIVE:600:0:125000000000 + DS:KRRs:DERIVE:600:0:125000000000 + DS:KRs:DERIVE:600:0:125000000000 + DS:KWR:DERIVE:600:0:125000000000 + DS:KWs:DERIVE:600:0:125000000000 + DS:QCQICe:DERIVE:600:0:125000000000 + DS:QCHs:DERIVE:600:0:125000000000 + DS:QCIs:DERIVE:600:0:125000000000 + DS:QCNCd:DERIVE:600:0:125000000000 + DS:QCLMPs:DERIVE:600:0:125000000000 + DS:CTMPDTs:DERIVE:600:0:125000000000 + DS:CTMPTs:DERIVE:600:0:125000000000 + DS:CTMPFs:DERIVE:600:0:125000000000 + DS:IBIIs:DERIVE:600:0:125000000000 + DS:IBIMRd:DERIVE:600:0:125000000000 + DS:IBIMs:DERIVE:600:0:125000000000 + DS:IBILog:DERIVE:602:0:125000000000 + DS:IBISc:DERIVE:602:0:125000000000 + DS:IBIFLg:DERIVE:600:0:125000000000 + DS:IBFBl:DERIVE:600:0:125000000000 + DS:IBIIAo:DERIVE:600:0:125000000000 + DS:IBIAd:DERIVE:600:0:125000000000 + DS:IBIAe:DERIVE:600:0:125000000000 + DS:SFJn:DERIVE:600:0:125000000000 + DS:SFRJn:DERIVE:600:0:125000000000 + DS:SRe:DERIVE:600:0:125000000000 + DS:SRCk:DERIVE:600:0:125000000000 + DS:SSn:DERIVE:600:0:125000000000 + DS:SQs:DERIVE:600:0:125000000000 + DS:BRd:DERIVE:600:0:125000000000 + DS:BSt:DERIVE:600:0:125000000000 + DS:CDe:DERIVE:600:0:125000000000 + DS:CIt:DERIVE:600:0:125000000000 + DS:CISt:DERIVE:600:0:125000000000 + DS:CLd:DERIVE:600:0:125000000000 + DS:CRe:DERIVE:600:0:125000000000 + DS:CRSt:DERIVE:600:0:125000000000 + DS:CSt:DERIVE:600:0:125000000000 + DS:CUe:DERIVE:600:0:125000000000 DS:CUMi:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); }//end if diff --git a/includes/polling/applications/nginx.inc.php b/includes/polling/applications/nginx.inc.php index 2de423c89..14fa549fb 100644 --- a/includes/polling/applications/nginx.inc.php +++ b/includes/polling/applications/nginx.inc.php @@ -16,11 +16,11 @@ list($active, $reading, $writing, $waiting, $req) = explode("\n", $nginx); if (!is_file($nginx_rrd)) { rrdtool_create( $nginx_rrd, - '--step 300 \ - DS:Requests:DERIVE:600:0:125000000000 \ - DS:Active:GAUGE:600:0:125000000000 \ - DS:Reading:GAUGE:600:0:125000000000 \ - DS:Writing:GAUGE:600:0:125000000000 \ + '--step 300 + DS:Requests:DERIVE:600:0:125000000000 + DS:Active:GAUGE:600:0:125000000000 + DS:Reading:GAUGE:600:0:125000000000 + DS:Writing:GAUGE:600:0:125000000000 DS:Waiting:GAUGE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/ntp-client.inc.php b/includes/polling/applications/ntp-client.inc.php index cb8cb3c33..0d65ce8ff 100644 --- a/includes/polling/applications/ntp-client.inc.php +++ b/includes/polling/applications/ntp-client.inc.php @@ -14,11 +14,11 @@ list ($offset, $frequency, $jitter, $noise, $stability) = explode("\n", $ntpclie if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:offset:GAUGE:600:-1000:1000 \ - DS:frequency:GAUGE:600:-1000:1000 \ - DS:jitter:GAUGE:600:-1000:1000 \ - DS:noise:GAUGE:600:-1000:1000 \ + '--step 300 + DS:offset:GAUGE:600:-1000:1000 + DS:frequency:GAUGE:600:-1000:1000 + DS:jitter:GAUGE:600:-1000:1000 + DS:noise:GAUGE:600:-1000:1000 DS:stability:GAUGE:600:-1000:1000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/ntpd-server.inc.php b/includes/polling/applications/ntpd-server.inc.php index d08738ab8..1e70e69c3 100644 --- a/includes/polling/applications/ntpd-server.inc.php +++ b/includes/polling/applications/ntpd-server.inc.php @@ -16,20 +16,20 @@ list ($stratum, $offset, $frequency, $jitter, $noise, $stability, $uptime, if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:stratum:GAUGE:600:-1000:1000 \ - DS:offset:GAUGE:600:-1000:1000 \ - DS:frequency:GAUGE:600:-1000:1000 \ - DS:jitter:GAUGE:600:-1000:1000 \ - DS:noise:GAUGE:600:-1000:1000 \ - DS:stability:GAUGE:600:-1000:1000 \ - DS:uptime:GAUGE:600:0:125000000000 \ - DS:buffer_recv:GAUGE:600:0:100000 \ - DS:buffer_free:GAUGE:600:0:100000 \ - DS:buffer_used:GAUGE:600:0:100000 \ - DS:packets_drop:DERIVE:600:0:125000000000 \ - DS:packets_ignore:DERIVE:600:0:125000000000 \ - DS:packets_recv:DERIVE:600:0:125000000000 \ + '--step 300 + DS:stratum:GAUGE:600:-1000:1000 + DS:offset:GAUGE:600:-1000:1000 + DS:frequency:GAUGE:600:-1000:1000 + DS:jitter:GAUGE:600:-1000:1000 + DS:noise:GAUGE:600:-1000:1000 + DS:stability:GAUGE:600:-1000:1000 + DS:uptime:GAUGE:600:0:125000000000 + DS:buffer_recv:GAUGE:600:0:100000 + DS:buffer_free:GAUGE:600:0:100000 + DS:buffer_used:GAUGE:600:0:100000 + DS:packets_drop:DERIVE:600:0:125000000000 + DS:packets_ignore:DERIVE:600:0:125000000000 + DS:packets_recv:DERIVE:600:0:125000000000 DS:packets_sent:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/powerdns.inc.php b/includes/polling/applications/powerdns.inc.php index f5af7d043..f836b5015 100644 --- a/includes/polling/applications/powerdns.inc.php +++ b/includes/polling/applications/powerdns.inc.php @@ -3,9 +3,10 @@ // Polls powerdns statistics from script via SNMP $rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/app-powerdns-'.$app['app_id'].'.rrd'; $options = '-O qv'; +$mib = 'NET-SNMP-EXTEND-MIB'; $oid = 'nsExtendOutputFull.8.112.111.119.101.114.100.110.115'; -$powerdns = snmp_get($device, $oid, $options); +$powerdns = snmp_get($device, $oid, $options, $mib); echo ' powerdns'; @@ -18,28 +19,28 @@ list ($corrupt, $def_cacheInserts, $def_cacheLookup, $latency, $pc_hit, if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:corruptPackets:DERIVE:600:0:125000000000 \ - DS:def_cacheInserts:DERIVE:600:0:125000000000 \ - DS:def_cacheLookup:DERIVE:600:0:125000000000 \ - DS:latency:DERIVE:600:0:125000000000 \ - DS:pc_hit:DERIVE:600:0:125000000000 \ - DS:pc_miss:DERIVE:600:0:125000000000 \ - DS:pc_size:DERIVE:600:0:125000000000 \ - DS:qsize:DERIVE:600:0:125000000000 \ - DS:qc_hit:DERIVE:600:0:125000000000 \ - DS:qc_miss:DERIVE:600:0:125000000000 \ - DS:rec_answers:DERIVE:600:0:125000000000 \ - DS:rec_questions:DERIVE:600:0:125000000000 \ - DS:servfailPackets:DERIVE:600:0:125000000000 \ - DS:q_tcpAnswers:DERIVE:600:0:125000000000 \ - DS:q_tcpQueries:DERIVE:600:0:125000000000 \ - DS:q_timedout:DERIVE:600:0:125000000000 \ - DS:q_udpAnswers:DERIVE:600:0:125000000000 \ - DS:q_udpQueries:DERIVE:600:0:125000000000 \ - DS:q_udp4Answers:DERIVE:600:0:125000000000 \ - DS:q_udp4Queries:DERIVE:600:0:125000000000 \ - DS:q_udp6Answers:DERIVE:600:0:125000000000 \ + '--step 300 + DS:corruptPackets:DERIVE:600:0:125000000000 + DS:def_cacheInserts:DERIVE:600:0:125000000000 + DS:def_cacheLookup:DERIVE:600:0:125000000000 + DS:latency:DERIVE:600:0:125000000000 + DS:pc_hit:DERIVE:600:0:125000000000 + DS:pc_miss:DERIVE:600:0:125000000000 + DS:pc_size:DERIVE:600:0:125000000000 + DS:qsize:DERIVE:600:0:125000000000 + DS:qc_hit:DERIVE:600:0:125000000000 + DS:qc_miss:DERIVE:600:0:125000000000 + DS:rec_answers:DERIVE:600:0:125000000000 + DS:rec_questions:DERIVE:600:0:125000000000 + DS:servfailPackets:DERIVE:600:0:125000000000 + DS:q_tcpAnswers:DERIVE:600:0:125000000000 + DS:q_tcpQueries:DERIVE:600:0:125000000000 + DS:q_timedout:DERIVE:600:0:125000000000 + DS:q_udpAnswers:DERIVE:600:0:125000000000 + DS:q_udpQueries:DERIVE:600:0:125000000000 + DS:q_udp4Answers:DERIVE:600:0:125000000000 + DS:q_udp4Queries:DERIVE:600:0:125000000000 + DS:q_udp6Answers:DERIVE:600:0:125000000000 DS:q_udp6Queries:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); }//end if diff --git a/includes/polling/applications/proxmox.inc.php b/includes/polling/applications/proxmox.inc.php new file mode 100644 index 000000000..37f8d8cd4 --- /dev/null +++ b/includes/polling/applications/proxmox.inc.php @@ -0,0 +1,93 @@ + 0) { + return true; + } + if ($row = dbFetchRow("SELECT id FROM proxmox WHERE vmid = ? AND cluster = ?", array($i, $c))) { + $pmxcache[$c][$i] = (integer) $row['id']; + return true; + } + + return false; +} + +$pmxlines = explode("\n", $proxmox); + +if (count($pmxlines) > 2) { + $pmxcluster = array_shift($pmxlines); + + $pmxcdir = join('/', array($config['rrd_dir'],'proxmox',$pmxcluster)); + if (!is_dir($pmxcdir)) { + mkdir($pmxcdir, 0775, true); + } + + dbUpdate(array('device_id' => $device['device_id'], 'app_type' => 'proxmox', 'app_instance' => $pmxcluster), 'applications', '`device_id` = ? AND `app_type` = ?', array($device['device_id'], 'proxmox')); + + $pmxcache = []; + + foreach ($pmxlines as $vm) { + list($vmid, $vmport, $vmpin, $vmpout, $vmdesc) = explode('/', $vm, 5); + + $rrd_filename = join('/', array( + $pmxcdir, + $vmid.'_netif_'.$vmport.'.rrd')); + + if (!is_file($rrd_filename)) { + rrdtool_create( + $rrd_filename, + ' --step 300 + DS:INOCTETS:DERIVE:600:0:12500000000 + DS:OUTOCTETS:DERIVE:600:0:12500000000 '.$config['rrd_rra']); + } + + rrdtool_update($rrd_filename, 'N:'.$vmpin.':'.$vmpout); + if (proxmox_vm_exists($vmid, $pmxcluster, $pmxcache) === true) { + dbUpdate(array('device_id' => $device['device_id'], 'last_seen' => array('NOW()'), 'description' => $vmdesc), 'proxmox', '`vmid` = ? AND `cluster` = ?', array($vmid, $pmxcluster)); + } + else { + $pmxcache[$pmxcluster][$vmid] = dbInsert(array('cluster' => $pmxcluster, 'vmid' => $vmid, 'description' => $vmdesc, 'device_id' => $device['device_id']), 'proxmox'); + } + + if ($portid = proxmox_port_exists($vmid, $pmxcluster, $vmport) !== false) { + dbUpdate(array('last_seen' => array('NOW()')), 'proxmox_ports', '`vm_id` = ? AND `port` = ?', array($pmxcache[$pmxcluster][$vmid], $vmport)); + } + else { + dbInsert(array('vm_id' => $pmxcache[$pmxcluster][$vmid], 'port' => $vmport), 'proxmox_ports'); + } + + } + + unset($pmxlines); + unset($pmxcluster); + unset($pmxcdir); + unset($proxmox); + unset($pmxcache); +} diff --git a/includes/polling/applications/shoutcast.inc.php b/includes/polling/applications/shoutcast.inc.php index 7d8dcebd0..30428a6b6 100644 --- a/includes/polling/applications/shoutcast.inc.php +++ b/includes/polling/applications/shoutcast.inc.php @@ -29,14 +29,14 @@ foreach ($servers as $item => $server) { if (!is_file($rrdfile)) { rrdtool_create( $rrdfile, - '--step 300 \ - DS:bitrate:GAUGE:600:0:125000000000 \ - DS:traf_in:GAUGE:600:0:125000000000 \ - DS:traf_out:GAUGE:600:0:125000000000 \ - DS:current:GAUGE:600:0:125000000000 \ - DS:status:GAUGE:600:0:125000000000 \ - DS:peak:GAUGE:600:0:125000000000 \ - DS:max:GAUGE:600:0:125000000000 \ + '--step 300 + DS:bitrate:GAUGE:600:0:125000000000 + DS:traf_in:GAUGE:600:0:125000000000 + DS:traf_out:GAUGE:600:0:125000000000 + DS:current:GAUGE:600:0:125000000000 + DS:status:GAUGE:600:0:125000000000 + DS:peak:GAUGE:600:0:125000000000 + DS:max:GAUGE:600:0:125000000000 DS:unique:GAUGE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/applications/tinydns.inc.php b/includes/polling/applications/tinydns.inc.php index 4b5547784..235475dd5 100644 --- a/includes/polling/applications/tinydns.inc.php +++ b/includes/polling/applications/tinydns.inc.php @@ -30,26 +30,26 @@ if (!empty($agent_data['app']['tinydns']) && $app['app_id'] > 0) { if (!is_file($rrd_filename)) { rrdtool_create( $rrd_filename, - '--step 300 \ - DS:a:COUNTER:600:0:125000000000 \ - DS:ns:COUNTER:600:0:125000000000 \ - DS:cname:COUNTER:600:0:125000000000 \ - DS:soa:COUNTER:600:0:125000000000 \ - DS:ptr:COUNTER:600:0:125000000000 \ - DS:hinfo:COUNTER:600:0:125000000000 \ - DS:mx:COUNTER:600:0:125000000000 \ - DS:txt:COUNTER:600:0:125000000000 \ - DS:rp:COUNTER:600:0:125000000000 \ - DS:sig:COUNTER:600:0:125000000000 \ - DS:key:COUNTER:600:0:125000000000 \ - DS:aaaa:COUNTER:600:0:125000000000 \ - DS:axfr:COUNTER:600:0:125000000000 \ - DS:any:COUNTER:600:0:125000000000 \ - DS:total:COUNTER:600:0:125000000000 \ - DS:other:COUNTER:600:0:125000000000 \ - DS:notauth:COUNTER:600:0:125000000000 \ - DS:notimpl:COUNTER:600:0:125000000000 \ - DS:badclass:COUNTER:600:0:125000000000 \ + '--step 300 + DS:a:COUNTER:600:0:125000000000 + DS:ns:COUNTER:600:0:125000000000 + DS:cname:COUNTER:600:0:125000000000 + DS:soa:COUNTER:600:0:125000000000 + DS:ptr:COUNTER:600:0:125000000000 + DS:hinfo:COUNTER:600:0:125000000000 + DS:mx:COUNTER:600:0:125000000000 + DS:txt:COUNTER:600:0:125000000000 + DS:rp:COUNTER:600:0:125000000000 + DS:sig:COUNTER:600:0:125000000000 + DS:key:COUNTER:600:0:125000000000 + DS:aaaa:COUNTER:600:0:125000000000 + DS:axfr:COUNTER:600:0:125000000000 + DS:any:COUNTER:600:0:125000000000 + DS:total:COUNTER:600:0:125000000000 + DS:other:COUNTER:600:0:125000000000 + DS:notauth:COUNTER:600:0:125000000000 + DS:notimpl:COUNTER:600:0:125000000000 + DS:badclass:COUNTER:600:0:125000000000 DS:noquery:COUNTER:600:0:125000000000 '.$config['rrd_rra'] ); }//end if diff --git a/includes/polling/bgp-peers.inc.php b/includes/polling/bgp-peers.inc.php index 7e2698604..56863ec10 100644 --- a/includes/polling/bgp-peers.inc.php +++ b/includes/polling/bgp-peers.inc.php @@ -1,8 +1,5 @@ $b_in:$b_out:$p_in:$p_out "; - } + d_echo("\n".$acc['hostname'].' '.$acc['ifDescr']." $mac -> $b_in:$b_out:$p_in:$p_out "); $rrdfile = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd'); if (!is_file($rrdfile)) { rrdtool_create( $rrdfile, - 'DS:IN:COUNTER:600:0:12500000000 \ - DS:OUT:COUNTER:600:0:12500000000 \ - DS:PIN:COUNTER:600:0:12500000000 \ + 'DS:IN:COUNTER:600:0:12500000000 + DS:OUT:COUNTER:600:0:12500000000 + DS:PIN:COUNTER:600:0:12500000000 DS:POUT:COUNTER:600:0:12500000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/cisco-sla.inc.php b/includes/polling/cisco-sla.inc.php index 432d6651e..bf3ce730f 100644 --- a/includes/polling/cisco-sla.inc.php +++ b/includes/polling/cisco-sla.inc.php @@ -42,7 +42,7 @@ foreach (dbFetchRows('SELECT * FROM `slas` WHERE `device_id` = ? AND `deleted` = if (!is_file($slarrd)) { rrdtool_create( $slarrd, - '--step 300 \ + '--step 300 DS:rtt:GAUGE:600:0:300000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/entity-physical.inc.php b/includes/polling/entity-physical.inc.php index 29a55ce44..24a94cc89 100644 --- a/includes/polling/entity-physical.inc.php +++ b/includes/polling/entity-physical.inc.php @@ -34,18 +34,16 @@ if ($device['os'] == 'ios') { $rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('c6kxbar-'.$index.'-'.$subindex.'.rrd'); - if ($debug) { - echo "$rrd "; - } + d_echo("$rrd "); if (!is_file($rrd)) { rrdtool_create( $rrd, - '--step 300 \ - DS:inutil:GAUGE:600:0:100 \ - DS:oututil:GAUGE:600:0:100 \ - DS:outdropped:DERIVE:600:0:125000000000 \ - DS:outerrors:DERIVE:600:0:125000000000 \ + '--step 300 + DS:inutil:GAUGE:600:0:100 + DS:oututil:GAUGE:600:0:100 + DS:outdropped:DERIVE:600:0:125000000000 + DS:outerrors:DERIVE:600:0:125000000000 DS:inerrors:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 6a3abd926..c6cff3c9c 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -23,9 +23,7 @@ function poll_sensor($device, $class, $unit) { else { // Try 5 times to get a valid temp reading for ($i = 0; $i < 5; $i++) { - if ($debug) { - echo "Attempt $i "; - } + d_echo("Attempt $i "); $sensor_value = trim(str_replace('"', '', snmp_get($device, $sensor['sensor_oid'], '-OUqnv', "SNMPv2-MIB$mib"))); preg_match('/[\d\.]+/', $sensor_value, $temp_response); @@ -98,7 +96,7 @@ function poll_sensor($device, $class, $unit) { if (!is_file($rrd_file)) { rrdtool_create( $rrd_file, - '--step 300 \ + '--step 300 DS:sensor:GAUGE:600:-20000:20000 '.$config['rrd_rra'] ); } @@ -124,12 +122,7 @@ function poll_sensor($device, $class, $unit) { log_event(ucfirst($class).' '.$sensor['sensor_descr'].' above threshold: '.$sensor_value." $unit (> ".$sensor['sensor_limit']." $unit)", $device, $class, $sensor['sensor_id']); } - if ($config['memcached']['enable'] === true) { - $memcache->set('sensor-'.$sensor['sensor_id'].'-value', $sensor_value); - } - else { - dbUpdate(array('sensor_current' => $sensor_value), 'sensors', '`sensor_class` = ? AND `sensor_id` = ?', array($class, $sensor['sensor_id'])); - } + dbUpdate(array('sensor_current' => $sensor_value), 'sensors', '`sensor_class` = ? AND `sensor_id` = ?', array($class, $sensor['sensor_id'])); }//end foreach }//end poll_sensor() @@ -156,6 +149,7 @@ function poll_device($device, $options) { unset($poll_update_query); unset($poll_separator); $poll_update_array = array(); + $update_array = array(); $host_rrd = $config['rrd_dir'].'/'.$device['hostname']; if (!is_dir($host_rrd)) { @@ -163,12 +157,14 @@ function poll_device($device, $options) { echo "Created directory : $host_rrd\n"; } - $ping_response = isPingable($device['hostname'], $device['device_id']); + $address_family = snmpTransportToAddressFamily($device['transport']); + + $ping_response = isPingable($device['hostname'], $address_family, $attribs); $device_perf = $ping_response['db']; $device_perf['device_id'] = $device['device_id']; $device_perf['timestamp'] = array('NOW()'); - if (is_array($device_perf)) { + if (can_ping_device($attribs) === true && is_array($device_perf)) { dbInsert($device_perf, 'device_perf'); } @@ -277,15 +273,22 @@ function poll_device($device, $options) { } // Ping response rrd - $ping_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/ping-perf.rrd'; - if (!is_file($ping_rrd)) { - rrdtool_create($ping_rrd, 'DS:ping:GAUGE:600:0:65535 '.$config['rrd_rra']); - } + if (can_ping_device($attribs) === true) { + $ping_rrd = $config['rrd_dir'].'/'.$device['hostname'].'/ping-perf.rrd'; + if (!is_file($ping_rrd)) { + rrdtool_create($ping_rrd, 'DS:ping:GAUGE:600:0:65535 '.$config['rrd_rra']); + } - if (!empty($ping_time)) { - $fields = array( - 'ping' => $ping_time, - ); + if (!empty($ping_time)) { + $fields = array( + 'ping' => $ping_time, + ); + + rrdtool_update($ping_rrd, $fields); + } + + $update_array['last_ping'] = array('NOW()'); + $update_array['last_ping_timetaken'] = $ping_time; rrdtool_update($ping_rrd, $fields); @@ -296,15 +299,12 @@ function poll_device($device, $options) { $update_array['last_polled'] = array('NOW()'); $update_array['last_polled_timetaken'] = $device_time; - $update_array['last_ping'] = array('NOW()'); - $update_array['last_ping_timetaken'] = $ping_time; // echo("$device_end - $device_start; $device_time $device_run"); echo "Polled in $device_time seconds\n"; - if ($debug) { - echo 'Updating '.$device['hostname'].' - '.print_r($update_array)." \n"; - } + d_echo('Updating '.$device['hostname']."\n"); + d_echo($update_array); $updated = dbUpdate($update_array, 'devices', '`device_id` = ?', array($device['device_id'])); if ($updated) { @@ -380,6 +380,7 @@ function poll_mib_def($device, $mib_name_table, $mib_subdir, $mib_oids, $mib_gra } $oid_count = 0; + $fields = array(); foreach ($oidglist as $fulloid) { list($splitoid, $splitindex) = explode('.', $fulloid, 2); if (is_numeric($snmpdata[$splitindex][$splitoid])) { diff --git a/includes/polling/hr-mib.inc.php b/includes/polling/hr-mib.inc.php index 270e4a403..76fee8489 100644 --- a/includes/polling/hr-mib.inc.php +++ b/includes/polling/hr-mib.inc.php @@ -12,7 +12,7 @@ if (is_numeric($hrSystem[0]['hrSystemProcesses'])) { if (!is_file($rrd_file)) { rrdtool_create( $rrd_file, - '--step 300 \ + '--step 300 DS:procs:GAUGE:600:0:U '.$config['rrd_rra'] ); } @@ -35,7 +35,7 @@ if (is_numeric($hrSystem[0]['hrSystemNumUsers'])) { if (!is_file($rrd_file)) { rrdtool_create( $rrd_file, - '--step 300 \ + '--step 300 DS:users:GAUGE:600:0:U '.$config['rrd_rra'] ); } diff --git a/includes/polling/ipmi.inc.php b/includes/polling/ipmi.inc.php index e96c9bcde..9ede1c0bb 100644 --- a/includes/polling/ipmi.inc.php +++ b/includes/polling/ipmi.inc.php @@ -36,7 +36,7 @@ if ($ipmi['host'] = get_dev_attrib($device, 'ipmi_hostname')) { if (!is_file($rrd_file)) { rrdtool_create( $rrd_file, - '--step 300 \ + '--step 300 DS:sensor:GAUGE:600:-20000:20000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/junose-atm-vp.inc.php b/includes/polling/junose-atm-vp.inc.php index d3002400a..e720d77df 100644 --- a/includes/polling/junose-atm-vp.inc.php +++ b/includes/polling/junose-atm-vp.inc.php @@ -20,9 +20,7 @@ if (count($vp_rows)) { $oid = $vp['ifIndex'].'.'.$vp['vp_id']; - if ($debug) { - echo "$oid "; - } + d_echo("$oid "); $t_vp = $vp_cache[$oid]; @@ -33,22 +31,20 @@ if (count($vp_rows)) { $rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('vp-'.$vp['ifIndex'].'-'.$vp['vp_id'].'.rrd'); - if ($debug) { - echo "$rrd "; - } + d_echo("$rrd "); if (!is_file($rrd)) { rrdtool_create( $rrd, - '--step 300 \ - DS:incells:DERIVE:600:0:125000000000 \ - DS:outcells:DERIVE:600:0:125000000000 \ - DS:inpackets:DERIVE:600:0:125000000000 \ - DS:outpackets:DERIVE:600:0:125000000000 \ - DS:inpacketoctets:DERIVE:600:0:125000000000 \ - DS:outpacketoctets:DERIVE:600:0:125000000000 \ - DS:inpacketerrors:DERIVE:600:0:125000000000 \ - DS:outpacketerrors:DERIVE:600:0:125000000000 \ + '--step 300 + DS:incells:DERIVE:600:0:125000000000 + DS:outcells:DERIVE:600:0:125000000000 + DS:inpackets:DERIVE:600:0:125000000000 + DS:outpackets:DERIVE:600:0:125000000000 + DS:inpacketoctets:DERIVE:600:0:125000000000 + DS:outpacketoctets:DERIVE:600:0:125000000000 + DS:inpacketerrors:DERIVE:600:0:125000000000 + DS:outpacketerrors:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/mempools.inc.php b/includes/polling/mempools.inc.php index 0ca5add4c..f23d4c496 100644 --- a/includes/polling/mempools.inc.php +++ b/includes/polling/mempools.inc.php @@ -50,16 +50,7 @@ foreach (dbFetchRows('SELECT * FROM mempools WHERE device_id = ?', array($device $mempool['state']['mempool_lowestfree'] = $mempool['lowestfree']; } - if ($config['memcached']['enable'] === true) { - if ($debug) { - print_r($mempool['state']); - } - - $memcache->set('mempool-'.$mempool['mempool_id'].'-value', $mempool['state']); - } - else { - dbUpdate($mempool['state'], 'mempools', '`mempool_id` = ?', array($mempool['mempool_id'])); - } + dbUpdate($mempool['state'], 'mempools', '`mempool_id` = ?', array($mempool['mempool_id'])); echo "\n"; }//end foreach diff --git a/includes/polling/mempools/cemp.inc.php b/includes/polling/mempools/cemp.inc.php index 1cc757d37..748c226cb 100644 --- a/includes/polling/mempools/cemp.inc.php +++ b/includes/polling/mempools/cemp.inc.php @@ -7,9 +7,7 @@ $pool_cmd = $config['snmpget'].' -M '.$config['mibdir'].' -m CISCO-ENHANCED-MEM $pool_cmd .= " cempMemPoolUsed.$oid cempMemPoolFree.$oid cempMemPoolLargestFree.$oid"; $pool_cmd .= " | cut -f 1 -d ' '"; -if ($debug) { - echo "SNMP [ $pool_cmd ]\n"; -} +d_echo("SNMP [ $pool_cmd ]\n"); $pool = shell_exec($pool_cmd); diff --git a/includes/polling/mempools/cmp.inc.php b/includes/polling/mempools/cmp.inc.php index f06be53d7..b60ad06da 100644 --- a/includes/polling/mempools/cmp.inc.php +++ b/includes/polling/mempools/cmp.inc.php @@ -7,9 +7,7 @@ $pool_cmd = $config['snmpget'].' -M '.$config['mibdir'].' -m CISCO-MEMORY-POOL- $pool_cmd .= " ciscoMemoryPoolUsed.$oid ciscoMemoryPoolFree.$oid ciscoMemoryPoolLargestFree.$oid"; $pool_cmd .= " | cut -f 1 -d ' '"; -if ($debug) { - echo "$pool_cmd"; -} +d_echo("$pool_cmd"); $pool = shell_exec($pool_cmd); diff --git a/includes/polling/mempools/hpGlobal.inc.php b/includes/polling/mempools/hpGlobal.inc.php index 98ed70149..1e3ebd2ef 100644 --- a/includes/polling/mempools/hpGlobal.inc.php +++ b/includes/polling/mempools/hpGlobal.inc.php @@ -9,14 +9,10 @@ // NETSWITCH-MIB::hpGlobalMemAllocBytes.1 = INTEGER: 1668728 if (!is_array($mempool_cache['hpGlobal'])) { $mempool_cache['hpGlobal'] = snmpwalk_cache_oid($device, 'hpGlobal', null, 'NETSWITCH-MIB', $config['mibdir'].':'.$config['mibdir'].'/hp'); - if ($debug) { - print_r($mempool_cache); - } + d_echo($mempool_cache); } else { - if ($debug) { - echo 'Cached!'; - } + d_echo('Cached!'); } $entry = $mempool_cache['hpGlobal'][$mempool[mempool_index]]; diff --git a/includes/polling/mempools/hpLocal.inc.php b/includes/polling/mempools/hpLocal.inc.php index c503cbe11..0688c00aa 100644 --- a/includes/polling/mempools/hpLocal.inc.php +++ b/includes/polling/mempools/hpLocal.inc.php @@ -9,14 +9,10 @@ // NETSWITCH-MIB::hpLocalMemAllocBytes.1 = INTEGER: 1668728 if (!is_array($mempool_cache['hpLocal'])) { $mempool_cache['hpLocal'] = snmpwalk_cache_oid($device, 'hpLocal', null, 'NETSWITCH-MIB', $config['mibdir'].':'.$config['mibdir'].'/hp'); - if ($debug) { - print_r($mempool_cache); - } + d_echo($mempool_cache); } else { - if ($debug) { - echo 'Cached!'; - } + d_echo('Cached!'); } $entry = $mempool_cache['hpLocal'][$mempool[mempool_index]]; diff --git a/includes/polling/mempools/hrstorage.inc.php b/includes/polling/mempools/hrstorage.inc.php index 29a8bd675..6039687ff 100644 --- a/includes/polling/mempools/hrstorage.inc.php +++ b/includes/polling/mempools/hrstorage.inc.php @@ -3,14 +3,10 @@ // HOST-RESOURCES-MIB - Memory Objects if (!is_array($storage_cache['hrstorage'])) { $storage_cache['hrstorage'] = snmpwalk_cache_oid($device, 'hrStorageEntry', null, 'HOST-RESOURCES-MIB:HOST-RESOURCES-TYPES'); - if ($debug) { - print_r($storage_cache); - } + d_echo($storage_cache); } else { - if ($debug) { - echo 'Cached!'; - } + d_echo('Cached!'); } $entry = $storage_cache['hrstorage'][$mempool[mempool_index]]; diff --git a/includes/polling/mempools/junos.inc.php b/includes/polling/mempools/junos.inc.php index 5f28d30d4..813f05304 100644 --- a/includes/polling/mempools/junos.inc.php +++ b/includes/polling/mempools/junos.inc.php @@ -2,22 +2,16 @@ $oid = $mempool['mempool_index']; -if ($debug) { - echo 'JunOS Mempool'; -} +d_echo('JunOS Mempool'); if (!is_array($mempool_cache['junos'])) { - if ($debug) { - echo 'caching'; - } + d_echo('caching'); $mempool_cache['junos'] = array(); $mempool_cache['junos'] = snmpwalk_cache_multi_oid($device, 'jnxOperatingBuffer', $mempool_cache['junos'], 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); $mempool_cache['junos'] = snmpwalk_cache_multi_oid($device, 'jnxOperatingDRAMSize', $mempool_cache['junos'], 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); $mempool_cache['junos'] = snmpwalk_cache_multi_oid($device, 'jnxOperatingMemory', $mempool_cache['junos'], 'JUNIPER-MIB', $config['install_dir'].'/mibs/junos'); - if ($debug) { - print_r($mempool_cache); - } + d_echo($mempool_cache); } $entry = $mempool_cache['junos'][$mempool[mempool_index]]; diff --git a/includes/polling/mempools/pulse-mem.inc.php b/includes/polling/mempools/pulse-mem.inc.php new file mode 100644 index 000000000..cfee9f7ee --- /dev/null +++ b/includes/polling/mempools/pulse-mem.inc.php @@ -0,0 +1,30 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +// Simple hard-coded poller for Pulse Secure +// Yes, it really can be this simple. + +echo 'Pulse Secure MemPool'.'\n'; + +if ($device['os'] == 'pulse') { + $perc = str_replace('"', "", snmp_get($device, "PULSESECURE-PSG-MIB::iveMemoryUtil.0", '-OvQ')); + $memory_available = str_replace('"', "", snmp_get($device, "UCD-SNMP-MIB::memTotalReal.0", '-OvQ')); + $mempool['total'] = $memory_available; + + if (is_numeric($perc)) { + $mempool['used'] = ($memory_available / 100 * $perc); + $mempool['free'] = ($memory_available - $mempool['used']); + } + + echo "PERC " .$perc."%\n"; + echo "Avail " .$mempool['total']."\n"; + +} diff --git a/includes/polling/mempools/sonicwall-mem.inc.php b/includes/polling/mempools/sonicwall-mem.inc.php new file mode 100644 index 000000000..dd2590594 --- /dev/null +++ b/includes/polling/mempools/sonicwall-mem.inc.php @@ -0,0 +1,21 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +if ($device['os'] == 'sonicwall') { + echo 'SonicWALL-MEMORY-POOL: '; + $perc = str_replace('"', "", snmp_get($device, 'SONICWALL-FIREWALL-IP-STATISTICS-MIB::sonicCurrentRAMUtil.0', '-OvQ')); + if (is_numeric($perc)) { + $mempool['perc'] = $perc; + $mempool['used'] = $perc; + $mempool['total'] = 100; + $mempool['free'] = 100 - $perc; + } +} diff --git a/includes/polling/mempools/vrp.inc.php b/includes/polling/mempools/vrp.inc.php index 5345e3a73..5693a0e9a 100644 --- a/includes/polling/mempools/vrp.inc.php +++ b/includes/polling/mempools/vrp.inc.php @@ -2,21 +2,15 @@ $oid = $mempool['mempool_index']; -if ($debug) { - echo 'Huawei VRP Mempool'; -} +d_echo('Huawei VRP Mempool'); if (!is_array($mempool_cache['vrp'])) { - if ($debug) { - echo 'caching'; - } + d_echo('caching'); $mempool_cache['vrp'] = array(); $mempool_cache['vrp'] = snmpwalk_cache_multi_oid($device, 'hwEntityMemSize', $mempool_cache['vrp'], 'HUAWEI-ENTITY-EXTENT-MIB', $config['install_dir'].'/mibs'); $mempool_cache['vrp'] = snmpwalk_cache_multi_oid($device, 'hwEntityMemUsage', $mempool_cache['vrp'], 'HUAWEI-ENTITY-EXTENT-MIB', $config['install_dir'].'/mibs'); - if ($debug) { - print_r($mempool_cache); - } + d_echo($mempool_cache); } $entry = $mempool_cache['vrp'][$mempool[mempool_index]]; diff --git a/includes/polling/netscaler-vsvr.inc.php b/includes/polling/netscaler-vsvr.inc.php index 7d375c853..1b74181a4 100644 --- a/includes/polling/netscaler-vsvr.inc.php +++ b/includes/polling/netscaler-vsvr.inc.php @@ -77,9 +77,7 @@ if ($device['os'] == 'netscaler') { print_r($vsvr); } - if ($debug) { - print_r($vsvrs); - } + d_echo($vsvrs); foreach ($vsvr_array as $index => $vsvr) { if (isset($vsvr['vsvrName'])) { @@ -132,9 +130,7 @@ if ($device['os'] == 'netscaler') { }//end if }//end foreach - if ($debug) { - print_r($vsvr_exist); - } + d_echo($vsvr_exist); foreach ($vsvrs as $db_name => $db_id) { if (!$vsvr_exist[$db_name]) { diff --git a/includes/polling/os/avaya-ipo.inc.php b/includes/polling/os/avaya-ipo.inc.php new file mode 100644 index 000000000..0ca43ea34 --- /dev/null +++ b/includes/polling/os/avaya-ipo.inc.php @@ -0,0 +1,10 @@ + $value) { + $numClients += $value['bsnApIfNoOfUsers']; +} + +$rrdfile = $host_rrd.'/ciscowlc'.safename('.rrd'); +if (!is_file($rrdfile)) { + rrdtool_create($rrdfile, ' --step 300 DS:NUMAPS:GAUGE:600:0:12500000000 DS:NUMCLIENTS:GAUGE:600:0:12500000000 '.$config['rrd_rra']); +} + +$fields = array( + 'NUMAPS' => $numAccessPoints, + 'NUMCLIENTS' => $numClients +); +$ret = rrdtool_update($rrdfile, $fields); + +// also save the info about how many clients in the same place as the wireless module +$wificlientsrrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('wificlients-radio1.rrd'); + +if (!is_file($wificlientsrrd)) { + rrdtool_create($wificlientsrrd, '--step 300 DS:wificlients:GAUGE:600:-273:10000 '.$config['rrd_rra']); +} + +$fields = array( + 'wificlients' => $numClients +); + +rrdtool_update($wificlientsrrd, $fields); +$graphs['wifi_clients'] = true; diff --git a/includes/polling/os/fortios.inc.php b/includes/polling/os/fortios.inc.php new file mode 100644 index 000000000..9101e1221 --- /dev/null +++ b/includes/polling/os/fortios.inc.php @@ -0,0 +1,3 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. +*/ + +$version = trim(snmp_get($device, "productVersion.0", "-OQv", "PULSESECURE-PSG-MIB"),'"'); +$hardware = "Juniper " . trim(snmp_get($device, "productName.0", "-OQv", "PULSESECURE-PSG-MIB"),'"'); +$hostname = trim(snmp_get($device, "sysName.0", "-OQv", "SNMPv2-MIB"),'"'); + +$usersrrd = $config['rrd_dir'].'/'.$device['hostname'].'/pulse_users.rrd'; +$users = snmp_get($device, 'PULSESECURE-PSG-MIB::iveConcurrentUsers.0', '-OQv'); + +if (is_numeric($users)) { + if (!is_file($usersrrd)) { + rrdtool_create($usersrrd, ' DS:users:GAUGE:600:0:U'.$config['rrd_rra']); + } + rrdtool_update($usersrrd, "N:$users"); + $graphs['pulse_users'] = true; +} + +$sessrrd = $config['rrd_dir'].'/'.$device['hostname'].'/pulse_sessions.rrd'; +$sessions = snmp_get($device, 'PULSESECURE-PSG-MIB::iveConcurrentUsers.0', '-OQv'); + +if (is_numeric($sessions)) { + if (!is_file($sessrrd)) { + rrdtool_create($sessrrd, ' DS:sessions:GAUGE:600:0:U '.$config['rrd_rra']); + } + rrdtool_update($sessrrd, "N:$sessions"); + $graphs['pulse_sessions'] = true; +} diff --git a/includes/polling/os/riverbed.inc.php b/includes/polling/os/riverbed.inc.php new file mode 100644 index 000000000..2cc99e319 --- /dev/null +++ b/includes/polling/os/riverbed.inc.php @@ -0,0 +1,14 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +$hardware = trim(snmp_get($device, '.1.3.6.1.4.1.17163.1.1.1.1.0', '-OQv'), '"'); +$serial = trim(snmp_get($device, '.1.3.6.1.4.1.17163.1.1.1.2.0', '-OQv'), '"'); +$version = trim(snmp_get($device, '.1.3.6.1.4.1.17163.1.1.1.3.0', '-OQv'), '"'); diff --git a/includes/polling/os/screenos.inc.php b/includes/polling/os/screenos.inc.php index d33a3f547..53c4326bd 100644 --- a/includes/polling/os/screenos.inc.php +++ b/includes/polling/os/screenos.inc.php @@ -12,9 +12,9 @@ list ($sessalloc, $sessmax, $sessfailed) = explode("\n", $sess_data); if (!is_file($sessrrd)) { rrdtool_create( $sessrrd, - ' --step 300 \ - DS:allocate:GAUGE:600:0:3000000 \ - DS:max:GAUGE:600:0:3000000 \ + ' --step 300 + DS:allocate:GAUGE:600:0:3000000 + DS:max:GAUGE:600:0:3000000 DS:failed:GAUGE:600:0:1000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/os/snom.inc.php b/includes/polling/os/snom.inc.php index 5293dddf0..d778bcf97 100644 --- a/includes/polling/os/snom.inc.php +++ b/includes/polling/os/snom.inc.php @@ -27,11 +27,11 @@ $rrdfile = $config['rrd_dir'].'/'.$device['hostname'].'/data.rrd'; if (!is_file($rrdfile)) { rrdtool_create( $rrdfile, - 'DS:INOCTETS:COUNTER:600:U:100000000000 \ - DS:OUTOCTETS:COUNTER:600:U:10000000000 \ - DS:INPKTS:COUNTER:600:U:10000000000 \ - DS:OUTPKTS:COUNTER:600:U:10000000000 \ - DS:CALLS:COUNTER:600:U:10000000000 \ + 'DS:INOCTETS:COUNTER:600:U:100000000000 + DS:OUTOCTETS:COUNTER:600:U:10000000000 + DS:INPKTS:COUNTER:600:U:10000000000 + DS:OUTPKTS:COUNTER:600:U:10000000000 + DS:CALLS:COUNTER:600:U:10000000000 DS:REGISTRATIONS:COUNTER:600:U:10000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/os/unix.inc.php b/includes/polling/os/unix.inc.php index 5932e3611..96403771f 100644 --- a/includes/polling/os/unix.inc.php +++ b/includes/polling/os/unix.inc.php @@ -78,7 +78,19 @@ elseif ($device['os'] == "freebsd") { else { $hardware = "i386"; } - $features = "GENERIC"; + + # Distro "extend" support + $features = snmp_get($device, ".1.3.6.1.4.1.2021.7890.1.3.1.1.6.100.105.115.116.114.111", "-Oqv", "UCD-SNMP-MIB"); + $features = str_replace("\"", "", $features); + + if (!$features) { # No "extend" support, try "exec" support + $features = snmp_get($device, ".1.3.6.1.4.1.2021.7890.1.101.1", "-Oqv", "UCD-SNMP-MIB"); + $features = str_replace("\"", "", $features); + } + + if (!$features) { + $features = 'GENERIC'; + } } elseif ($device['os'] == "dragonfly") { list(,,$version,,,$features,,$hardware) = explode (" ", $poll_device['sysDescr']); @@ -120,6 +132,9 @@ elseif ($device['os'] == "dsm") { $hardware = $value; } } + + $version = snmp_get($device, "version.0", "-Osqnv", "SYNOLOGY-SYSTEM-MIB"); + } elseif ($device['os'] == "pfsense") { $output = preg_split("/ /", $poll_device['sysDescr']); diff --git a/includes/polling/ospf.inc.php b/includes/polling/ospf.inc.php index dbf7dc887..8fec222a2 100644 --- a/includes/polling/ospf.inc.php +++ b/includes/polling/ospf.inc.php @@ -327,9 +327,7 @@ if (is_array($ospf_nbrs_db)) { foreach ($ospf_nbr_oids as $oid) { // Loop the OIDs - if ($debug) { - echo $ospf_nbr_db[$oid].'|'.$ospf_nbr_poll[$oid]."\n"; - } + d_echo($ospf_nbr_db[$oid].'|'.$ospf_nbr_poll[$oid]."\n"); if ($ospf_nbr_db[$oid] != $ospf_nbr_poll[$oid]) { // If data has changed, build a query @@ -364,10 +362,10 @@ $filename = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('ospf-statis if (!is_file($filename)) { rrdtool_create( $filename, - '--step 300 \ - DS:instances:GAUGE:600:0:1000000 \ - DS:areas:GAUGE:600:0:1000000 \ - DS:ports:GAUGE:600:0:1000000 \ + '--step 300 + DS:instances:GAUGE:600:0:1000000 + DS:areas:GAUGE:600:0:1000000 + DS:ports:GAUGE:600:0:1000000 DS:neighbours:GAUGE:600:0:1000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/port-poe.inc.php b/includes/polling/port-poe.inc.php index 5693a99ea..ef1f971e9 100644 --- a/includes/polling/port-poe.inc.php +++ b/includes/polling/port-poe.inc.php @@ -35,9 +35,6 @@ $peth_oids = array( 'pethMainPseConsumptionPower', ); -$port_stats = snmpwalk_cache_oid($device, 'pethPsePortEntry', $port_stats, 'POWER-ETHERNET-MIB'); -$port_stats = snmpwalk_cache_oid($device, 'cpeExtPsePortEntry', $port_stats, 'CISCO-POWER-ETHERNET-EXT-MIB'); - if ($port_stats[$port['ifIndex']] && $port['ifType'] == 'ethernetCsmacd' && isset($port_stats[$port['ifIndex']]['dot3StatsIndex'])) { diff --git a/includes/polling/ports.inc.php b/includes/polling/ports.inc.php index eeab346da..086ae5cd5 100644 --- a/includes/polling/ports.inc.php +++ b/includes/polling/ports.inc.php @@ -145,6 +145,11 @@ if ($device['adsl_count'] > '0') { $port_stats = snmpwalk_cache_oid($device, '.1.3.6.1.2.1.10.94.1.1.7.1.7', $port_stats, 'ADSL-LINE-MIB'); }//end if +if ($config['enable_ports_poe']) { + $port_stats = snmpwalk_cache_oid($device, 'pethPsePortEntry', $port_stats, 'POWER-ETHERNET-MIB'); + $port_stats = snmpwalk_cache_oid($device, 'cpeExtPsePortEntry', $port_stats, 'CISCO-POWER-ETHERNET-EXT-MIB'); +} + // FIXME This probably needs re-enabled. We need to clear these things when they get unset, too. // foreach ($etherlike_oids as $oid) { $port_stats = snmpwalk_cache_oid($device, $oid, $port_stats, "EtherLike-MIB"); } // foreach ($cisco_oids as $oid) { $port_stats = snmpwalk_cache_oid($device, $oid, $port_stats, "OLD-CISCO-INTERFACES-MIB"); } @@ -192,9 +197,7 @@ else { $polled = time(); // End Building SNMP Cache Array -if ($debug) { - print_r($port_stats); -} +d_echo($port_stats); // Build array of ports in the database // FIXME -- this stuff is a little messy, looping the array to make an array just seems wrong. :> @@ -241,19 +244,6 @@ foreach ($ports as $port) { $this_port['ifDescr'] = $matches[1]; } - if ($config['memcached']['enable'] === true) { - $state = $memcache->get('port-'.$port['port_id'].'-state'); - if ($debug) { - print_r($state); - } - - if (is_array($state)) { - $port = array_merge($port, $state); - } - - unset($state); - } - $polled_period = ($polled - $port['poll_time']); $port['update'] = array(); @@ -265,12 +255,6 @@ foreach ($ports as $port) { $port['update']['poll_period'] = $polled_period; } - if ($config['memcached']['enable'] === true) { - $port['state']['poll_time'] = $polled; - $port['state']['poll_prev'] = $port['poll_time']; - $port['state']['poll_period'] = $polled_period; - } - // Copy ifHC[In|Out]Octets values to non-HC if they exist if ($this_port['ifHCInOctets'] > 0 && is_numeric($this_port['ifHCInOctets']) && $this_port['ifHCOutOctets'] > 0 && is_numeric($this_port['ifHCOutOctets'])) { echo 'HC '; @@ -293,7 +277,7 @@ foreach ($ports as $port) { } // Overwrite ifSpeed with ifHighSpeed if it's over 1G - if (is_numeric($this_port['ifHighSpeed']) && $this_port['ifSpeed'] > '1000000000') { + if (is_numeric($this_port['ifHighSpeed']) && ($this_port['ifSpeed'] > '1000000000' || $this_port['ifSpeed'] == 0)) { echo 'HighSpeed '; $this_port['ifSpeed'] = ($this_port['ifHighSpeed'] * 1000000); } @@ -332,11 +316,18 @@ foreach ($ports as $port) { // Update IF-MIB data foreach ($data_oids as $oid) { + + if ($oid == 'ifAlias') { + if (get_dev_attrib($device, 'ifName:'.$port['ifName'], 1)) { + $this_port['ifAlias'] = $port['ifAlias']; + } + } + if ($port[$oid] != $this_port[$oid] && !isset($this_port[$oid])) { $port['update'][$oid] = array('NULL'); log_event($oid.': '.$port[$oid].' -> NULL', $device, 'interface', $port['port_id']); if ($debug) { - echo $oid.': '.$port[$oid].' -> NULL '; + d_echo($oid.': '.$port[$oid].' -> NULL '); } else { echo $oid.' '; @@ -346,16 +337,12 @@ foreach ($ports as $port) { $port['update'][$oid] = $this_port[$oid]; log_event($oid.': '.$port[$oid].' -> '.$this_port[$oid], $device, 'interface', $port['port_id']); if ($debug) { - echo $oid.': '.$port[$oid].' -> '.$this_port[$oid].' '; + d_echo($oid.': '.$port[$oid].' -> '.$this_port[$oid].' '); } else { echo $oid.' '; } } - - if (( $oid == 'ifOperStatus' || $oid == 'ifAdminStatus' ) && $this_port[$oid] == 'down') { - break; - } }//end foreach // Parse description (usually ifAlias) if config option set @@ -396,11 +383,6 @@ foreach ($ports as $port) { $port['update'][$oid.'_prev'] = $port[$oid]; } - if ($config['memcached']['enable'] === true) { - $port['state'][$oid] = $this_port[$oid]; - $port['state'][$oid.'_prev'] = $port[$oid]; - } - $oid_prev = $oid.'_prev'; if (isset($port[$oid])) { $oid_diff = ($this_port[$oid] - $port[$oid]); @@ -418,14 +400,7 @@ foreach ($ports as $port) { $port['update'][$oid.'_delta'] = $oid_diff; } - if ($config['memcached']['enable'] === true) { - $port['state'][$oid.'_rate'] = $oid_rate; - $port['state'][$oid.'_delta'] = $oid_diff; - } - - if ($debug) { - echo "\n $oid ($oid_diff B) $oid_rate Bps $polled_period secs\n"; - } + d_echo("\n $oid ($oid_diff B) $oid_rate Bps $polled_period secs\n"); }//end if }//end foreach @@ -449,13 +424,6 @@ foreach ($ports as $port) { echo 'bytes('.formatStorage($port['stats']['ifInOctets_diff']).'/'.formatStorage($port['stats']['ifOutOctets_diff']).')'; echo 'pkts('.format_si($port['stats']['ifInUcastPkts_rate']).'pps/'.format_si($port['stats']['ifOutUcastPkts_rate']).'pps)'; - // Store aggregate in/out state - if ($config['memcached']['enable'] === true) { - $port['state']['ifOctets_rate'] = ($port['stats']['ifOutOctets_rate'] + $port['stats']['ifInOctets_rate']); - $port['state']['ifUcastPkts_rate'] = ($port['stats']['ifOutUcastPkts_rate'] + $port['stats']['ifInUcastPkts_rate']); - $port['state']['ifErrors_rate'] = ($port['stats']['ifOutErrors_rate'] + $port['stats']['ifInErrors_rate']); - } - // Port utilisation % threshold alerting. // FIXME allow setting threshold per-port. probably 90% of ports we don't care about. if ($config['alerts']['port_util_alert'] && $port['ignore'] == '0') { // Check for port saturation of $config['alerts']['port_util_perc'] or higher. Alert if we see this. @@ -472,21 +440,21 @@ foreach ($ports as $port) { if (!is_file($rrdfile)) { rrdtool_create( $rrdfile, - ' --step 300 \ - DS:INOCTETS:DERIVE:600:0:12500000000 \ - DS:OUTOCTETS:DERIVE:600:0:12500000000 \ - DS:INERRORS:DERIVE:600:0:12500000000 \ - DS:OUTERRORS:DERIVE:600:0:12500000000 \ - DS:INUCASTPKTS:DERIVE:600:0:12500000000 \ - DS:OUTUCASTPKTS:DERIVE:600:0:12500000000 \ - DS:INNUCASTPKTS:DERIVE:600:0:12500000000 \ - DS:OUTNUCASTPKTS:DERIVE:600:0:12500000000 \ - DS:INDISCARDS:DERIVE:600:0:12500000000 \ - DS:OUTDISCARDS:DERIVE:600:0:12500000000 \ - DS:INUNKNOWNPROTOS:DERIVE:600:0:12500000000 \ - DS:INBROADCASTPKTS:DERIVE:600:0:12500000000 \ - DS:OUTBROADCASTPKTS:DERIVE:600:0:12500000000 \ - DS:INMULTICASTPKTS:DERIVE:600:0:12500000000 \ + ' --step 300 + DS:INOCTETS:DERIVE:600:0:12500000000 + DS:OUTOCTETS:DERIVE:600:0:12500000000 + DS:INERRORS:DERIVE:600:0:12500000000 + DS:OUTERRORS:DERIVE:600:0:12500000000 + DS:INUCASTPKTS:DERIVE:600:0:12500000000 + DS:OUTUCASTPKTS:DERIVE:600:0:12500000000 + DS:INNUCASTPKTS:DERIVE:600:0:12500000000 + DS:OUTNUCASTPKTS:DERIVE:600:0:12500000000 + DS:INDISCARDS:DERIVE:600:0:12500000000 + DS:OUTDISCARDS:DERIVE:600:0:12500000000 + DS:INUNKNOWNPROTOS:DERIVE:600:0:12500000000 + DS:INBROADCASTPKTS:DERIVE:600:0:12500000000 + DS:OUTBROADCASTPKTS:DERIVE:600:0:12500000000 + DS:INMULTICASTPKTS:DERIVE:600:0:12500000000 DS:OUTMULTICASTPKTS:DERIVE:600:0:12500000000 '.$config['rrd_rra'] ); }//end if @@ -556,15 +524,6 @@ foreach ($ports as $port) { include 'port-alcatel.inc.php'; } - // Update Memcached - if ($config['memcached']['enable'] === true) { - if ($debug) { - print_r($port['state']); - } - - $memcache->set('port-'.$port['port_id'].'-state', $port['state']); - } - foreach ($port['update'] as $key => $val_check) { if (!isset($val_check)) { unset($port['update'][$key]); @@ -574,9 +533,7 @@ foreach ($ports as $port) { // Update Database if (count($port['update'])) { $updated = dbUpdate($port['update'], 'ports', '`port_id` = ?', array($port['port_id'])); - if ($debug) { - echo "$updated updated"; - } + d_echo("$updated updated"); } // End Update Database diff --git a/includes/polling/processors.inc.php b/includes/polling/processors.inc.php index 5bfca7478..14fc1d811 100644 --- a/includes/polling/processors.inc.php +++ b/includes/polling/processors.inc.php @@ -16,7 +16,7 @@ foreach (dbFetchRows('SELECT * FROM processors WHERE device_id = ?', array($devi if (!is_file($procrrd)) { rrdtool_create( $procrrd, - '--step 300 \ + '--step 300 DS:usage:GAUGE:600:-273:1000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/processors/pulse-cpu.inc.php b/includes/polling/processors/pulse-cpu.inc.php new file mode 100644 index 000000000..03413c3b9 --- /dev/null +++ b/includes/polling/processors/pulse-cpu.inc.php @@ -0,0 +1,23 @@ + + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or (at your + * option) any later version. Please see LICENSE.txt at the top level of + * the source code distribution for details. + */ +// Simple hard-coded poller for Pulse Secure +// Yes, it really can be this simple. + +echo 'Pulse Secure CPU Usage'; + +if ($device['os'] == 'pulse') { + $usage = str_replace('"', "", snmp_get($device, 'PULSESECURE-PSG-MIB::iveCpuUtil.0', '-OvQ')); + + if (is_numeric($usage)) { + $proc = ($usage * 100); + } +} diff --git a/includes/polling/storage.inc.php b/includes/polling/storage.inc.php index 3f8f8d1eb..3ced14ac2 100644 --- a/includes/polling/storage.inc.php +++ b/includes/polling/storage.inc.php @@ -19,9 +19,7 @@ foreach (dbFetchRows('SELECT * FROM storage WHERE device_id = ?', array($device[ // FIXME Generic poller goes here if we ever have a discovery module which uses it. } - if ($debug) { - print_r($storage); - } + d_echo($storage); if ($storage['size']) { $percent = round(($storage['used'] / $storage['size'] * 100)); diff --git a/includes/polling/storage/hrstorage.inc.php b/includes/polling/storage/hrstorage.inc.php index 2f8149a4b..50dade55f 100644 --- a/includes/polling/storage/hrstorage.inc.php +++ b/includes/polling/storage/hrstorage.inc.php @@ -3,9 +3,7 @@ // HOST-RESOURCES-MIB - Storage Objects if (!is_array($storage_cache['hrstorage'])) { $storage_cache['hrstorage'] = snmpwalk_cache_oid($device, 'hrStorageEntry', null, 'HOST-RESOURCES-MIB:HOST-RESOURCES-TYPES'); - if ($debug) { - print_r($storage_cache); - } + d_echo($storage_cache); } $entry = $storage_cache['hrstorage'][$storage[storage_index]]; diff --git a/includes/polling/storage/netapp-storage.inc.php b/includes/polling/storage/netapp-storage.inc.php index 1738b1470..dbeffda0e 100644 --- a/includes/polling/storage/netapp-storage.inc.php +++ b/includes/polling/storage/netapp-storage.inc.php @@ -2,9 +2,7 @@ if (!is_array($storage_cache['netapp-storage'])) { $storage_cache['netapp-storage'] = snmpwalk_cache_oid($device, 'dfEntry', null, 'NETAPP-MIB'); - if ($debug) { - print_r($storage_cache); - } + d_echo($storage_cache); } $entry = $storage_cache['netapp-storage'][$storage[storage_index]]; diff --git a/includes/polling/toner.inc.php b/includes/polling/toner.inc.php index 6e2af1062..d71628c37 100644 --- a/includes/polling/toner.inc.php +++ b/includes/polling/toner.inc.php @@ -23,7 +23,7 @@ if ($config['enable_printers']) { if (!is_file($tonerrrd)) { rrdtool_create( $tonerrrd, - '--step 300 \ + '--step 300 DS:toner:GAUGE:600:0:20000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/ucd-diskio.inc.php b/includes/polling/ucd-diskio.inc.php index 342be836e..9c6d434b1 100644 --- a/includes/polling/ucd-diskio.inc.php +++ b/includes/polling/ucd-diskio.inc.php @@ -15,23 +15,19 @@ if (count($diskio_data)) { echo $diskio['diskio_descr'].' '; - if ($debug) { - print_r($entry); - } + d_echo($entry); $rrd = $config['rrd_dir'].'/'.$device['hostname'].'/'.safename('ucd_diskio-'.$diskio['diskio_descr'].'.rrd'); - if ($debug) { - echo "$rrd "; - } + d_echo("$rrd "); if (!is_file($rrd)) { rrdtool_create( $rrd, - '--step 300 \ - DS:read:DERIVE:600:0:125000000000 \ - DS:written:DERIVE:600:0:125000000000 \ - DS:reads:DERIVE:600:0:125000000000 \ + '--step 300 + DS:read:DERIVE:600:0:125000000000 + DS:written:DERIVE:600:0:125000000000 + DS:reads:DERIVE:600:0:125000000000 DS:writes:DERIVE:600:0:125000000000 '.$config['rrd_rra'] ); } diff --git a/includes/polling/ucd-mib.inc.php b/includes/polling/ucd-mib.inc.php index e1ab44d84..6dd680485 100644 --- a/includes/polling/ucd-mib.inc.php +++ b/includes/polling/ucd-mib.inc.php @@ -34,10 +34,10 @@ $ss = snmpwalk_cache_oid($device, 'systemStats', array(), 'UCD-SNMP-MIB'); $ss = $ss[0]; // Insert Nazi joke here. // Create CPU RRD if it doesn't already exist -$cpu_rrd_create = ' --step 300 \ - DS:user:COUNTER:600:0:U \ - DS:system:COUNTER:600:0:U \ - DS:nice:COUNTER:600:0:U \ +$cpu_rrd_create = ' --step 300 + DS:user:COUNTER:600:0:U + DS:system:COUNTER:600:0:U + DS:nice:COUNTER:600:0:U DS:idle:COUNTER:600:0:U '.$config['rrd_rra']; // This is how we currently collect. We should collect one RRD per stat, for ease of handling differen formats, @@ -133,14 +133,14 @@ if (is_numeric($ss['ssRawInterrupts'])) { // UCD-SNMP-MIB::memCached.0 = INTEGER: 2595556 kB // UCD-SNMP-MIB::memSwapError.0 = INTEGER: noError(0) // UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING: -$mem_rrd_create = ' --step 300 \ - DS:totalswap:GAUGE:600:0:10000000000 \ - DS:availswap:GAUGE:600:0:10000000000 \ - DS:totalreal:GAUGE:600:0:10000000000 \ - DS:availreal:GAUGE:600:0:10000000000 \ - DS:totalfree:GAUGE:600:0:10000000000 \ - DS:shared:GAUGE:600:0:10000000000 \ - DS:buffered:GAUGE:600:0:10000000000 \ +$mem_rrd_create = ' --step 300 + DS:totalswap:GAUGE:600:0:10000000000 + DS:availswap:GAUGE:600:0:10000000000 + DS:totalreal:GAUGE:600:0:10000000000 + DS:availreal:GAUGE:600:0:10000000000 + DS:totalfree:GAUGE:600:0:10000000000 + DS:shared:GAUGE:600:0:10000000000 + DS:buffered:GAUGE:600:0:10000000000 DS:cached:GAUGE:600:0:10000000000 '.$config['rrd_rra']; $snmpdata = snmp_get_multi($device, 'memTotalSwap.0 memAvailSwap.0 memTotalReal.0 memAvailReal.0 memTotalFree.0 memShared.0 memBuffer.0 memCached.0', '-OQUs', 'UCD-SNMP-MIB'); diff --git a/includes/polling/unix-agent.inc.php b/includes/polling/unix-agent.inc.php index 53fec6ee3..8563f01ed 100644 --- a/includes/polling/unix-agent.inc.php +++ b/includes/polling/unix-agent.inc.php @@ -1,7 +1,5 @@ >>', $section); list($sa, $sb) = explode('-', $section, 2); - if ($section == 'apache') { - $sa = 'app'; - $sb = 'apache'; + $agentapps = array( + "apache", + "mysql", + "nginx", + "bind", + "proxmox", + "tinydns"); + + if (in_array($section, $agentapps)) { + $agent_data['app'][$section] = trim($data); } - if ($section == 'mysql') { - $sa = 'app'; - $sb = 'mysql'; - } - - if ($section == 'nginx') { - $sa = 'app'; - $sb = 'nginx'; - } - - if ($section == 'bind') { - $sa = 'app'; - $sb = 'bind'; - } - - if ($section == 'tinydns') { - $sa = 'app'; - $sb = 'tinydns'; - } - - // if ($section == "drbd") { $sa = "app"; $sb = "drbd"; } if (!empty($sa) && !empty($sb)) { $agent_data[$sa][$sb] = trim($data); } @@ -89,33 +73,19 @@ if ($device['os_group'] == 'unix') { } }//end foreach - if ($debug) { - print_r($agent_data); - } + d_echo($agent_data); include 'unix-agent/packages.inc.php'; include 'unix-agent/munin-plugins.inc.php'; foreach (array_keys($agent_data) as $key) { if (file_exists("includes/polling/unix-agent/$key.inc.php")) { - if ($debug) { - echo "Including: unix-agent/$key.inc.php"; - } + d_echo("Including: unix-agent/$key.inc.php"); include "unix-agent/$key.inc.php"; } } - foreach (array_keys($agent_data['app']) as $key) { - if (file_exists("includes/polling/applications/$key.inc.php")) { - if ($debug) { - echo "Including: applications/$key.inc.php"; - } - - include "applications/$key.inc.php"; - } - } - // Processes if (!empty($agent_data['ps'])) { echo 'Processes: '; @@ -134,12 +104,16 @@ if ($device['os_group'] == 'unix') { echo "\n"; } - // Apache - if (!empty($agent_data['app']['apache'])) { - $app_found['apache'] = true; - if (dbFetchCell('SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?', array($device['device_id'], 'apache')) == '0') { - echo "Found new application 'Apache'\n"; - dbInsert(array('device_id' => $device['device_id'], 'app_type' => 'apache'), 'applications'); + foreach (array_keys($agent_data['app']) as $key) { + if (file_exists("includes/polling/applications/$key.inc.php")) { + d_echo("Enabling $key for ".$device['hostname']." if not yet enabled\n"); + + if (in_array($key, array('apache', 'mysql', 'nginx', 'proxmox'))) { + if (dbFetchCell('SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?', array($device['device_id'], $key)) == '0') { + echo "Found new application '$key'\n"; + dbInsert(array('device_id' => $device['device_id'], 'app_type' => $key), 'applications'); + } + } } } @@ -154,15 +128,6 @@ if ($device['os_group'] == 'unix') { } } - // MySQL - if (!empty($agent_data['app']['mysql'])) { - $app_found['mysql'] = true; - if (dbFetchCell('SELECT COUNT(*) FROM `applications` WHERE `device_id` = ? AND `app_type` = ?', array($device['device_id'], 'mysql')) == '0') { - echo "Found new application 'MySQL'\n"; - dbInsert(array('device_id' => $device['device_id'], 'app_type' => 'mysql'), 'applications'); - } - } - // DRBD if (!empty($agent_data['drbd'])) { $agent_data['app']['drbd'] = array(); diff --git a/includes/polling/unix-agent/munin-plugins.inc.php b/includes/polling/unix-agent/munin-plugins.inc.php index fd1d26c0b..d6340c2a5 100644 --- a/includes/polling/unix-agent/munin-plugins.inc.php +++ b/includes/polling/unix-agent/munin-plugins.inc.php @@ -3,9 +3,7 @@ // Plugins if (!empty($agent_data['munin'])) { echo 'Munin Plugins:'; - if ($debug) { - print_r($agent_data['munin']); - } + d_echo($agent_data['munin']); // Build array of existing plugins $plugins_dbq = dbFetchRows('SELECT * FROM `munin_plugins` WHERE `device_id` = ?', array($device['device_id'])); @@ -38,9 +36,7 @@ if (!empty($agent_data['munin'])) { $plugin_rrd = $plugins_rrd_dir.'/'.$plugin_type; $plugin_uniq = $plugin_type.'_'; // } - if ($debug) { - echo "\n[$plugin_data]\n"; - } + d_echo("\n[$plugin_data]\n"); foreach (explode("\n", $plugin_data) as $line) { list($key, $value) = explode(' ', $line, 2); @@ -101,7 +97,7 @@ if (!empty($agent_data['munin'])) { $data['draw'] = 'LINE1.5'; } - $cmd = '--step 300 DS:val:'.$data['type'].':600:0:U '; + $cmd = '--step 300 DS:val:'.$data['type'].':600:U:U '; $cmd .= $config['rrd_rra']; $ds_uniq = $mplug_id.'_'.$name; $filename = $plugin_rrd.'_'.$name.'.rrd'; diff --git a/includes/polling/wifi.inc.php b/includes/polling/wifi.inc.php index 84e459bf1..dc0c07b9e 100644 --- a/includes/polling/wifi.inc.php +++ b/includes/polling/wifi.inc.php @@ -74,7 +74,7 @@ if ($device['type'] == 'network' || $device['type'] == 'firewall' || $device['ty if (!is_file($wificlientsrrd)) { rrdtool_create( $wificlientsrrd, - '--step 300 \ + '--step 300 DS:wificlients:GAUGE:600:-273:1000 '.$config['rrd_rra'] ); } @@ -97,7 +97,7 @@ if ($device['type'] == 'network' || $device['type'] == 'firewall' || $device['ty if (!is_file($wificlientsrrd)) { rrdtool_create( $wificlientsrrd, - '--step 300 \ + '--step 300 DS:wificlients:GAUGE:600:-273:1000 '.$config['rrd_rra'] ); } diff --git a/includes/port-descr-parser.inc.php b/includes/port-descr-parser.inc.php index 2b0f475aa..144790c12 100644 --- a/includes/port-descr-parser.inc.php +++ b/includes/port-descr-parser.inc.php @@ -20,9 +20,7 @@ if ($type && $descr) { $port_ifAlias['speed'] = $speed; $port_ifAlias['notes'] = $notes; - if ($debug) { - print_r($port_ifAlias); - } + d_echo($port_ifAlias); } unset($port_type, $port_descr, $port_circuit, $port_notes, $port_speed); diff --git a/includes/rrdtool.inc.php b/includes/rrdtool.inc.php index 640be926d..b71eee7a0 100644 --- a/includes/rrdtool.inc.php +++ b/includes/rrdtool.inc.php @@ -23,7 +23,7 @@ function rrdtool_pipe_open(&$rrd_process, &$rrd_pipes) { - global $config, $debug; + global $config; $command = $config['rrdtool'].' -'; @@ -74,12 +74,8 @@ function rrdtool_pipe_open(&$rrd_process, &$rrd_pipes) { function rrdtool_pipe_close($rrd_process, &$rrd_pipes) { - global $debug; - - if ($debug) { - echo stream_get_contents($rrd_pipes[1]); - echo stream_get_contents($rrd_pipes[2]); - } + d_echo(stream_get_contents($rrd_pipes[1])); + d_echo(stream_get_contents($rrd_pipes[2])); fclose($rrd_pipes[0]); fclose($rrd_pipes[1]); @@ -170,7 +166,7 @@ function rrdtool_graph($graph_file, $options) { function rrdtool($command, $filename, $options) { global $config, $debug, $rrd_pipes, $console_color; - if ($command != 'create' && $config['rrdcached']) { + if ($config['rrdcached'] && ($config['rrdtool_version'] >= 1.5 || $command != "create")) { if (isset($config['rrdcached_dir']) && $config['rrdcached_dir'] !== false) { $filename = str_replace($config['rrd_dir'].'/', './'.$config['rrdcached_dir'].'/', $filename); $filename = str_replace($config['rrd_dir'], './'.$config['rrdcached_dir'].'/', $filename); @@ -195,7 +191,7 @@ function rrdtool($command, $filename, $options) { print $console_color->convert('RRD[%g'.$cmd.'%n] '); } else { - $tmp = stream_get_contents($rrd_pipes[1]).stream_get_contents($rrd_pipes[2]); + return array(stream_get_contents($rrd_pipes[1]),stream_get_contents($rrd_pipes[2])); } } @@ -210,21 +206,14 @@ function rrdtool($command, $filename, $options) { function rrdtool_create($filename, $options) { - global $config, $debug, $console_color; - - if ($config['norrd']) { - print $console_color->convert('[%gRRD Disabled%n] ', false); + global $config; + if( $config['rrdcached'] && $config['rrdtool_version'] >= 1.5 ) { + $chk = rrdtool('info', $filename, ''); + if (!empty($chk[0])) { + return true; + } } - else { - $command = $config['rrdtool']." create $filename $options"; - } - - if ($debug) { - print $console_color->convert('RRD[%g'.$command.'%n] '); - } - - return shell_exec($command); - + return rrdtool('create', $filename, str_replace(array("\r", "\n"), '', $options)); } diff --git a/includes/services/dns/check.inc b/includes/services/dns/check.inc index 28fa47993..0b259d68d 100644 --- a/includes/services/dns/check.inc +++ b/includes/services/dns/check.inc @@ -1,9 +1,10 @@ $db_rev) { + + if (isset($_SESSION['stage']) ) { + $limit++; + if ( time()-$_SESSION['last'] > 45 ) { + $_SESSION['offset'] = $limit; + $GLOBALS['refresh'] = 'Updating, please wait..'.date('r').''; + return; + } + } + if (!$updating) { echo "-- Updating database schema\n"; } @@ -103,9 +121,7 @@ foreach ($filelist as $file) { foreach (explode("\n", $data) as $line) { if (trim($line)) { - if ($debug) { - echo "$line \n"; - } + d_echo("$line \n"); if ($line[0] != '#') { if ($config['db']['extension'] == 'mysqli') { @@ -120,7 +136,7 @@ foreach ($filelist as $file) { if ($config['db']['extension'] == 'mysqli') { echo mysqli_error($database_link)."\n"; } - else { + else { echo mysql_error()."\n"; } } @@ -142,16 +158,19 @@ foreach ($filelist as $file) { $updating++; $db_rev = $filename; + if ($insert) { + dbInsert(array('version' => $db_rev), 'dbSchema'); + } + else { + dbUpdate(array('version' => $db_rev), 'dbSchema'); + } }//end if }//end foreach if ($updating) { - if ($insert) { - dbInsert(array('version' => $db_rev), 'dbSchema'); - } - else { - dbUpdate(array('version' => $db_rev), 'dbSchema'); - } - echo "-- Done\n"; + if( isset($_SESSION['stage']) ) { + $_SESSION['build-ok'] = true; + } } + diff --git a/includes/syslog.php b/includes/syslog.php index 4c24270c7..7111a6be6 100644 --- a/includes/syslog.php +++ b/includes/syslog.php @@ -46,6 +46,7 @@ function process_syslog($entry, $update) { } } + $entry['host'] = preg_replace("/^::ffff:/", "", $entry['host']); $entry['device_id'] = get_cache($entry['host'], 'device_id'); if ($entry['device_id']) { $os = get_cache($entry['host'], 'os'); diff --git a/includes/versioncheck.inc.php b/includes/versioncheck.inc.php deleted file mode 100644 index 2f3143c49..000000000 --- a/includes/versioncheck.inc.php +++ /dev/null @@ -1,73 +0,0 @@ - ".$config['rrd_dir']."/version.txt "); - } else { - if ($cur != $data) - { - echo("Current Revision : $cur_revision\n"); - - if ($omnipotence > $cur_revision) - { - echo("New Revision : $omnipotence\n"); - } - - # if ($omnipotence > $cur_omnipotence) - # { - # echo("New version : $omnipotence.$year.$month.$revision\n"); - # } elseif ($year > $cur_year) { - # echo("New version : $omnipotence.$year.$month.$revision\n"); - # } elseif ($month > $cur_month) { - # echo("New version : $omnipotence.$year.$month.$revision\n"); - # } elseif ($revision > $cur_revision) { - # echo("New release : $omnipotence.$year.$month.$revision\n"); - # } - } - } - } - - fclose($dataHandle); - } -*/ diff --git a/irc.php b/irc.php index 96cc1a572..4a9a374d3 100755 --- a/irc.php +++ b/irc.php @@ -74,7 +74,6 @@ class ircbot { $this->sql = $database_link; } - $this->j = 2; $this->config = $config; $this->debug = $this->config['irc_debug']; $this->config['irc_authtime'] = $this->config['irc_authtime'] ? $this->config['irc_authtime'] : 3; @@ -150,6 +149,8 @@ class ircbot { $this->connect_alert(); } + $this->j = 2; + $this->connect(); $this->log('Connected'); if ($this->pass) { @@ -159,7 +160,7 @@ class ircbot { $this->doAuth(); while (true) { foreach ($this->socket as $n => $socket) { - if (!is_resource($socket)) { + if (!is_resource($socket) || feof($socket)) { $this->log("Socket '$n' closed. Restarting."); break 2; } @@ -227,9 +228,20 @@ class ircbot { return false; } + switch ($alert['state']): + case 3: $severity_extended = '+'; break; + case 4: $severity_extended = '-'; break; + default: $severity_extended = ''; + endswitch; + + $severity = str_replace(array('warning', 'critical'), array(chr(3).'8Warning', chr(3).'4Critical'), $alert['severity']).$severity_extended.chr(3).' '; + if ($alert['state'] == 0 and $this->config['irc_alert_utf8']) { + $severity = str_replace(array('Warning', 'Critical'), array('W̶a̶r̶n̶i̶n̶g̶', 'C̶r̶i̶t̶i̶c̶a̶l̶'), $severity); + } + if ($this->config['irc_alert_chan']) { foreach ($this->config['irc_alert_chan'] as $chan) { - $this->irc_raw('PRIVMSG '.$chan.' :'.trim($alert['title']).' - Rule: '.trim($alert['name'] ? $alert['name'] : $alert['rule']).(sizeof($alert['faults']) > 0 ? ' - Faults:' : '')); + $this->irc_raw('PRIVMSG '.$chan.' :'.$severity.trim($alert['title']).' - Rule: '.trim($alert['name'] ? $alert['name'] : $alert['rule']).(sizeof($alert['faults']) > 0 ? ' - Faults:' : '')); foreach ($alert['faults'] as $k => $v) { $this->irc_raw('PRIVMSG '.$chan.' :#'.$k.' '.$v['string']); } @@ -238,7 +250,7 @@ class ircbot { else { foreach ($this->authd as $nick => $data) { if ($data['expire'] >= time()) { - $this->irc_raw('PRIVMSG '.$nick.' :'.trim($alert['title']).' - Rule: '.trim($alert['name'] ? $alert['name'] : $alert['rule']).(sizeof($alert['faults']) > 0 ? ' - Faults'.(sizeof($alert['faults']) > 3 ? ' (showing first 3 out of '.sizeof($alert['faults']).' )' : '' ).':' : '')); + $this->irc_raw('PRIVMSG '.$nick.' :'.$severity.trim($alert['title']).' - Rule: '.trim($alert['name'] ? $alert['name'] : $alert['rule']).(sizeof($alert['faults']) > 0 ? ' - Faults'.(sizeof($alert['faults']) > 3 ? ' (showing first 3 out of '.sizeof($alert['faults']).' )' : '' ).':' : '')); foreach ($alert['faults'] as $k => $v) { $this->irc_raw('PRIVMSG '.$nick.' :#'.$k.' '.$v['string']); if ($k >= 3) { diff --git a/lib/Font-Awesome/CONTRIBUTING.md b/lib/Font-Awesome/CONTRIBUTING.md index a78162ed3..b3d4f878d 100644 --- a/lib/Font-Awesome/CONTRIBUTING.md +++ b/lib/Font-Awesome/CONTRIBUTING.md @@ -20,6 +20,19 @@ New icons mostly start as requests by the [Font Awesome community on GitHub](../ +## Suggesting icon keyword addition/removal + +Icon filters are maintained by the [Font Awesome community on GitHub](../../pulls?q=is%3Apr+label%3Adoc). + +If you feel that an icon + +* is missing keyword(s) +* contains invalid keyword(s) + +please send a [PR](https://help.github.com/articles/using-pull-requests/) to the `master` branch. + + + ## Reporting issues We only accept issues that are icon requests, bug reports, or feature requests. Bugs must be isolated and reproducible problems that we can fix within the Font Awesome core. Please read the following guidelines to ensure you are the paragon of bug reporting. @@ -33,7 +46,7 @@ We only accept issues that are icon requests, bug reports, or feature requests. ## Key branches -- `master` is the latest, deployed version (not to be used for pull requests) +- `master` is the latest, deployed version (use for pull request if they only affect the docs) - `gh-pages` is the hosted docs (not to be used for pull requests) - `*-wip` branches are the official work in progress branches for the next releases. All pull requests should be submitted against the appropriate branch diff --git a/lib/Font-Awesome/Gemfile b/lib/Font-Awesome/Gemfile index b87c4d824..0ca1cbfd5 100644 --- a/lib/Font-Awesome/Gemfile +++ b/lib/Font-Awesome/Gemfile @@ -3,3 +3,5 @@ source 'https://rubygems.org' gem 'jekyll', '~> 1.0' gem 'safe_yaml', '~> 1.0.4' gem 'sass', '~> 3.0' +gem 'less', '~> 2.5.0' +gem 'therubyracer' diff --git a/lib/Font-Awesome/Gemfile.lock b/lib/Font-Awesome/Gemfile.lock index 82bb3d496..9394f2dd5 100644 --- a/lib/Font-Awesome/Gemfile.lock +++ b/lib/Font-Awesome/Gemfile.lock @@ -7,8 +7,9 @@ GEM colorator (0.1) commander (4.1.6) highline (~> 1.6.11) + commonjs (0.2.7) fast-stemmer (1.0.2) - ffi (1.9.8) + ffi (1.9.6) highline (1.6.21) jekyll (1.5.1) classifier (~> 1.3) @@ -21,6 +22,9 @@ GEM redcarpet (~> 2.3.0) safe_yaml (~> 1.0) toml (~> 0.1.0) + less (2.5.1) + commonjs (~> 0.2.7) + libv8 (3.16.14.7) liquid (2.5.5) listen (1.3.1) rb-fsevent (>= 0.9.3) @@ -29,7 +33,7 @@ GEM maruku (0.7.0) parslet (1.5.0) blankslate (~> 2.0) - posix-spawn (0.3.10) + posix-spawn (0.3.9) pygments.rb (0.5.4) posix-spawn (~> 0.3.6) yajl-ruby (~> 1.1.0) @@ -39,8 +43,12 @@ GEM rb-kqueue (0.2.3) ffi (>= 0.5.0) redcarpet (2.3.0) + ref (1.0.5) safe_yaml (1.0.4) - sass (3.4.13) + sass (3.4.11) + therubyracer (0.12.1) + libv8 (~> 3.16.14.0) + ref toml (0.1.2) parslet (~> 1.5.0) yajl-ruby (1.1.0) @@ -50,5 +58,7 @@ PLATFORMS DEPENDENCIES jekyll (~> 1.0) + less (~> 2.5.0) safe_yaml (~> 1.0.4) sass (~> 3.0) + therubyracer diff --git a/lib/Font-Awesome/HELP-US-OUT.txt b/lib/Font-Awesome/HELP-US-OUT.txt new file mode 100644 index 000000000..cfd9d9f3c --- /dev/null +++ b/lib/Font-Awesome/HELP-US-OUT.txt @@ -0,0 +1,7 @@ +I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, +Fonticons (https://fonticons.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, +comprehensive icon sets or copy and paste your own. + +Please. Check it out. + +-Dave Gandy diff --git a/lib/Font-Awesome/README.md b/lib/Font-Awesome/README.md index 0fe866965..b7b4514bc 100644 --- a/lib/Font-Awesome/README.md +++ b/lib/Font-Awesome/README.md @@ -1,7 +1,7 @@ -#[Font Awesome v4.3.0](http://fontawesome.io) +#[Font Awesome v4.4.0](http://fontawesome.io) ###The iconic font and CSS framework -Font Awesome is a full suite of 519 pictographic icons for easy scalable vector graphics on websites, +Font Awesome is a full suite of 585 pictographic icons for easy scalable vector graphics on websites, created and maintained by [Dave Gandy](http://twitter.com/davegandy). Stay up to date with the latest release and announcements on Twitter: [@fontawesome](http://twitter.com/fontawesome). @@ -20,20 +20,21 @@ Get started at http://fontawesome.io! - Full details: http://fontawesome.io/license ##Changelog -- v3.0.0 - all icons redesigned from scratch, optimized for Bootstrap's 14px default -- v3.0.1 - much improved rendering in webkit, various bug fixes -- v3.0.2 - much improved rendering and alignment in IE7 -- v3.1.0 - Added 54 icons, icon stacking styles, flipping and rotating icons, removed Sass support -- [v3.1.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=4&page=1&state=closed) -- [v3.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=3&page=1&state=closed) -- [v3.2.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=5&page=1&state=closed) -- [v4.0.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=2&page=1&state=closed) -- [v4.0.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=7&page=1&state=closed) -- [v4.0.2 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=8&page=1&state=closed) -- [v4.0.3 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=9&page=1&state=closed) -- [v4.1.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=6&page=1&state=closed) -- [v4.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=12&page=1&state=closed) +- [v4.4.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.4.0+is%3Aclosed) - [v4.3.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.3.0+is%3Aclosed) +- [v4.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=12&page=1&state=closed) +- [v4.1.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=6&page=1&state=closed) +- [v4.0.3 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=9&page=1&state=closed) +- [v4.0.2 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=8&page=1&state=closed) +- [v4.0.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=7&page=1&state=closed) +- [v4.0.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=2&page=1&state=closed) +- [v3.2.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=5&page=1&state=closed) +- [v3.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=3&page=1&state=closed) +- [v3.1.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=4&page=1&state=closed) +- v3.1.0 - Added 54 icons, icon stacking styles, flipping and rotating icons, removed Sass support +- v3.0.2 - much improved rendering and alignment in IE7 +- v3.0.1 - much improved rendering in webkit, various bug fixes +- v3.0.0 - all icons redesigned from scratch, optimized for Bootstrap's 14px default ## Contributing @@ -73,6 +74,17 @@ to the `dependencies` in your `component.json`. ## Hacking on Font Awesome +**Before you can build the project**, you must first have the following installed: + +- [Ruby](https://www.ruby-lang.org/en/) +- Ruby Development Headers + - **Ubuntu:** `sudo apt-get install ruby-dev` *(Only if you're __NOT__ using `rbenv` or `rvm`)* + - **Windows:** [DevKit](http://rubyinstaller.org/) +- [Bundler](http://bundler.io/) (Run `gem install bundler` to install). +- [Node Package Manager (AKA NPM)](https://docs.npmjs.com/getting-started/installing-node) +- [Less](http://lesscss.org/) (Run `npm install -g less` to install). +- [Less Plugin: Clean CSS](https://github.com/less/less-plugin-clean-css) (Run `npm install -g less-plugin-clean-css` to install). + From the root of the repository, install the tools used to develop. $ bundle install diff --git a/lib/Font-Awesome/_config.yml b/lib/Font-Awesome/_config.yml index 86fcb0e6f..9b87a8594 100644 --- a/lib/Font-Awesome/_config.yml +++ b/lib/Font-Awesome/_config.yml @@ -19,9 +19,10 @@ icon_layout: icon.html # Relative to _layouts directory icon_destination: icon # Relative to destination fontawesome: - version: 4.3.0 - minor_version: 4.3 - doc_blob: v4.3.0 + version: 4.4.0 + minor_version: 4.4 + major_version: 4 + doc_blob: v4.4.0 url: http://fontawesome.io legacy_url: http://fortawesome.github.com/Font-Awesome/ blog_url: http://blog.fontawesome.io @@ -49,8 +50,11 @@ fontawesome: url: http://creativecommons.org/licenses/by/3.0/ bootstrap: - version: 3.2.0 + version: 3.3.5 url: http://getbootstrap.com jquery: - version: 1.11.1 + version: 1.11.3 + +jquery_validate: + version: 1.13.1 diff --git a/lib/Font-Awesome/bower.json b/lib/Font-Awesome/bower.json index 716617e01..9e2112659 100644 --- a/lib/Font-Awesome/bower.json +++ b/lib/Font-Awesome/bower.json @@ -1,15 +1,14 @@ { "name": "font-awesome", "description": "Font Awesome", - "version": "4.3.0", "keywords": [], "homepage": "http://fontawesome.io", "dependencies": {}, "devDependencies": {}, "license": ["OFL-1.1", "MIT", "CC-BY-3.0"], "main": [ - "./css/font-awesome.css", - "./fonts/*" + "less/font-awesome.less", + "scss/font-awesome.scss" ], "ignore": [ "*/.*", diff --git a/lib/Font-Awesome/component.json b/lib/Font-Awesome/component.json index dff5a1755..9612e4565 100644 --- a/lib/Font-Awesome/component.json +++ b/lib/Font-Awesome/component.json @@ -2,7 +2,7 @@ "name": "font-awesome", "repo": "FortAwesome/Font-Awesome", "description": "Font Awesome", - "version": "4.3.0", + "version": "4.4.0", "keywords": [], "dependencies": {}, "development": {}, @@ -15,6 +15,7 @@ "fonts/fontawesome-webfont.svg", "fonts/fontawesome-webfont.ttf", "fonts/fontawesome-webfont.woff", + "fonts/fontawesome-webfont.woff2", "fonts/FontAwesome.otf" ] } diff --git a/lib/Font-Awesome/css/font-awesome.css b/lib/Font-Awesome/css/font-awesome.css index 2dcdc2207..880eb8250 100644 --- a/lib/Font-Awesome/css/font-awesome.css +++ b/lib/Font-Awesome/css/font-awesome.css @@ -1,13 +1,13 @@ /*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ /* FONT PATH * -------------------------- */ @font-face { font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.3.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); + src: url('../fonts/fontawesome-webfont.eot?v=4.4.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } @@ -18,7 +18,6 @@ text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); } /* makes the font 33% larger relative to the icon container */ .fa-lg { @@ -65,6 +64,19 @@ border: solid 0.08em #eeeeee; border-radius: .1em; } +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ .pull-right { float: right; } @@ -628,6 +640,7 @@ .fa-credit-card:before { content: "\f09d"; } +.fa-feed:before, .fa-rss:before { content: "\f09e"; } @@ -1509,6 +1522,8 @@ .fa-git:before { content: "\f1d3"; } +.fa-y-combinator-square:before, +.fa-yc-square:before, .fa-hacker-news:before { content: "\f1d4"; } @@ -1533,7 +1548,6 @@ .fa-history:before { content: "\f1da"; } -.fa-genderless:before, .fa-circle-thin:before { content: "\f1db"; } @@ -1738,6 +1752,7 @@ .fa-mercury:before { content: "\f223"; } +.fa-intersex:before, .fa-transgender:before { content: "\f224"; } @@ -1765,6 +1780,9 @@ .fa-neuter:before { content: "\f22c"; } +.fa-genderless:before { + content: "\f22d"; +} .fa-facebook-official:before { content: "\f230"; } @@ -1799,3 +1817,210 @@ .fa-medium:before { content: "\f23a"; } +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} diff --git a/lib/Font-Awesome/css/font-awesome.min.css b/lib/Font-Awesome/css/font-awesome.min.css index 24fcc04c4..ee4e9782b 100644 --- a/lib/Font-Awesome/css/font-awesome.min.css +++ b/lib/Font-Awesome/css/font-awesome.min.css @@ -1,4 +1,4 @@ /*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} diff --git a/lib/Font-Awesome/fonts/FontAwesome.otf b/lib/Font-Awesome/fonts/FontAwesome.otf index f7936cc1e..681bdd4d4 100644 Binary files a/lib/Font-Awesome/fonts/FontAwesome.otf and b/lib/Font-Awesome/fonts/FontAwesome.otf differ diff --git a/lib/Font-Awesome/fonts/fontawesome-webfont.eot b/lib/Font-Awesome/fonts/fontawesome-webfont.eot index 33b2bb800..a30335d74 100644 Binary files a/lib/Font-Awesome/fonts/fontawesome-webfont.eot and b/lib/Font-Awesome/fonts/fontawesome-webfont.eot differ diff --git a/lib/Font-Awesome/fonts/fontawesome-webfont.svg b/lib/Font-Awesome/fonts/fontawesome-webfont.svg index 1ee89d436..6fd19abcb 100644 --- a/lib/Font-Awesome/fonts/fontawesome-webfont.svg +++ b/lib/Font-Awesome/fonts/fontawesome-webfont.svg @@ -399,7 +399,7 @@ - + @@ -411,8 +411,8 @@ - - + + @@ -459,7 +459,7 @@ - + @@ -483,13 +483,13 @@ - + - + @@ -523,7 +523,7 @@ - + @@ -531,18 +531,18 @@ - + - + - + - + @@ -556,10 +556,85 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/Font-Awesome/fonts/fontawesome-webfont.ttf b/lib/Font-Awesome/fonts/fontawesome-webfont.ttf index ed9372f8e..d7994e130 100644 Binary files a/lib/Font-Awesome/fonts/fontawesome-webfont.ttf and b/lib/Font-Awesome/fonts/fontawesome-webfont.ttf differ diff --git a/lib/Font-Awesome/fonts/fontawesome-webfont.woff b/lib/Font-Awesome/fonts/fontawesome-webfont.woff index 8b280b98f..6fd4ede0f 100644 Binary files a/lib/Font-Awesome/fonts/fontawesome-webfont.woff and b/lib/Font-Awesome/fonts/fontawesome-webfont.woff differ diff --git a/lib/Font-Awesome/fonts/fontawesome-webfont.woff2 b/lib/Font-Awesome/fonts/fontawesome-webfont.woff2 index 3311d5851..5560193cc 100644 Binary files a/lib/Font-Awesome/fonts/fontawesome-webfont.woff2 and b/lib/Font-Awesome/fonts/fontawesome-webfont.woff2 differ diff --git a/lib/Font-Awesome/less/bordered-pulled.less b/lib/Font-Awesome/less/bordered-pulled.less index 0c90eb567..f1c8ad75f 100644 --- a/lib/Font-Awesome/less/bordered-pulled.less +++ b/lib/Font-Awesome/less/bordered-pulled.less @@ -7,6 +7,15 @@ border-radius: .1em; } +.@{fa-css-prefix}-pull-left { float: left; } +.@{fa-css-prefix}-pull-right { float: right; } + +.@{fa-css-prefix} { + &.@{fa-css-prefix}-pull-left { margin-right: .3em; } + &.@{fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } diff --git a/lib/Font-Awesome/less/core.less b/lib/Font-Awesome/less/core.less index f814f1e17..c577ac84a 100644 --- a/lib/Font-Awesome/less/core.less +++ b/lib/Font-Awesome/less/core.less @@ -3,11 +3,10 @@ .@{fa-css-prefix} { display: inline-block; - font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } diff --git a/lib/Font-Awesome/less/font-awesome.less b/lib/Font-Awesome/less/font-awesome.less index 1f45c63d1..e3f89c8f6 100644 --- a/lib/Font-Awesome/less/font-awesome.less +++ b/lib/Font-Awesome/less/font-awesome.less @@ -1,5 +1,5 @@ /*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ diff --git a/lib/Font-Awesome/less/icons.less b/lib/Font-Awesome/less/icons.less index c265de5a6..6ebe9669e 100644 --- a/lib/Font-Awesome/less/icons.less +++ b/lib/Font-Awesome/less/icons.less @@ -163,6 +163,7 @@ .@{fa-css-prefix}-github:before { content: @fa-var-github; } .@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; } .@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; } +.@{fa-css-prefix}-feed:before, .@{fa-css-prefix}-rss:before { content: @fa-var-rss; } .@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; } .@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; } @@ -492,6 +493,8 @@ .@{fa-css-prefix}-empire:before { content: @fa-var-empire; } .@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; } .@{fa-css-prefix}-git:before { content: @fa-var-git; } +.@{fa-css-prefix}-y-combinator-square:before, +.@{fa-css-prefix}-yc-square:before, .@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; } .@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; } .@{fa-css-prefix}-qq:before { content: @fa-var-qq; } @@ -502,7 +505,6 @@ .@{fa-css-prefix}-send-o:before, .@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; } .@{fa-css-prefix}-history:before { content: @fa-var-history; } -.@{fa-css-prefix}-genderless:before, .@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; } .@{fa-css-prefix}-header:before { content: @fa-var-header; } .@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; } @@ -573,6 +575,7 @@ .@{fa-css-prefix}-venus:before { content: @fa-var-venus; } .@{fa-css-prefix}-mars:before { content: @fa-var-mars; } .@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } +.@{fa-css-prefix}-intersex:before, .@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } .@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; } .@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; } @@ -582,6 +585,7 @@ .@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; } .@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; } .@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; } +.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; } .@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; } .@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; } .@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; } @@ -594,3 +598,80 @@ .@{fa-css-prefix}-train:before { content: @fa-var-train; } .@{fa-css-prefix}-subway:before { content: @fa-var-subway; } .@{fa-css-prefix}-medium:before { content: @fa-var-medium; } +.@{fa-css-prefix}-yc:before, +.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; } +.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } +.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; } +.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } +.@{fa-css-prefix}-battery-4:before, +.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; } +.@{fa-css-prefix}-battery-3:before, +.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; } +.@{fa-css-prefix}-battery-2:before, +.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; } +.@{fa-css-prefix}-battery-1:before, +.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; } +.@{fa-css-prefix}-battery-0:before, +.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; } +.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } +.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; } +.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; } +.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; } +.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; } +.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; } +.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; } +.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; } +.@{fa-css-prefix}-clone:before { content: @fa-var-clone; } +.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } +.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; } +.@{fa-css-prefix}-hourglass-1:before, +.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; } +.@{fa-css-prefix}-hourglass-2:before, +.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; } +.@{fa-css-prefix}-hourglass-3:before, +.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; } +.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; } +.@{fa-css-prefix}-hand-grab-o:before, +.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; } +.@{fa-css-prefix}-hand-stop-o:before, +.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; } +.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; } +.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; } +.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; } +.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; } +.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; } +.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } +.@{fa-css-prefix}-registered:before { content: @fa-var-registered; } +.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } +.@{fa-css-prefix}-gg:before { content: @fa-var-gg; } +.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; } +.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; } +.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; } +.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; } +.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; } +.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; } +.@{fa-css-prefix}-safari:before { content: @fa-var-safari; } +.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; } +.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } +.@{fa-css-prefix}-opera:before { content: @fa-var-opera; } +.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } +.@{fa-css-prefix}-tv:before, +.@{fa-css-prefix}-television:before { content: @fa-var-television; } +.@{fa-css-prefix}-contao:before { content: @fa-var-contao; } +.@{fa-css-prefix}-500px:before { content: @fa-var-500px; } +.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; } +.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; } +.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; } +.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; } +.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; } +.@{fa-css-prefix}-industry:before { content: @fa-var-industry; } +.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; } +.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; } +.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; } +.@{fa-css-prefix}-map:before { content: @fa-var-map; } +.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; } +.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; } +.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; } +.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; } +.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; } +.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; } diff --git a/lib/Font-Awesome/less/mixins.less b/lib/Font-Awesome/less/mixins.less index c97f4604c..d5a43a145 100644 --- a/lib/Font-Awesome/less/mixins.less +++ b/lib/Font-Awesome/less/mixins.less @@ -3,12 +3,11 @@ .fa-icon() { display: inline-block; - font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } diff --git a/lib/Font-Awesome/less/variables.less b/lib/Font-Awesome/less/variables.less index d526064c8..00418e757 100644 --- a/lib/Font-Awesome/less/variables.less +++ b/lib/Font-Awesome/less/variables.less @@ -3,19 +3,22 @@ @fa-font-path: "../fonts"; @fa-font-size-base: 14px; -//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts"; // for referencing Bootstrap CDN font files directly +@fa-line-height-base: 1; +//@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.4.0/fonts"; // for referencing Bootstrap CDN font files directly @fa-css-prefix: fa; -@fa-version: "4.3.0"; +@fa-version: "4.4.0"; @fa-border-color: #eee; @fa-inverse: #fff; @fa-li-width: (30em / 14); +@fa-var-500px: "\f26e"; @fa-var-adjust: "\f042"; @fa-var-adn: "\f170"; @fa-var-align-center: "\f037"; @fa-var-align-justify: "\f039"; @fa-var-align-left: "\f036"; @fa-var-align-right: "\f038"; +@fa-var-amazon: "\f270"; @fa-var-ambulance: "\f0f9"; @fa-var-anchor: "\f13d"; @fa-var-android: "\f17b"; @@ -51,12 +54,23 @@ @fa-var-at: "\f1fa"; @fa-var-automobile: "\f1b9"; @fa-var-backward: "\f04a"; +@fa-var-balance-scale: "\f24e"; @fa-var-ban: "\f05e"; @fa-var-bank: "\f19c"; @fa-var-bar-chart: "\f080"; @fa-var-bar-chart-o: "\f080"; @fa-var-barcode: "\f02a"; @fa-var-bars: "\f0c9"; +@fa-var-battery-0: "\f244"; +@fa-var-battery-1: "\f243"; +@fa-var-battery-2: "\f242"; +@fa-var-battery-3: "\f241"; +@fa-var-battery-4: "\f240"; +@fa-var-battery-empty: "\f244"; +@fa-var-battery-full: "\f240"; +@fa-var-battery-half: "\f242"; +@fa-var-battery-quarter: "\f243"; +@fa-var-battery-three-quarters: "\f241"; @fa-var-bed: "\f236"; @fa-var-beer: "\f0fc"; @fa-var-behance: "\f1b4"; @@ -71,6 +85,7 @@ @fa-var-bitbucket: "\f171"; @fa-var-bitbucket-square: "\f172"; @fa-var-bitcoin: "\f15a"; +@fa-var-black-tie: "\f27e"; @fa-var-bold: "\f032"; @fa-var-bolt: "\f0e7"; @fa-var-bomb: "\f1e2"; @@ -89,7 +104,11 @@ @fa-var-cab: "\f1ba"; @fa-var-calculator: "\f1ec"; @fa-var-calendar: "\f073"; +@fa-var-calendar-check-o: "\f274"; +@fa-var-calendar-minus-o: "\f272"; @fa-var-calendar-o: "\f133"; +@fa-var-calendar-plus-o: "\f271"; +@fa-var-calendar-times-o: "\f273"; @fa-var-camera: "\f030"; @fa-var-camera-retro: "\f083"; @fa-var-car: "\f1b9"; @@ -105,7 +124,9 @@ @fa-var-cart-plus: "\f217"; @fa-var-cc: "\f20a"; @fa-var-cc-amex: "\f1f3"; +@fa-var-cc-diners-club: "\f24c"; @fa-var-cc-discover: "\f1f2"; +@fa-var-cc-jcb: "\f24b"; @fa-var-cc-mastercard: "\f1f1"; @fa-var-cc-paypal: "\f1f4"; @fa-var-cc-stripe: "\f1f5"; @@ -127,12 +148,14 @@ @fa-var-chevron-right: "\f054"; @fa-var-chevron-up: "\f077"; @fa-var-child: "\f1ae"; +@fa-var-chrome: "\f268"; @fa-var-circle: "\f111"; @fa-var-circle-o: "\f10c"; @fa-var-circle-o-notch: "\f1ce"; @fa-var-circle-thin: "\f1db"; @fa-var-clipboard: "\f0ea"; @fa-var-clock-o: "\f017"; +@fa-var-clone: "\f24d"; @fa-var-close: "\f00d"; @fa-var-cloud: "\f0c2"; @fa-var-cloud-download: "\f0ed"; @@ -147,13 +170,17 @@ @fa-var-columns: "\f0db"; @fa-var-comment: "\f075"; @fa-var-comment-o: "\f0e5"; +@fa-var-commenting: "\f27a"; +@fa-var-commenting-o: "\f27b"; @fa-var-comments: "\f086"; @fa-var-comments-o: "\f0e6"; @fa-var-compass: "\f14e"; @fa-var-compress: "\f066"; @fa-var-connectdevelop: "\f20e"; +@fa-var-contao: "\f26d"; @fa-var-copy: "\f0c5"; @fa-var-copyright: "\f1f9"; +@fa-var-creative-commons: "\f25e"; @fa-var-credit-card: "\f09d"; @fa-var-crop: "\f125"; @fa-var-crosshairs: "\f05b"; @@ -193,6 +220,7 @@ @fa-var-exclamation-circle: "\f06a"; @fa-var-exclamation-triangle: "\f071"; @fa-var-expand: "\f065"; +@fa-var-expeditedssl: "\f23e"; @fa-var-external-link: "\f08e"; @fa-var-external-link-square: "\f14c"; @fa-var-eye: "\f06e"; @@ -205,6 +233,7 @@ @fa-var-fast-backward: "\f049"; @fa-var-fast-forward: "\f050"; @fa-var-fax: "\f1ac"; +@fa-var-feed: "\f09e"; @fa-var-female: "\f182"; @fa-var-fighter-jet: "\f0fb"; @fa-var-file: "\f15b"; @@ -230,6 +259,7 @@ @fa-var-filter: "\f0b0"; @fa-var-fire: "\f06d"; @fa-var-fire-extinguisher: "\f134"; +@fa-var-firefox: "\f269"; @fa-var-flag: "\f024"; @fa-var-flag-checkered: "\f11e"; @fa-var-flag-o: "\f11d"; @@ -242,6 +272,7 @@ @fa-var-folder-open: "\f07c"; @fa-var-folder-open-o: "\f115"; @fa-var-font: "\f031"; +@fa-var-fonticons: "\f280"; @fa-var-forumbee: "\f211"; @fa-var-forward: "\f04e"; @fa-var-foursquare: "\f180"; @@ -253,7 +284,10 @@ @fa-var-ge: "\f1d1"; @fa-var-gear: "\f013"; @fa-var-gears: "\f085"; -@fa-var-genderless: "\f1db"; +@fa-var-genderless: "\f22d"; +@fa-var-get-pocket: "\f265"; +@fa-var-gg: "\f260"; +@fa-var-gg-circle: "\f261"; @fa-var-gift: "\f06b"; @fa-var-git: "\f1d3"; @fa-var-git-square: "\f1d2"; @@ -272,10 +306,19 @@ @fa-var-group: "\f0c0"; @fa-var-h-square: "\f0fd"; @fa-var-hacker-news: "\f1d4"; +@fa-var-hand-grab-o: "\f255"; +@fa-var-hand-lizard-o: "\f258"; @fa-var-hand-o-down: "\f0a7"; @fa-var-hand-o-left: "\f0a5"; @fa-var-hand-o-right: "\f0a4"; @fa-var-hand-o-up: "\f0a6"; +@fa-var-hand-paper-o: "\f256"; +@fa-var-hand-peace-o: "\f25b"; +@fa-var-hand-pointer-o: "\f25a"; +@fa-var-hand-rock-o: "\f255"; +@fa-var-hand-scissors-o: "\f257"; +@fa-var-hand-spock-o: "\f259"; +@fa-var-hand-stop-o: "\f256"; @fa-var-hdd-o: "\f0a0"; @fa-var-header: "\f1dc"; @fa-var-headphones: "\f025"; @@ -286,16 +329,29 @@ @fa-var-home: "\f015"; @fa-var-hospital-o: "\f0f8"; @fa-var-hotel: "\f236"; +@fa-var-hourglass: "\f254"; +@fa-var-hourglass-1: "\f251"; +@fa-var-hourglass-2: "\f252"; +@fa-var-hourglass-3: "\f253"; +@fa-var-hourglass-end: "\f253"; +@fa-var-hourglass-half: "\f252"; +@fa-var-hourglass-o: "\f250"; +@fa-var-hourglass-start: "\f251"; +@fa-var-houzz: "\f27c"; @fa-var-html5: "\f13b"; +@fa-var-i-cursor: "\f246"; @fa-var-ils: "\f20b"; @fa-var-image: "\f03e"; @fa-var-inbox: "\f01c"; @fa-var-indent: "\f03c"; +@fa-var-industry: "\f275"; @fa-var-info: "\f129"; @fa-var-info-circle: "\f05a"; @fa-var-inr: "\f156"; @fa-var-instagram: "\f16d"; @fa-var-institution: "\f19c"; +@fa-var-internet-explorer: "\f26b"; +@fa-var-intersex: "\f224"; @fa-var-ioxhost: "\f208"; @fa-var-italic: "\f033"; @fa-var-joomla: "\f1aa"; @@ -340,7 +396,11 @@ @fa-var-mail-reply: "\f112"; @fa-var-mail-reply-all: "\f122"; @fa-var-male: "\f183"; +@fa-var-map: "\f279"; @fa-var-map-marker: "\f041"; +@fa-var-map-o: "\f278"; +@fa-var-map-pin: "\f276"; +@fa-var-map-signs: "\f277"; @fa-var-mars: "\f222"; @fa-var-mars-double: "\f227"; @fa-var-mars-stroke: "\f229"; @@ -364,11 +424,19 @@ @fa-var-moon-o: "\f186"; @fa-var-mortar-board: "\f19d"; @fa-var-motorcycle: "\f21c"; +@fa-var-mouse-pointer: "\f245"; @fa-var-music: "\f001"; @fa-var-navicon: "\f0c9"; @fa-var-neuter: "\f22c"; @fa-var-newspaper-o: "\f1ea"; +@fa-var-object-group: "\f247"; +@fa-var-object-ungroup: "\f248"; +@fa-var-odnoklassniki: "\f263"; +@fa-var-odnoklassniki-square: "\f264"; +@fa-var-opencart: "\f23d"; @fa-var-openid: "\f19b"; +@fa-var-opera: "\f26a"; +@fa-var-optin-monster: "\f23c"; @fa-var-outdent: "\f03b"; @fa-var-pagelines: "\f18c"; @fa-var-paint-brush: "\f1fc"; @@ -418,6 +486,7 @@ @fa-var-reddit: "\f1a1"; @fa-var-reddit-square: "\f1a2"; @fa-var-refresh: "\f021"; +@fa-var-registered: "\f25d"; @fa-var-remove: "\f00d"; @fa-var-renren: "\f18b"; @fa-var-reorder: "\f0c9"; @@ -436,6 +505,7 @@ @fa-var-rub: "\f158"; @fa-var-ruble: "\f158"; @fa-var-rupee: "\f156"; +@fa-var-safari: "\f267"; @fa-var-save: "\f0c7"; @fa-var-scissors: "\f0c4"; @fa-var-search: "\f002"; @@ -499,6 +569,8 @@ @fa-var-step-backward: "\f048"; @fa-var-step-forward: "\f051"; @fa-var-stethoscope: "\f0f1"; +@fa-var-sticky-note: "\f249"; +@fa-var-sticky-note-o: "\f24a"; @fa-var-stop: "\f04d"; @fa-var-street-view: "\f21d"; @fa-var-strikethrough: "\f0cc"; @@ -517,6 +589,7 @@ @fa-var-tags: "\f02c"; @fa-var-tasks: "\f0ae"; @fa-var-taxi: "\f1ba"; +@fa-var-television: "\f26c"; @fa-var-tencent-weibo: "\f1d5"; @fa-var-terminal: "\f120"; @fa-var-text-height: "\f034"; @@ -540,6 +613,7 @@ @fa-var-toggle-on: "\f205"; @fa-var-toggle-right: "\f152"; @fa-var-toggle-up: "\f151"; +@fa-var-trademark: "\f25c"; @fa-var-train: "\f238"; @fa-var-transgender: "\f224"; @fa-var-transgender-alt: "\f225"; @@ -547,6 +621,7 @@ @fa-var-trash-o: "\f014"; @fa-var-tree: "\f1bb"; @fa-var-trello: "\f181"; +@fa-var-tripadvisor: "\f262"; @fa-var-trophy: "\f091"; @fa-var-truck: "\f0d1"; @fa-var-try: "\f195"; @@ -554,6 +629,7 @@ @fa-var-tumblr: "\f173"; @fa-var-tumblr-square: "\f174"; @fa-var-turkish-lira: "\f195"; +@fa-var-tv: "\f26c"; @fa-var-twitch: "\f1e8"; @fa-var-twitter: "\f099"; @fa-var-twitter-square: "\f081"; @@ -578,6 +654,7 @@ @fa-var-venus-mars: "\f228"; @fa-var-viacoin: "\f237"; @fa-var-video-camera: "\f03d"; +@fa-var-vimeo: "\f27d"; @fa-var-vimeo-square: "\f194"; @fa-var-vine: "\f1ca"; @fa-var-vk: "\f189"; @@ -591,13 +668,18 @@ @fa-var-whatsapp: "\f232"; @fa-var-wheelchair: "\f193"; @fa-var-wifi: "\f1eb"; +@fa-var-wikipedia-w: "\f266"; @fa-var-windows: "\f17a"; @fa-var-won: "\f159"; @fa-var-wordpress: "\f19a"; @fa-var-wrench: "\f0ad"; @fa-var-xing: "\f168"; @fa-var-xing-square: "\f169"; +@fa-var-y-combinator: "\f23b"; +@fa-var-y-combinator-square: "\f1d4"; @fa-var-yahoo: "\f19e"; +@fa-var-yc: "\f23b"; +@fa-var-yc-square: "\f1d4"; @fa-var-yelp: "\f1e9"; @fa-var-yen: "\f157"; @fa-var-youtube: "\f167"; diff --git a/lib/Font-Awesome/package.json b/lib/Font-Awesome/package.json index 6f98fe45a..bd1c19732 100644 --- a/lib/Font-Awesome/package.json +++ b/lib/Font-Awesome/package.json @@ -1,7 +1,8 @@ { "name": "font-awesome", "description": "The iconic font and CSS framework", - "version": "4.3.0", + "version": "4.4.0", + "style": "css/font-awesome.css", "keywords": ["font", "awesome", "fontawesome", "icon", "font", "bootstrap"], "homepage": "http://fontawesome.io/", "bugs": { @@ -30,16 +31,7 @@ "web": "http://twitter.com/supercodepoet" } ], - "licenses": [ - { - "type": "OFL-1.1", - "url": "http://scripts.sil.org/OFL" - }, - { - "type": "MIT", - "url": "http://opensource.org/licenses/mit-license.html" - } - ], + "license": "OFL-1.1 AND MIT", "dependencies": { }, "engines" : { diff --git a/lib/Font-Awesome/scss/_bordered-pulled.scss b/lib/Font-Awesome/scss/_bordered-pulled.scss index 9d3fdf3a0..d4b85a02f 100644 --- a/lib/Font-Awesome/scss/_bordered-pulled.scss +++ b/lib/Font-Awesome/scss/_bordered-pulled.scss @@ -7,6 +7,15 @@ border-radius: .1em; } +.#{$fa-css-prefix}-pull-left { float: left; } +.#{$fa-css-prefix}-pull-right { float: right; } + +.#{$fa-css-prefix} { + &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } + &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } +} + +/* Deprecated as of 4.4.0 */ .pull-right { float: right; } .pull-left { float: left; } diff --git a/lib/Font-Awesome/scss/_core.scss b/lib/Font-Awesome/scss/_core.scss index 5a2db9d56..7425ef85f 100644 --- a/lib/Font-Awesome/scss/_core.scss +++ b/lib/Font-Awesome/scss/_core.scss @@ -3,11 +3,10 @@ .#{$fa-css-prefix} { display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } diff --git a/lib/Font-Awesome/scss/_icons.scss b/lib/Font-Awesome/scss/_icons.scss index fbcfe8123..62d97677c 100644 --- a/lib/Font-Awesome/scss/_icons.scss +++ b/lib/Font-Awesome/scss/_icons.scss @@ -163,6 +163,7 @@ .#{$fa-css-prefix}-github:before { content: $fa-var-github; } .#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; } .#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; } +.#{$fa-css-prefix}-feed:before, .#{$fa-css-prefix}-rss:before { content: $fa-var-rss; } .#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; } .#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; } @@ -492,6 +493,8 @@ .#{$fa-css-prefix}-empire:before { content: $fa-var-empire; } .#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; } .#{$fa-css-prefix}-git:before { content: $fa-var-git; } +.#{$fa-css-prefix}-y-combinator-square:before, +.#{$fa-css-prefix}-yc-square:before, .#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; } .#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; } .#{$fa-css-prefix}-qq:before { content: $fa-var-qq; } @@ -502,7 +505,6 @@ .#{$fa-css-prefix}-send-o:before, .#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; } .#{$fa-css-prefix}-history:before { content: $fa-var-history; } -.#{$fa-css-prefix}-genderless:before, .#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; } .#{$fa-css-prefix}-header:before { content: $fa-var-header; } .#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; } @@ -573,6 +575,7 @@ .#{$fa-css-prefix}-venus:before { content: $fa-var-venus; } .#{$fa-css-prefix}-mars:before { content: $fa-var-mars; } .#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; } +.#{$fa-css-prefix}-intersex:before, .#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; } .#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; } .#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; } @@ -582,6 +585,7 @@ .#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; } .#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; } .#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; } +.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; } .#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; } .#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; } .#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; } @@ -594,3 +598,80 @@ .#{$fa-css-prefix}-train:before { content: $fa-var-train; } .#{$fa-css-prefix}-subway:before { content: $fa-var-subway; } .#{$fa-css-prefix}-medium:before { content: $fa-var-medium; } +.#{$fa-css-prefix}-yc:before, +.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; } +.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; } +.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; } +.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; } +.#{$fa-css-prefix}-battery-4:before, +.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; } +.#{$fa-css-prefix}-battery-3:before, +.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; } +.#{$fa-css-prefix}-battery-2:before, +.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; } +.#{$fa-css-prefix}-battery-1:before, +.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; } +.#{$fa-css-prefix}-battery-0:before, +.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; } +.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; } +.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; } +.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; } +.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; } +.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; } +.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; } +.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; } +.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; } +.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; } +.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; } +.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; } +.#{$fa-css-prefix}-hourglass-1:before, +.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; } +.#{$fa-css-prefix}-hourglass-2:before, +.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; } +.#{$fa-css-prefix}-hourglass-3:before, +.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; } +.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; } +.#{$fa-css-prefix}-hand-grab-o:before, +.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; } +.#{$fa-css-prefix}-hand-stop-o:before, +.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; } +.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; } +.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; } +.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; } +.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; } +.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; } +.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; } +.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; } +.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; } +.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; } +.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; } +.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; } +.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; } +.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; } +.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; } +.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; } +.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; } +.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; } +.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; } +.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; } +.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; } +.#{$fa-css-prefix}-tv:before, +.#{$fa-css-prefix}-television:before { content: $fa-var-television; } +.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; } +.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; } +.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; } +.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; } +.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; } +.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; } +.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; } +.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; } +.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; } +.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; } +.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; } +.#{$fa-css-prefix}-map:before { content: $fa-var-map; } +.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; } +.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; } +.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; } +.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; } +.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; } +.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; } diff --git a/lib/Font-Awesome/scss/_mixins.scss b/lib/Font-Awesome/scss/_mixins.scss index 6b7f16093..f96719b6a 100644 --- a/lib/Font-Awesome/scss/_mixins.scss +++ b/lib/Font-Awesome/scss/_mixins.scss @@ -3,12 +3,11 @@ @mixin fa-icon() { display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox } diff --git a/lib/Font-Awesome/scss/_variables.scss b/lib/Font-Awesome/scss/_variables.scss index 9b7210e23..c10cd47f7 100644 --- a/lib/Font-Awesome/scss/_variables.scss +++ b/lib/Font-Awesome/scss/_variables.scss @@ -3,19 +3,22 @@ $fa-font-path: "../fonts" !default; $fa-font-size-base: 14px !default; -//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.3.0/fonts" !default; // for referencing Bootstrap CDN font files directly +$fa-line-height-base: 1 !default; +//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.4.0/fonts" !default; // for referencing Bootstrap CDN font files directly $fa-css-prefix: fa !default; -$fa-version: "4.3.0" !default; +$fa-version: "4.4.0" !default; $fa-border-color: #eee !default; $fa-inverse: #fff !default; $fa-li-width: (30em / 14) !default; +$fa-var-500px: "\f26e"; $fa-var-adjust: "\f042"; $fa-var-adn: "\f170"; $fa-var-align-center: "\f037"; $fa-var-align-justify: "\f039"; $fa-var-align-left: "\f036"; $fa-var-align-right: "\f038"; +$fa-var-amazon: "\f270"; $fa-var-ambulance: "\f0f9"; $fa-var-anchor: "\f13d"; $fa-var-android: "\f17b"; @@ -51,12 +54,23 @@ $fa-var-asterisk: "\f069"; $fa-var-at: "\f1fa"; $fa-var-automobile: "\f1b9"; $fa-var-backward: "\f04a"; +$fa-var-balance-scale: "\f24e"; $fa-var-ban: "\f05e"; $fa-var-bank: "\f19c"; $fa-var-bar-chart: "\f080"; $fa-var-bar-chart-o: "\f080"; $fa-var-barcode: "\f02a"; $fa-var-bars: "\f0c9"; +$fa-var-battery-0: "\f244"; +$fa-var-battery-1: "\f243"; +$fa-var-battery-2: "\f242"; +$fa-var-battery-3: "\f241"; +$fa-var-battery-4: "\f240"; +$fa-var-battery-empty: "\f244"; +$fa-var-battery-full: "\f240"; +$fa-var-battery-half: "\f242"; +$fa-var-battery-quarter: "\f243"; +$fa-var-battery-three-quarters: "\f241"; $fa-var-bed: "\f236"; $fa-var-beer: "\f0fc"; $fa-var-behance: "\f1b4"; @@ -71,6 +85,7 @@ $fa-var-birthday-cake: "\f1fd"; $fa-var-bitbucket: "\f171"; $fa-var-bitbucket-square: "\f172"; $fa-var-bitcoin: "\f15a"; +$fa-var-black-tie: "\f27e"; $fa-var-bold: "\f032"; $fa-var-bolt: "\f0e7"; $fa-var-bomb: "\f1e2"; @@ -89,7 +104,11 @@ $fa-var-buysellads: "\f20d"; $fa-var-cab: "\f1ba"; $fa-var-calculator: "\f1ec"; $fa-var-calendar: "\f073"; +$fa-var-calendar-check-o: "\f274"; +$fa-var-calendar-minus-o: "\f272"; $fa-var-calendar-o: "\f133"; +$fa-var-calendar-plus-o: "\f271"; +$fa-var-calendar-times-o: "\f273"; $fa-var-camera: "\f030"; $fa-var-camera-retro: "\f083"; $fa-var-car: "\f1b9"; @@ -105,7 +124,9 @@ $fa-var-cart-arrow-down: "\f218"; $fa-var-cart-plus: "\f217"; $fa-var-cc: "\f20a"; $fa-var-cc-amex: "\f1f3"; +$fa-var-cc-diners-club: "\f24c"; $fa-var-cc-discover: "\f1f2"; +$fa-var-cc-jcb: "\f24b"; $fa-var-cc-mastercard: "\f1f1"; $fa-var-cc-paypal: "\f1f4"; $fa-var-cc-stripe: "\f1f5"; @@ -127,12 +148,14 @@ $fa-var-chevron-left: "\f053"; $fa-var-chevron-right: "\f054"; $fa-var-chevron-up: "\f077"; $fa-var-child: "\f1ae"; +$fa-var-chrome: "\f268"; $fa-var-circle: "\f111"; $fa-var-circle-o: "\f10c"; $fa-var-circle-o-notch: "\f1ce"; $fa-var-circle-thin: "\f1db"; $fa-var-clipboard: "\f0ea"; $fa-var-clock-o: "\f017"; +$fa-var-clone: "\f24d"; $fa-var-close: "\f00d"; $fa-var-cloud: "\f0c2"; $fa-var-cloud-download: "\f0ed"; @@ -147,13 +170,17 @@ $fa-var-cogs: "\f085"; $fa-var-columns: "\f0db"; $fa-var-comment: "\f075"; $fa-var-comment-o: "\f0e5"; +$fa-var-commenting: "\f27a"; +$fa-var-commenting-o: "\f27b"; $fa-var-comments: "\f086"; $fa-var-comments-o: "\f0e6"; $fa-var-compass: "\f14e"; $fa-var-compress: "\f066"; $fa-var-connectdevelop: "\f20e"; +$fa-var-contao: "\f26d"; $fa-var-copy: "\f0c5"; $fa-var-copyright: "\f1f9"; +$fa-var-creative-commons: "\f25e"; $fa-var-credit-card: "\f09d"; $fa-var-crop: "\f125"; $fa-var-crosshairs: "\f05b"; @@ -193,6 +220,7 @@ $fa-var-exclamation: "\f12a"; $fa-var-exclamation-circle: "\f06a"; $fa-var-exclamation-triangle: "\f071"; $fa-var-expand: "\f065"; +$fa-var-expeditedssl: "\f23e"; $fa-var-external-link: "\f08e"; $fa-var-external-link-square: "\f14c"; $fa-var-eye: "\f06e"; @@ -205,6 +233,7 @@ $fa-var-facebook-square: "\f082"; $fa-var-fast-backward: "\f049"; $fa-var-fast-forward: "\f050"; $fa-var-fax: "\f1ac"; +$fa-var-feed: "\f09e"; $fa-var-female: "\f182"; $fa-var-fighter-jet: "\f0fb"; $fa-var-file: "\f15b"; @@ -230,6 +259,7 @@ $fa-var-film: "\f008"; $fa-var-filter: "\f0b0"; $fa-var-fire: "\f06d"; $fa-var-fire-extinguisher: "\f134"; +$fa-var-firefox: "\f269"; $fa-var-flag: "\f024"; $fa-var-flag-checkered: "\f11e"; $fa-var-flag-o: "\f11d"; @@ -242,6 +272,7 @@ $fa-var-folder-o: "\f114"; $fa-var-folder-open: "\f07c"; $fa-var-folder-open-o: "\f115"; $fa-var-font: "\f031"; +$fa-var-fonticons: "\f280"; $fa-var-forumbee: "\f211"; $fa-var-forward: "\f04e"; $fa-var-foursquare: "\f180"; @@ -253,7 +284,10 @@ $fa-var-gbp: "\f154"; $fa-var-ge: "\f1d1"; $fa-var-gear: "\f013"; $fa-var-gears: "\f085"; -$fa-var-genderless: "\f1db"; +$fa-var-genderless: "\f22d"; +$fa-var-get-pocket: "\f265"; +$fa-var-gg: "\f260"; +$fa-var-gg-circle: "\f261"; $fa-var-gift: "\f06b"; $fa-var-git: "\f1d3"; $fa-var-git-square: "\f1d2"; @@ -272,10 +306,19 @@ $fa-var-gratipay: "\f184"; $fa-var-group: "\f0c0"; $fa-var-h-square: "\f0fd"; $fa-var-hacker-news: "\f1d4"; +$fa-var-hand-grab-o: "\f255"; +$fa-var-hand-lizard-o: "\f258"; $fa-var-hand-o-down: "\f0a7"; $fa-var-hand-o-left: "\f0a5"; $fa-var-hand-o-right: "\f0a4"; $fa-var-hand-o-up: "\f0a6"; +$fa-var-hand-paper-o: "\f256"; +$fa-var-hand-peace-o: "\f25b"; +$fa-var-hand-pointer-o: "\f25a"; +$fa-var-hand-rock-o: "\f255"; +$fa-var-hand-scissors-o: "\f257"; +$fa-var-hand-spock-o: "\f259"; +$fa-var-hand-stop-o: "\f256"; $fa-var-hdd-o: "\f0a0"; $fa-var-header: "\f1dc"; $fa-var-headphones: "\f025"; @@ -286,16 +329,29 @@ $fa-var-history: "\f1da"; $fa-var-home: "\f015"; $fa-var-hospital-o: "\f0f8"; $fa-var-hotel: "\f236"; +$fa-var-hourglass: "\f254"; +$fa-var-hourglass-1: "\f251"; +$fa-var-hourglass-2: "\f252"; +$fa-var-hourglass-3: "\f253"; +$fa-var-hourglass-end: "\f253"; +$fa-var-hourglass-half: "\f252"; +$fa-var-hourglass-o: "\f250"; +$fa-var-hourglass-start: "\f251"; +$fa-var-houzz: "\f27c"; $fa-var-html5: "\f13b"; +$fa-var-i-cursor: "\f246"; $fa-var-ils: "\f20b"; $fa-var-image: "\f03e"; $fa-var-inbox: "\f01c"; $fa-var-indent: "\f03c"; +$fa-var-industry: "\f275"; $fa-var-info: "\f129"; $fa-var-info-circle: "\f05a"; $fa-var-inr: "\f156"; $fa-var-instagram: "\f16d"; $fa-var-institution: "\f19c"; +$fa-var-internet-explorer: "\f26b"; +$fa-var-intersex: "\f224"; $fa-var-ioxhost: "\f208"; $fa-var-italic: "\f033"; $fa-var-joomla: "\f1aa"; @@ -340,7 +396,11 @@ $fa-var-mail-forward: "\f064"; $fa-var-mail-reply: "\f112"; $fa-var-mail-reply-all: "\f122"; $fa-var-male: "\f183"; +$fa-var-map: "\f279"; $fa-var-map-marker: "\f041"; +$fa-var-map-o: "\f278"; +$fa-var-map-pin: "\f276"; +$fa-var-map-signs: "\f277"; $fa-var-mars: "\f222"; $fa-var-mars-double: "\f227"; $fa-var-mars-stroke: "\f229"; @@ -364,11 +424,19 @@ $fa-var-money: "\f0d6"; $fa-var-moon-o: "\f186"; $fa-var-mortar-board: "\f19d"; $fa-var-motorcycle: "\f21c"; +$fa-var-mouse-pointer: "\f245"; $fa-var-music: "\f001"; $fa-var-navicon: "\f0c9"; $fa-var-neuter: "\f22c"; $fa-var-newspaper-o: "\f1ea"; +$fa-var-object-group: "\f247"; +$fa-var-object-ungroup: "\f248"; +$fa-var-odnoklassniki: "\f263"; +$fa-var-odnoklassniki-square: "\f264"; +$fa-var-opencart: "\f23d"; $fa-var-openid: "\f19b"; +$fa-var-opera: "\f26a"; +$fa-var-optin-monster: "\f23c"; $fa-var-outdent: "\f03b"; $fa-var-pagelines: "\f18c"; $fa-var-paint-brush: "\f1fc"; @@ -418,6 +486,7 @@ $fa-var-recycle: "\f1b8"; $fa-var-reddit: "\f1a1"; $fa-var-reddit-square: "\f1a2"; $fa-var-refresh: "\f021"; +$fa-var-registered: "\f25d"; $fa-var-remove: "\f00d"; $fa-var-renren: "\f18b"; $fa-var-reorder: "\f0c9"; @@ -436,6 +505,7 @@ $fa-var-rss-square: "\f143"; $fa-var-rub: "\f158"; $fa-var-ruble: "\f158"; $fa-var-rupee: "\f156"; +$fa-var-safari: "\f267"; $fa-var-save: "\f0c7"; $fa-var-scissors: "\f0c4"; $fa-var-search: "\f002"; @@ -499,6 +569,8 @@ $fa-var-steam-square: "\f1b7"; $fa-var-step-backward: "\f048"; $fa-var-step-forward: "\f051"; $fa-var-stethoscope: "\f0f1"; +$fa-var-sticky-note: "\f249"; +$fa-var-sticky-note-o: "\f24a"; $fa-var-stop: "\f04d"; $fa-var-street-view: "\f21d"; $fa-var-strikethrough: "\f0cc"; @@ -517,6 +589,7 @@ $fa-var-tag: "\f02b"; $fa-var-tags: "\f02c"; $fa-var-tasks: "\f0ae"; $fa-var-taxi: "\f1ba"; +$fa-var-television: "\f26c"; $fa-var-tencent-weibo: "\f1d5"; $fa-var-terminal: "\f120"; $fa-var-text-height: "\f034"; @@ -540,6 +613,7 @@ $fa-var-toggle-off: "\f204"; $fa-var-toggle-on: "\f205"; $fa-var-toggle-right: "\f152"; $fa-var-toggle-up: "\f151"; +$fa-var-trademark: "\f25c"; $fa-var-train: "\f238"; $fa-var-transgender: "\f224"; $fa-var-transgender-alt: "\f225"; @@ -547,6 +621,7 @@ $fa-var-trash: "\f1f8"; $fa-var-trash-o: "\f014"; $fa-var-tree: "\f1bb"; $fa-var-trello: "\f181"; +$fa-var-tripadvisor: "\f262"; $fa-var-trophy: "\f091"; $fa-var-truck: "\f0d1"; $fa-var-try: "\f195"; @@ -554,6 +629,7 @@ $fa-var-tty: "\f1e4"; $fa-var-tumblr: "\f173"; $fa-var-tumblr-square: "\f174"; $fa-var-turkish-lira: "\f195"; +$fa-var-tv: "\f26c"; $fa-var-twitch: "\f1e8"; $fa-var-twitter: "\f099"; $fa-var-twitter-square: "\f081"; @@ -578,6 +654,7 @@ $fa-var-venus-double: "\f226"; $fa-var-venus-mars: "\f228"; $fa-var-viacoin: "\f237"; $fa-var-video-camera: "\f03d"; +$fa-var-vimeo: "\f27d"; $fa-var-vimeo-square: "\f194"; $fa-var-vine: "\f1ca"; $fa-var-vk: "\f189"; @@ -591,13 +668,18 @@ $fa-var-weixin: "\f1d7"; $fa-var-whatsapp: "\f232"; $fa-var-wheelchair: "\f193"; $fa-var-wifi: "\f1eb"; +$fa-var-wikipedia-w: "\f266"; $fa-var-windows: "\f17a"; $fa-var-won: "\f159"; $fa-var-wordpress: "\f19a"; $fa-var-wrench: "\f0ad"; $fa-var-xing: "\f168"; $fa-var-xing-square: "\f169"; +$fa-var-y-combinator: "\f23b"; +$fa-var-y-combinator-square: "\f1d4"; $fa-var-yahoo: "\f19e"; +$fa-var-yc: "\f23b"; +$fa-var-yc-square: "\f1d4"; $fa-var-yelp: "\f1e9"; $fa-var-yen: "\f157"; $fa-var-youtube: "\f167"; diff --git a/lib/Font-Awesome/scss/font-awesome.scss b/lib/Font-Awesome/scss/font-awesome.scss index 388ac6b0c..ebd9646cc 100644 --- a/lib/Font-Awesome/scss/font-awesome.scss +++ b/lib/Font-Awesome/scss/font-awesome.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */ diff --git a/lib/Font-Awesome/src/3.2.1/assets/img/contribution-sample.png b/lib/Font-Awesome/src/3.2.1/assets/img/contribution-sample.png index fe7647f0b..7e6356279 100644 Binary files a/lib/Font-Awesome/src/3.2.1/assets/img/contribution-sample.png and b/lib/Font-Awesome/src/3.2.1/assets/img/contribution-sample.png differ diff --git a/lib/Font-Awesome/src/3.2.1/assets/img/glyphicons-halflings.png b/lib/Font-Awesome/src/3.2.1/assets/img/glyphicons-halflings.png index a99699932..8bc9e642b 100644 Binary files a/lib/Font-Awesome/src/3.2.1/assets/img/glyphicons-halflings.png and b/lib/Font-Awesome/src/3.2.1/assets/img/glyphicons-halflings.png differ diff --git a/lib/Font-Awesome/src/3.2.1/cheatsheet/index.html b/lib/Font-Awesome/src/3.2.1/cheatsheet/index.html index ff7745ff8..a531d4275 100644 --- a/lib/Font-Awesome/src/3.2.1/cheatsheet/index.html +++ b/lib/Font-Awesome/src/3.2.1/cheatsheet/index.html @@ -2368,7 +2368,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/community/index.html b/lib/Font-Awesome/src/3.2.1/community/index.html index 428a3675f..300dd3015 100644 --- a/lib/Font-Awesome/src/3.2.1/community/index.html +++ b/lib/Font-Awesome/src/3.2.1/community/index.html @@ -292,7 +292,7 @@

    - Thanks to MaxCDN for providing the excellent + Thanks to MaxCDN for providing the excellent BootstrapCDN, the fastest and easiest way to get started with Font Awesome.

    @@ -343,7 +343,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/examples/index.html b/lib/Font-Awesome/src/3.2.1/examples/index.html index 19bea61d3..d35526752 100644 --- a/lib/Font-Awesome/src/3.2.1/examples/index.html +++ b/lib/Font-Awesome/src/3.2.1/examples/index.html @@ -660,7 +660,7 @@ icon-camera on icon-ban-circle Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/get-started/index.html b/lib/Font-Awesome/src/3.2.1/get-started/index.html index 5c1ea6bc7..2b305b78c 100644 --- a/lib/Font-Awesome/src/3.2.1/get-started/index.html +++ b/lib/Font-Awesome/src/3.2.1/get-started/index.html @@ -288,7 +288,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/adjust/index.html b/lib/Font-Awesome/src/3.2.1/icon/adjust/index.html index 54d203cef..224e86474 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/adjust/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/adjust/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/adn/index.html b/lib/Font-Awesome/src/3.2.1/icon/adn/index.html index 7b317e2b0..1a5d95d94 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/adn/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/adn/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/align-center/index.html b/lib/Font-Awesome/src/3.2.1/icon/align-center/index.html index 6a3716b3e..2839e44a7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/align-center/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/align-center/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/align-justify/index.html b/lib/Font-Awesome/src/3.2.1/icon/align-justify/index.html index 9bdacbe13..649e4bf46 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/align-justify/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/align-justify/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/align-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/align-left/index.html index 651ea4937..77140f3e9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/align-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/align-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/align-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/align-right/index.html index a7ce0b367..574d873d6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/align-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/align-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ambulance/index.html b/lib/Font-Awesome/src/3.2.1/icon/ambulance/index.html index 128e161ed..0d726295e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ambulance/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ambulance/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/anchor/index.html b/lib/Font-Awesome/src/3.2.1/icon/anchor/index.html index 987d48880..a3e003901 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/anchor/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/anchor/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/android/index.html b/lib/Font-Awesome/src/3.2.1/icon/android/index.html index 7e1abc6a8..c0dc6ae6a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/android/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/android/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/angle-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/angle-down/index.html index 980e3f537..48c72f47a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/angle-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/angle-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/angle-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/angle-left/index.html index d8fd53679..93a031494 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/angle-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/angle-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/angle-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/angle-right/index.html index 53dbb4d8c..12d28d893 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/angle-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/angle-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/angle-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/angle-up/index.html index b7c40876f..83a0e4183 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/angle-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/angle-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/apple/index.html b/lib/Font-Awesome/src/3.2.1/icon/apple/index.html index 0770f1d4f..037584758 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/apple/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/apple/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/archive/index.html b/lib/Font-Awesome/src/3.2.1/icon/archive/index.html index 5aebb3369..164c88c17 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/archive/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/archive/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/arrow-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/arrow-down/index.html index 2e0c6ab00..433344926 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/arrow-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/arrow-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/arrow-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/arrow-left/index.html index 50b8aa6d4..79e301ec7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/arrow-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/arrow-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/arrow-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/arrow-right/index.html index f1c899d75..fcd194384 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/arrow-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/arrow-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/arrow-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/arrow-up/index.html index a242ca86d..5f9901dc7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/arrow-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/arrow-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/asterisk/index.html b/lib/Font-Awesome/src/3.2.1/icon/asterisk/index.html index 4ebfdeaf2..ba333175e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/asterisk/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/asterisk/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/backward/index.html b/lib/Font-Awesome/src/3.2.1/icon/backward/index.html index 785965366..d3ece5b4b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/backward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/backward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ban-circle/index.html b/lib/Font-Awesome/src/3.2.1/icon/ban-circle/index.html index 129111b72..1c6bd2596 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ban-circle/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ban-circle/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bar-chart/index.html b/lib/Font-Awesome/src/3.2.1/icon/bar-chart/index.html index 2c20d951c..a1f64df09 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bar-chart/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bar-chart/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/barcode/index.html b/lib/Font-Awesome/src/3.2.1/icon/barcode/index.html index 2a5ca4e5d..8a5b519aa 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/barcode/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/barcode/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/beaker/index.html b/lib/Font-Awesome/src/3.2.1/icon/beaker/index.html index ba77123c7..e17e44e0e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/beaker/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/beaker/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/beer/index.html b/lib/Font-Awesome/src/3.2.1/icon/beer/index.html index dcda70338..b6df2e650 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/beer/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/beer/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bell-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/bell-alt/index.html index 0fbdd7d19..53c39b0f3 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bell-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bell-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bell/index.html b/lib/Font-Awesome/src/3.2.1/icon/bell/index.html index b8ffe8332..90faa9285 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bell/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bell/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bitbucket-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/bitbucket-sign/index.html index e667aaef5..01025d5d4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bitbucket-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bitbucket-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bitbucket/index.html b/lib/Font-Awesome/src/3.2.1/icon/bitbucket/index.html index 4ff126539..34168065d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bitbucket/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bitbucket/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bold/index.html b/lib/Font-Awesome/src/3.2.1/icon/bold/index.html index 69b108297..a425e7e53 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bold/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bold/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bolt/index.html b/lib/Font-Awesome/src/3.2.1/icon/bolt/index.html index aa6e822dc..57b67ea9d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bolt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bolt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/book/index.html b/lib/Font-Awesome/src/3.2.1/icon/book/index.html index fb3298eb0..d289d8121 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/book/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/book/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bookmark-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/bookmark-empty/index.html index 9fec923ca..ba3530a77 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bookmark-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bookmark-empty/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bookmark/index.html b/lib/Font-Awesome/src/3.2.1/icon/bookmark/index.html index a4901395e..13d291098 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bookmark/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bookmark/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/briefcase/index.html b/lib/Font-Awesome/src/3.2.1/icon/briefcase/index.html index 65b5630e4..825a9e88e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/briefcase/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/briefcase/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/btc/index.html b/lib/Font-Awesome/src/3.2.1/icon/btc/index.html index 09d5a47ac..a32bb2c8d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/btc/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/btc/index.html @@ -195,7 +195,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bug/index.html b/lib/Font-Awesome/src/3.2.1/icon/bug/index.html index 69dd4997b..eea0f9275 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bug/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bug/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/building/index.html b/lib/Font-Awesome/src/3.2.1/icon/building/index.html index 0d3ea7943..e3079a76f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/building/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/building/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bullhorn/index.html b/lib/Font-Awesome/src/3.2.1/icon/bullhorn/index.html index 2a2394977..1720b5f5b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bullhorn/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bullhorn/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/bullseye/index.html b/lib/Font-Awesome/src/3.2.1/icon/bullseye/index.html index 53411ef8f..bf56ffdf2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/bullseye/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/bullseye/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/calendar-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/calendar-empty/index.html index 68c6e0bf3..b8f38db16 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/calendar-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/calendar-empty/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/calendar/index.html b/lib/Font-Awesome/src/3.2.1/icon/calendar/index.html index dbc30d3a6..d145011b8 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/calendar/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/calendar/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/camera-retro/index.html b/lib/Font-Awesome/src/3.2.1/icon/camera-retro/index.html index a19377535..accd962cd 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/camera-retro/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/camera-retro/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/camera/index.html b/lib/Font-Awesome/src/3.2.1/icon/camera/index.html index 355951982..ab1137260 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/camera/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/camera/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/caret-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/caret-down/index.html index 217b1c989..c688acf0f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/caret-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/caret-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/caret-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/caret-left/index.html index afdd0420c..35c7ca6ca 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/caret-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/caret-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/caret-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/caret-right/index.html index e73b7eb34..6a457064b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/caret-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/caret-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/caret-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/caret-up/index.html index 6d1597a4c..0055994aa 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/caret-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/caret-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/certificate/index.html b/lib/Font-Awesome/src/3.2.1/icon/certificate/index.html index 3982634bb..f52074cd7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/certificate/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/certificate/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/check-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/check-empty/index.html index 99c2238f7..ec039ea62 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/check-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/check-empty/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/check-minus/index.html b/lib/Font-Awesome/src/3.2.1/icon/check-minus/index.html index f62ce7367..cbe7c93b5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/check-minus/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/check-minus/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/check-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/check-sign/index.html index 6e9e4f082..094bf9b71 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/check-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/check-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/check/index.html b/lib/Font-Awesome/src/3.2.1/icon/check/index.html index aaca7ea4e..7c2c92d12 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/check/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/check/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-down/index.html index 53f0c97d7..31cadfbd9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-left/index.html index 90c5ed681..82f14932c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-right/index.html index 0be7da63c..3ef5b3b1c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-down/index.html index 55928e6b2..d04d821d4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-left/index.html index 5ec15a4ec..049b5c515 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-right/index.html index 9cf013be7..f298ed303 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-up/index.html index 6a74cebe1..76d1195ed 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-sign-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/chevron-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/chevron-up/index.html index d457d9e60..684dee6b9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/chevron-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/chevron-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-down/index.html index d4b5a4533..43155a9d7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-left/index.html index bf2c12a91..b11e7503e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-right/index.html index 0ed136995..2618571a7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-up/index.html index 7279554a4..c1f0fa533 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle-arrow-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle-blank/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle-blank/index.html index 1e87eaa43..56953975c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle-blank/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle-blank/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/circle/index.html b/lib/Font-Awesome/src/3.2.1/icon/circle/index.html index 3cb1a0c2f..abf947204 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/circle/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/circle/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cloud-download/index.html b/lib/Font-Awesome/src/3.2.1/icon/cloud-download/index.html index 8bc71dcb5..e2b89c120 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cloud-download/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cloud-download/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cloud-upload/index.html b/lib/Font-Awesome/src/3.2.1/icon/cloud-upload/index.html index 3bfc45032..affb1a170 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cloud-upload/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cloud-upload/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cloud/index.html b/lib/Font-Awesome/src/3.2.1/icon/cloud/index.html index d4e319e62..1f137dd53 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cloud/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cloud/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cny/index.html b/lib/Font-Awesome/src/3.2.1/icon/cny/index.html index 39ad423ec..af969271c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cny/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cny/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/code-fork/index.html b/lib/Font-Awesome/src/3.2.1/icon/code-fork/index.html index e1f7a6445..91b984d58 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/code-fork/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/code-fork/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/code/index.html b/lib/Font-Awesome/src/3.2.1/icon/code/index.html index d28713ce8..6bb7eed20 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/code/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/code/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/coffee/index.html b/lib/Font-Awesome/src/3.2.1/icon/coffee/index.html index 63e06e44e..dd9b94a7e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/coffee/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/coffee/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cog/index.html b/lib/Font-Awesome/src/3.2.1/icon/cog/index.html index 8afd03166..a5808ceee 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cog/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cog/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cogs/index.html b/lib/Font-Awesome/src/3.2.1/icon/cogs/index.html index 2c4c56d20..0fd8797de 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cogs/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cogs/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/collapse-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/collapse-alt/index.html index c56b536df..c3112e8bb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/collapse-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/collapse-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/collapse-top/index.html b/lib/Font-Awesome/src/3.2.1/icon/collapse-top/index.html index a2416a173..94c53c968 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/collapse-top/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/collapse-top/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/collapse/index.html b/lib/Font-Awesome/src/3.2.1/icon/collapse/index.html index 592d9340d..2cc8f58c9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/collapse/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/collapse/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/columns/index.html b/lib/Font-Awesome/src/3.2.1/icon/columns/index.html index 2cac42bb8..bda9b9678 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/columns/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/columns/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/comment-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/comment-alt/index.html index dfe025d1d..2c4845d8f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/comment-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/comment-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/comment/index.html b/lib/Font-Awesome/src/3.2.1/icon/comment/index.html index d3217e200..e6c60080a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/comment/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/comment/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/comments-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/comments-alt/index.html index 1b0d464ca..3460824ca 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/comments-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/comments-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/comments/index.html b/lib/Font-Awesome/src/3.2.1/icon/comments/index.html index a9d57f58f..c801aeeec 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/comments/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/comments/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/compass/index.html b/lib/Font-Awesome/src/3.2.1/icon/compass/index.html index b6bee48cf..899db018d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/compass/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/compass/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/copy/index.html b/lib/Font-Awesome/src/3.2.1/icon/copy/index.html index 3e6bf6654..0a54d9480 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/copy/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/copy/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/credit-card/index.html b/lib/Font-Awesome/src/3.2.1/icon/credit-card/index.html index 576fe24a5..4d998b8ae 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/credit-card/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/credit-card/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/crop/index.html b/lib/Font-Awesome/src/3.2.1/icon/crop/index.html index 226413b4b..1f1a8a2e9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/crop/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/crop/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/css3/index.html b/lib/Font-Awesome/src/3.2.1/icon/css3/index.html index 3684786e8..f0370b161 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/css3/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/css3/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/cut/index.html b/lib/Font-Awesome/src/3.2.1/icon/cut/index.html index 6c63fa3c7..b0d907224 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/cut/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/cut/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/dashboard/index.html b/lib/Font-Awesome/src/3.2.1/icon/dashboard/index.html index a509a08d8..291e27c3e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/dashboard/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/dashboard/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/desktop/index.html b/lib/Font-Awesome/src/3.2.1/icon/desktop/index.html index 1ac39c84a..4166d0e46 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/desktop/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/desktop/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/double-angle-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/double-angle-down/index.html index 6b4f8035c..483a57099 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/double-angle-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/double-angle-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/double-angle-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/double-angle-left/index.html index cba1443a8..6c4c5b327 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/double-angle-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/double-angle-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/double-angle-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/double-angle-right/index.html index d62c78740..55eefffbc 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/double-angle-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/double-angle-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/double-angle-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/double-angle-up/index.html index 1a9988c61..7beb9b09f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/double-angle-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/double-angle-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/download-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/download-alt/index.html index 5763029bf..c64f9b92e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/download-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/download-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/download/index.html b/lib/Font-Awesome/src/3.2.1/icon/download/index.html index d95fc9385..7d5b12773 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/download/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/download/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/dribbble/index.html b/lib/Font-Awesome/src/3.2.1/icon/dribbble/index.html index 12808af52..2c34de53a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/dribbble/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/dribbble/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/dropbox/index.html b/lib/Font-Awesome/src/3.2.1/icon/dropbox/index.html index 86a75157d..2b0dc5668 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/dropbox/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/dropbox/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/edit-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/edit-sign/index.html index 75402f7a7..92ea64ec5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/edit-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/edit-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/edit/index.html b/lib/Font-Awesome/src/3.2.1/icon/edit/index.html index 254a9cb6c..c9d17888a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/edit/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/edit/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/eject/index.html b/lib/Font-Awesome/src/3.2.1/icon/eject/index.html index a7712b304..121263dc7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/eject/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/eject/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ellipsis-horizontal/index.html b/lib/Font-Awesome/src/3.2.1/icon/ellipsis-horizontal/index.html index 55abf3eb6..8e634acd9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ellipsis-horizontal/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ellipsis-horizontal/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ellipsis-vertical/index.html b/lib/Font-Awesome/src/3.2.1/icon/ellipsis-vertical/index.html index cccffe37f..34083a745 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ellipsis-vertical/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ellipsis-vertical/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/envelope-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/envelope-alt/index.html index 3d9914411..1cc919524 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/envelope-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/envelope-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/envelope/index.html b/lib/Font-Awesome/src/3.2.1/icon/envelope/index.html index e4d771e87..3164cb065 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/envelope/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/envelope/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/eraser/index.html b/lib/Font-Awesome/src/3.2.1/icon/eraser/index.html index 1f5f8781d..2148290e6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/eraser/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/eraser/index.html @@ -190,7 +190,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/eur/index.html b/lib/Font-Awesome/src/3.2.1/icon/eur/index.html index d9689868f..da3b8d127 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/eur/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/eur/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/exchange/index.html b/lib/Font-Awesome/src/3.2.1/icon/exchange/index.html index afdb30379..7a7160c75 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/exchange/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/exchange/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/exclamation-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/exclamation-sign/index.html index ad8c95c05..a426e9e32 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/exclamation-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/exclamation-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/exclamation/index.html b/lib/Font-Awesome/src/3.2.1/icon/exclamation/index.html index 0492fa1ae..b3f65d172 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/exclamation/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/exclamation/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/expand-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/expand-alt/index.html index 9e2bc6870..f580ec489 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/expand-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/expand-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/expand/index.html b/lib/Font-Awesome/src/3.2.1/icon/expand/index.html index 4fddffa25..ca2f9893d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/expand/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/expand/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/external-link-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/external-link-sign/index.html index 198521a9a..005da9df9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/external-link-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/external-link-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/external-link/index.html b/lib/Font-Awesome/src/3.2.1/icon/external-link/index.html index 548d33c23..39f239857 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/external-link/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/external-link/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/eye-close/index.html b/lib/Font-Awesome/src/3.2.1/icon/eye-close/index.html index 59f040bf6..b5fb31efa 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/eye-close/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/eye-close/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/eye-open/index.html b/lib/Font-Awesome/src/3.2.1/icon/eye-open/index.html index c5b5e1272..f141ed36a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/eye-open/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/eye-open/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/facebook-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/facebook-sign/index.html index a92946f21..0a5164d6f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/facebook-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/facebook-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/facebook/index.html b/lib/Font-Awesome/src/3.2.1/icon/facebook/index.html index 3f427cc5e..804133005 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/facebook/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/facebook/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/facetime-video/index.html b/lib/Font-Awesome/src/3.2.1/icon/facetime-video/index.html index f0af71600..96d5a2e6e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/facetime-video/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/facetime-video/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fast-backward/index.html b/lib/Font-Awesome/src/3.2.1/icon/fast-backward/index.html index 12575ffea..967803239 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fast-backward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fast-backward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fast-forward/index.html b/lib/Font-Awesome/src/3.2.1/icon/fast-forward/index.html index 2847d9ee9..bcf30e5bc 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fast-forward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fast-forward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/female/index.html b/lib/Font-Awesome/src/3.2.1/icon/female/index.html index 30987c0a3..a08be3b72 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/female/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/female/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fighter-jet/index.html b/lib/Font-Awesome/src/3.2.1/icon/fighter-jet/index.html index 8c9a52b3a..cae3c7a0d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fighter-jet/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fighter-jet/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/file-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/file-alt/index.html index e3034a869..146e27a60 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/file-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/file-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/file-text-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/file-text-alt/index.html index f9284ca2c..8e0182ade 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/file-text-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/file-text-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/file-text/index.html b/lib/Font-Awesome/src/3.2.1/icon/file-text/index.html index 90d7f1501..5af696512 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/file-text/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/file-text/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/file/index.html b/lib/Font-Awesome/src/3.2.1/icon/file/index.html index 7afa11475..6773dfd32 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/file/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/file/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/film/index.html b/lib/Font-Awesome/src/3.2.1/icon/film/index.html index fb03bdc6f..b0fdc40bf 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/film/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/film/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/filter/index.html b/lib/Font-Awesome/src/3.2.1/icon/filter/index.html index 9cb552ce4..c0979d2e1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/filter/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/filter/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fire-extinguisher/index.html b/lib/Font-Awesome/src/3.2.1/icon/fire-extinguisher/index.html index 5a00fb90a..87520cb47 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fire-extinguisher/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fire-extinguisher/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fire/index.html b/lib/Font-Awesome/src/3.2.1/icon/fire/index.html index 6ca70f8b1..ea6e175f7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fire/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fire/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/flag-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/flag-alt/index.html index 5d6295852..4ba87718d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/flag-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/flag-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/flag-checkered/index.html b/lib/Font-Awesome/src/3.2.1/icon/flag-checkered/index.html index 972ebefae..7fdd0f363 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/flag-checkered/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/flag-checkered/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/flag/index.html b/lib/Font-Awesome/src/3.2.1/icon/flag/index.html index 7f9c8e974..c747c7ace 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/flag/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/flag/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/flickr/index.html b/lib/Font-Awesome/src/3.2.1/icon/flickr/index.html index 5379f5fd7..2f86f323c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/flickr/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/flickr/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/folder-close-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/folder-close-alt/index.html index 5bc757e56..f3e0f2ee5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/folder-close-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/folder-close-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/folder-close/index.html b/lib/Font-Awesome/src/3.2.1/icon/folder-close/index.html index bf006b02a..a355f2e1c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/folder-close/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/folder-close/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/folder-open-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/folder-open-alt/index.html index a114fb1d1..12dbc6333 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/folder-open-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/folder-open-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/folder-open/index.html b/lib/Font-Awesome/src/3.2.1/icon/folder-open/index.html index 306c57831..cd8e37488 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/folder-open/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/folder-open/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/font/index.html b/lib/Font-Awesome/src/3.2.1/icon/font/index.html index 2a970e7c8..080e7792d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/font/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/font/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/food/index.html b/lib/Font-Awesome/src/3.2.1/icon/food/index.html index c5d1837b4..bb787df12 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/food/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/food/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/forward/index.html b/lib/Font-Awesome/src/3.2.1/icon/forward/index.html index c1484cc9a..1580ee502 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/forward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/forward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/foursquare/index.html b/lib/Font-Awesome/src/3.2.1/icon/foursquare/index.html index 23e71bb68..bef943e7f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/foursquare/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/foursquare/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/frown/index.html b/lib/Font-Awesome/src/3.2.1/icon/frown/index.html index 67132a37f..a2569dd6c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/frown/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/frown/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/fullscreen/index.html b/lib/Font-Awesome/src/3.2.1/icon/fullscreen/index.html index 05d44452e..8c0c0bddc 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/fullscreen/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/fullscreen/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/gamepad/index.html b/lib/Font-Awesome/src/3.2.1/icon/gamepad/index.html index 0bd4ffea8..2589d79f0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/gamepad/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/gamepad/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/gbp/index.html b/lib/Font-Awesome/src/3.2.1/icon/gbp/index.html index 87d4317b8..e50b2b7b1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/gbp/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/gbp/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/gift/index.html b/lib/Font-Awesome/src/3.2.1/icon/gift/index.html index 88f346491..4eaab15cf 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/gift/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/gift/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/github-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/github-alt/index.html index eacd12e34..c6dbe7014 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/github-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/github-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/github-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/github-sign/index.html index 15fa951e4..84071704e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/github-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/github-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/github/index.html b/lib/Font-Awesome/src/3.2.1/icon/github/index.html index 102ce0ffa..c6ec97307 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/github/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/github/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/gittip/index.html b/lib/Font-Awesome/src/3.2.1/icon/gittip/index.html index 620da7fb1..569bfb9fa 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/gittip/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/gittip/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/glass/index.html b/lib/Font-Awesome/src/3.2.1/icon/glass/index.html index b03e4d7e2..1d9f1d1fb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/glass/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/glass/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/globe/index.html b/lib/Font-Awesome/src/3.2.1/icon/globe/index.html index 4892bfee1..6d5e9c8da 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/globe/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/globe/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/google-plus-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/google-plus-sign/index.html index f4088409c..2a623c4a8 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/google-plus-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/google-plus-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/google-plus/index.html b/lib/Font-Awesome/src/3.2.1/icon/google-plus/index.html index b274b770f..62467b5fa 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/google-plus/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/google-plus/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/group/index.html b/lib/Font-Awesome/src/3.2.1/icon/group/index.html index 27d3857e3..b3c85b5d0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/group/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/group/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/h-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/h-sign/index.html index 9bd171d92..bee59ea8a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/h-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/h-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hand-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/hand-down/index.html index 59b3355bd..f85f105bf 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hand-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hand-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hand-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/hand-left/index.html index 12d869cb9..9b26925c4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hand-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hand-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hand-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/hand-right/index.html index e41517529..2f309bb55 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hand-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hand-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hand-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/hand-up/index.html index 52f4c8f9b..e7d6b8edb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hand-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hand-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hdd/index.html b/lib/Font-Awesome/src/3.2.1/icon/hdd/index.html index 5d9418d42..fc86fc4b2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hdd/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hdd/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/headphones/index.html b/lib/Font-Awesome/src/3.2.1/icon/headphones/index.html index 643ba0ca3..1107831bd 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/headphones/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/headphones/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/heart-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/heart-empty/index.html index 4421a0c6c..5a269160a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/heart-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/heart-empty/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/heart/index.html b/lib/Font-Awesome/src/3.2.1/icon/heart/index.html index 438b76809..11cf98e71 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/heart/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/heart/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/home/index.html b/lib/Font-Awesome/src/3.2.1/icon/home/index.html index 28c9e505f..d4c92fcce 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/home/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/home/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/hospital/index.html b/lib/Font-Awesome/src/3.2.1/icon/hospital/index.html index c349211b4..b0acc0ac9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/hospital/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/hospital/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/html5/index.html b/lib/Font-Awesome/src/3.2.1/icon/html5/index.html index 0485a6d50..613335a92 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/html5/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/html5/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/inbox/index.html b/lib/Font-Awesome/src/3.2.1/icon/inbox/index.html index 77f22e67e..324310350 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/inbox/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/inbox/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/indent-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/indent-left/index.html index a464fef45..0493c3623 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/indent-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/indent-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/indent-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/indent-right/index.html index 1b09d480a..343cbc7d0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/indent-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/indent-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/info-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/info-sign/index.html index 77d1039b5..631d30616 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/info-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/info-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/info/index.html b/lib/Font-Awesome/src/3.2.1/icon/info/index.html index 16cf35f2f..a193853ff 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/info/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/info/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/inr/index.html b/lib/Font-Awesome/src/3.2.1/icon/inr/index.html index 0282bbfd1..fd7ad2d09 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/inr/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/inr/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/instagram/index.html b/lib/Font-Awesome/src/3.2.1/icon/instagram/index.html index a6bc13eb9..90764c30b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/instagram/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/instagram/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/italic/index.html b/lib/Font-Awesome/src/3.2.1/icon/italic/index.html index 18695b563..e1bb75680 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/italic/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/italic/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/jpy/index.html b/lib/Font-Awesome/src/3.2.1/icon/jpy/index.html index e2a9a00d4..c6975d574 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/jpy/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/jpy/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/key/index.html b/lib/Font-Awesome/src/3.2.1/icon/key/index.html index 7f661965d..3c2e10ab0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/key/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/key/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/keyboard/index.html b/lib/Font-Awesome/src/3.2.1/icon/keyboard/index.html index 6823e6ea4..e249a8850 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/keyboard/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/keyboard/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/krw/index.html b/lib/Font-Awesome/src/3.2.1/icon/krw/index.html index 01ac3673b..f81ae5110 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/krw/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/krw/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/laptop/index.html b/lib/Font-Awesome/src/3.2.1/icon/laptop/index.html index d4d312fd7..abf802eab 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/laptop/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/laptop/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/leaf/index.html b/lib/Font-Awesome/src/3.2.1/icon/leaf/index.html index 63d7917c7..07e82a5f2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/leaf/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/leaf/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/legal/index.html b/lib/Font-Awesome/src/3.2.1/icon/legal/index.html index 7d07b4f06..bf354824a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/legal/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/legal/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/lemon/index.html b/lib/Font-Awesome/src/3.2.1/icon/lemon/index.html index 203076f46..bcb216c11 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/lemon/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/lemon/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/level-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/level-down/index.html index 89f85d3d8..6213baff2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/level-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/level-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/level-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/level-up/index.html index 9448afa64..8794e48cb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/level-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/level-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/lightbulb/index.html b/lib/Font-Awesome/src/3.2.1/icon/lightbulb/index.html index a2be4e497..2bdf4be9f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/lightbulb/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/lightbulb/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/link/index.html b/lib/Font-Awesome/src/3.2.1/icon/link/index.html index 9dc11e1a5..7d16cd99b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/link/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/link/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/linkedin-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/linkedin-sign/index.html index a19f14619..e1766801b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/linkedin-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/linkedin-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/linkedin/index.html b/lib/Font-Awesome/src/3.2.1/icon/linkedin/index.html index 6fc122840..f16f7c6f0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/linkedin/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/linkedin/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/linux/index.html b/lib/Font-Awesome/src/3.2.1/icon/linux/index.html index 983e10cf8..ec5c27c50 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/linux/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/linux/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/list-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/list-alt/index.html index 5a5fa668e..b8b0a522f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/list-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/list-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/list-ol/index.html b/lib/Font-Awesome/src/3.2.1/icon/list-ol/index.html index f8d995ca4..0e5052fb6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/list-ol/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/list-ol/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/list-ul/index.html b/lib/Font-Awesome/src/3.2.1/icon/list-ul/index.html index 18216653f..08c259140 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/list-ul/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/list-ul/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/list/index.html b/lib/Font-Awesome/src/3.2.1/icon/list/index.html index 1a0207dee..01626c42c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/list/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/list/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/location-arrow/index.html b/lib/Font-Awesome/src/3.2.1/icon/location-arrow/index.html index a12c8c16e..42c9bfcb3 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/location-arrow/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/location-arrow/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/lock/index.html b/lib/Font-Awesome/src/3.2.1/icon/lock/index.html index b0c06dfb5..c9b31547d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/lock/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/lock/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-down/index.html index 4de7c4082..638b6853a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-left/index.html index 1b6d0ad53..6fe9ea438 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-right/index.html index 0b57a2b74..fe9fa0274 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-up/index.html index 2a8e10762..5a4ddf73b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/long-arrow-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/long-arrow-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/magic/index.html b/lib/Font-Awesome/src/3.2.1/icon/magic/index.html index b82bd1800..cb26804c1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/magic/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/magic/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/magnet/index.html b/lib/Font-Awesome/src/3.2.1/icon/magnet/index.html index 4efafbc60..496d471ce 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/magnet/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/magnet/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/mail-reply-all/index.html b/lib/Font-Awesome/src/3.2.1/icon/mail-reply-all/index.html index ed887beac..4569f4119 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/mail-reply-all/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/mail-reply-all/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/male/index.html b/lib/Font-Awesome/src/3.2.1/icon/male/index.html index 56397b460..ef7dacb1f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/male/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/male/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/map-marker/index.html b/lib/Font-Awesome/src/3.2.1/icon/map-marker/index.html index 4f1c90492..8dc2e49bc 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/map-marker/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/map-marker/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/maxcdn/index.html b/lib/Font-Awesome/src/3.2.1/icon/maxcdn/index.html index 77fe70504..7b9eec0ca 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/maxcdn/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/maxcdn/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/medkit/index.html b/lib/Font-Awesome/src/3.2.1/icon/medkit/index.html index 0dc6de676..aaeb7e49c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/medkit/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/medkit/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/meh/index.html b/lib/Font-Awesome/src/3.2.1/icon/meh/index.html index b2da54705..9ccb6962e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/meh/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/meh/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/microphone-off/index.html b/lib/Font-Awesome/src/3.2.1/icon/microphone-off/index.html index 9f07f090e..598f6b1c4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/microphone-off/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/microphone-off/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/microphone/index.html b/lib/Font-Awesome/src/3.2.1/icon/microphone/index.html index 194f14e00..f2b677198 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/microphone/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/microphone/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/minus-sign-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/minus-sign-alt/index.html index c051cbb8b..c7315b530 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/minus-sign-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/minus-sign-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/minus-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/minus-sign/index.html index 0e68e3475..6745b9762 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/minus-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/minus-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/minus/index.html b/lib/Font-Awesome/src/3.2.1/icon/minus/index.html index 3b67868cd..bef81f1ee 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/minus/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/minus/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/mobile-phone/index.html b/lib/Font-Awesome/src/3.2.1/icon/mobile-phone/index.html index 7df04478c..a2775f2af 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/mobile-phone/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/mobile-phone/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/money/index.html b/lib/Font-Awesome/src/3.2.1/icon/money/index.html index 034d08044..6b54d3702 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/money/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/money/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/moon/index.html b/lib/Font-Awesome/src/3.2.1/icon/moon/index.html index 85484ffdd..a3d7f64b1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/moon/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/moon/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/move/index.html b/lib/Font-Awesome/src/3.2.1/icon/move/index.html index 15b9dbf55..16cc43e2f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/move/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/move/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/music/index.html b/lib/Font-Awesome/src/3.2.1/icon/music/index.html index 20b12e6b5..996671e6c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/music/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/music/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/off/index.html b/lib/Font-Awesome/src/3.2.1/icon/off/index.html index 4c048fbe6..e49c18439 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/off/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/off/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ok-circle/index.html b/lib/Font-Awesome/src/3.2.1/icon/ok-circle/index.html index 137d67f5f..39f2dafe4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ok-circle/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ok-circle/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ok-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/ok-sign/index.html index b4ff3ab4c..017670fd3 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ok-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ok-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ok/index.html b/lib/Font-Awesome/src/3.2.1/icon/ok/index.html index 8b5295721..7bab082f1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ok/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ok/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/paper-clip/index.html b/lib/Font-Awesome/src/3.2.1/icon/paper-clip/index.html index b1f37a773..03adcebbb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/paper-clip/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/paper-clip/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/paste/index.html b/lib/Font-Awesome/src/3.2.1/icon/paste/index.html index 5c6dd547a..995946183 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/paste/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/paste/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/pause/index.html b/lib/Font-Awesome/src/3.2.1/icon/pause/index.html index 74e629bcd..b0fab04f5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/pause/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/pause/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/pencil/index.html b/lib/Font-Awesome/src/3.2.1/icon/pencil/index.html index fc624e017..e2cbb58a5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/pencil/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/pencil/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/phone-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/phone-sign/index.html index a6020dc1d..4f38a2ae6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/phone-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/phone-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/phone/index.html b/lib/Font-Awesome/src/3.2.1/icon/phone/index.html index f6195d2c8..9f23f975c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/phone/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/phone/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/picture/index.html b/lib/Font-Awesome/src/3.2.1/icon/picture/index.html index 0de34f3e0..a923c3e19 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/picture/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/picture/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/pinterest-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/pinterest-sign/index.html index 699330e61..cd877b692 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/pinterest-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/pinterest-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/pinterest/index.html b/lib/Font-Awesome/src/3.2.1/icon/pinterest/index.html index 89b5ddfc3..3eeb4cebf 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/pinterest/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/pinterest/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/plane/index.html b/lib/Font-Awesome/src/3.2.1/icon/plane/index.html index 5f2c97b66..ad4a9edc9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/plane/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/plane/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/play-circle/index.html b/lib/Font-Awesome/src/3.2.1/icon/play-circle/index.html index 1a2d2ef20..2f75beff2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/play-circle/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/play-circle/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/play-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/play-sign/index.html index fcaf5e928..96db90471 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/play-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/play-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/play/index.html b/lib/Font-Awesome/src/3.2.1/icon/play/index.html index 79d140786..876c16d7e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/play/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/play/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/plus-sign-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/plus-sign-alt/index.html index 7a06b3fc9..56c4351e5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/plus-sign-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/plus-sign-alt/index.html @@ -190,7 +190,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/plus-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/plus-sign/index.html index 83dcde535..de256268f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/plus-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/plus-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/plus/index.html b/lib/Font-Awesome/src/3.2.1/icon/plus/index.html index 13f2b25b1..8b47825b1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/plus/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/plus/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/print/index.html b/lib/Font-Awesome/src/3.2.1/icon/print/index.html index 32740b8ca..34a365b8d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/print/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/print/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/pushpin/index.html b/lib/Font-Awesome/src/3.2.1/icon/pushpin/index.html index 76058991c..87f3f871f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/pushpin/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/pushpin/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/puzzle-piece/index.html b/lib/Font-Awesome/src/3.2.1/icon/puzzle-piece/index.html index b0dd14237..a2fe7171e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/puzzle-piece/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/puzzle-piece/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/qrcode/index.html b/lib/Font-Awesome/src/3.2.1/icon/qrcode/index.html index e3f6ed9ae..81d2128bb 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/qrcode/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/qrcode/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/question-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/question-sign/index.html index 2f36afda8..3aff22d69 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/question-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/question-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/question/index.html b/lib/Font-Awesome/src/3.2.1/icon/question/index.html index 45b2e299b..1db03b889 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/question/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/question/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/quote-left/index.html b/lib/Font-Awesome/src/3.2.1/icon/quote-left/index.html index e3c3f208e..a86a705bd 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/quote-left/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/quote-left/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/quote-right/index.html b/lib/Font-Awesome/src/3.2.1/icon/quote-right/index.html index c3f4d8ecc..2fa339772 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/quote-right/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/quote-right/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/random/index.html b/lib/Font-Awesome/src/3.2.1/icon/random/index.html index 0d20d95bf..9bc72e1b9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/random/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/random/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/refresh/index.html b/lib/Font-Awesome/src/3.2.1/icon/refresh/index.html index 2b21bd5fb..7ee478dc6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/refresh/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/refresh/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/remove-circle/index.html b/lib/Font-Awesome/src/3.2.1/icon/remove-circle/index.html index d0bfb326c..8a7127b78 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/remove-circle/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/remove-circle/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/remove-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/remove-sign/index.html index a958c9934..c084da9b0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/remove-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/remove-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/remove/index.html b/lib/Font-Awesome/src/3.2.1/icon/remove/index.html index fc6cd3d79..d882efaa0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/remove/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/remove/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/renren/index.html b/lib/Font-Awesome/src/3.2.1/icon/renren/index.html index e77e2fed4..dfb65a630 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/renren/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/renren/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/reorder/index.html b/lib/Font-Awesome/src/3.2.1/icon/reorder/index.html index 5ec292581..2c21871e9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/reorder/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/reorder/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/repeat/index.html b/lib/Font-Awesome/src/3.2.1/icon/repeat/index.html index 1f32a2473..71c2ee47f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/repeat/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/repeat/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/reply-all/index.html b/lib/Font-Awesome/src/3.2.1/icon/reply-all/index.html index c7da49619..5fd850054 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/reply-all/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/reply-all/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/reply/index.html b/lib/Font-Awesome/src/3.2.1/icon/reply/index.html index d8dff552a..5940b0c71 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/reply/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/reply/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/resize-full/index.html b/lib/Font-Awesome/src/3.2.1/icon/resize-full/index.html index d22857883..8a4744ad3 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/resize-full/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/resize-full/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/resize-horizontal/index.html b/lib/Font-Awesome/src/3.2.1/icon/resize-horizontal/index.html index 1c0de39a3..7ee56819b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/resize-horizontal/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/resize-horizontal/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/resize-small/index.html b/lib/Font-Awesome/src/3.2.1/icon/resize-small/index.html index 728efe3a3..5be879d93 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/resize-small/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/resize-small/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/resize-vertical/index.html b/lib/Font-Awesome/src/3.2.1/icon/resize-vertical/index.html index dcc9e3fea..f52c0db23 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/resize-vertical/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/resize-vertical/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/retweet/index.html b/lib/Font-Awesome/src/3.2.1/icon/retweet/index.html index 3e4eebde2..5898726ef 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/retweet/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/retweet/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/road/index.html b/lib/Font-Awesome/src/3.2.1/icon/road/index.html index f5d17355e..261c68a47 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/road/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/road/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/rocket/index.html b/lib/Font-Awesome/src/3.2.1/icon/rocket/index.html index cfbb04acf..f251c50e0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/rocket/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/rocket/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/rss-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/rss-sign/index.html index 4babe0a0e..330cf4813 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/rss-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/rss-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/rss/index.html b/lib/Font-Awesome/src/3.2.1/icon/rss/index.html index 86404f591..a24a126c7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/rss/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/rss/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/save/index.html b/lib/Font-Awesome/src/3.2.1/icon/save/index.html index 2763b39fb..85d6d4598 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/save/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/save/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/screenshot/index.html b/lib/Font-Awesome/src/3.2.1/icon/screenshot/index.html index 9daf41ac1..880dc4d9d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/screenshot/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/screenshot/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/search/index.html b/lib/Font-Awesome/src/3.2.1/icon/search/index.html index dfe279a90..6e1bd164e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/search/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/search/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/share-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/share-alt/index.html index 7126edd4e..6281e61ea 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/share-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/share-alt/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/share-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/share-sign/index.html index 901169dec..f306d30ae 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/share-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/share-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/share/index.html b/lib/Font-Awesome/src/3.2.1/icon/share/index.html index 310604ded..13434c2de 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/share/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/share/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/shield/index.html b/lib/Font-Awesome/src/3.2.1/icon/shield/index.html index f5e38a56b..37cdd58af 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/shield/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/shield/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/shopping-cart/index.html b/lib/Font-Awesome/src/3.2.1/icon/shopping-cart/index.html index e13eb4ae7..51a82a75b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/shopping-cart/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/shopping-cart/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sign-blank/index.html b/lib/Font-Awesome/src/3.2.1/icon/sign-blank/index.html index 578b735c3..29fa381c1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sign-blank/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sign-blank/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/signal/index.html b/lib/Font-Awesome/src/3.2.1/icon/signal/index.html index cb7688c92..00b993a26 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/signal/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/signal/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/signin/index.html b/lib/Font-Awesome/src/3.2.1/icon/signin/index.html index 44d7f6de1..8476d212e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/signin/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/signin/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/signout/index.html b/lib/Font-Awesome/src/3.2.1/icon/signout/index.html index c6b8dca9c..7ed291f8d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/signout/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/signout/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sitemap/index.html b/lib/Font-Awesome/src/3.2.1/icon/sitemap/index.html index 297b3bf08..f1c5591c1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sitemap/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sitemap/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/skype/index.html b/lib/Font-Awesome/src/3.2.1/icon/skype/index.html index 857fbc921..2825667b0 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/skype/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/skype/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/smile/index.html b/lib/Font-Awesome/src/3.2.1/icon/smile/index.html index 9ba255071..f104b579d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/smile/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/smile/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html index ada4c5f1f..ef329bb6d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet/index.html index 714f9f1b8..201457c6f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-alphabet/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html index 58bc1542b..6acb8483f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes/index.html index 298d22e4c..37cbc829f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-attributes/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-order-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-order-alt/index.html index 01ff453bd..73f4226d5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-order-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-order-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-by-order/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-by-order/index.html index 5f03df84a..abdb4c1d1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-by-order/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-by-order/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-down/index.html index cb848f938..aba2e3b12 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort-up/index.html index 241bbc2ce..82c72acd2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sort/index.html b/lib/Font-Awesome/src/3.2.1/icon/sort/index.html index 566ee7077..29b32084f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sort/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sort/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/spinner/index.html b/lib/Font-Awesome/src/3.2.1/icon/spinner/index.html index 2cf9147f4..ab904cd38 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/spinner/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/spinner/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/stackexchange/index.html b/lib/Font-Awesome/src/3.2.1/icon/stackexchange/index.html index 3e2598b5c..f8bb19c85 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/stackexchange/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/stackexchange/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/star-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/star-empty/index.html index ca43857ad..3e4ffe955 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/star-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/star-empty/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/star-half-empty/index.html b/lib/Font-Awesome/src/3.2.1/icon/star-half-empty/index.html index 47bd07aa2..869b12683 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/star-half-empty/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/star-half-empty/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/star-half/index.html b/lib/Font-Awesome/src/3.2.1/icon/star-half/index.html index efd0ac180..762c891f2 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/star-half/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/star-half/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/star/index.html b/lib/Font-Awesome/src/3.2.1/icon/star/index.html index e61f90c8a..5f917a93c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/star/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/star/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/step-backward/index.html b/lib/Font-Awesome/src/3.2.1/icon/step-backward/index.html index 578fd703a..66ec8c292 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/step-backward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/step-backward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/step-forward/index.html b/lib/Font-Awesome/src/3.2.1/icon/step-forward/index.html index cce1bd4fb..4d7568d9c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/step-forward/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/step-forward/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/stethoscope/index.html b/lib/Font-Awesome/src/3.2.1/icon/stethoscope/index.html index 86c152710..c55eff083 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/stethoscope/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/stethoscope/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/stop/index.html b/lib/Font-Awesome/src/3.2.1/icon/stop/index.html index 6de86574e..1fefb087a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/stop/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/stop/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/strikethrough/index.html b/lib/Font-Awesome/src/3.2.1/icon/strikethrough/index.html index 368d80432..0249e23f7 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/strikethrough/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/strikethrough/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/subscript/index.html b/lib/Font-Awesome/src/3.2.1/icon/subscript/index.html index 1310be1e6..8a45bc348 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/subscript/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/subscript/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/suitcase/index.html b/lib/Font-Awesome/src/3.2.1/icon/suitcase/index.html index 320ecf886..439551771 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/suitcase/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/suitcase/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/sun/index.html b/lib/Font-Awesome/src/3.2.1/icon/sun/index.html index dc53ca9b1..c6d260490 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/sun/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/sun/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/superscript/index.html b/lib/Font-Awesome/src/3.2.1/icon/superscript/index.html index 69b333d9a..a8943a7b9 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/superscript/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/superscript/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/table/index.html b/lib/Font-Awesome/src/3.2.1/icon/table/index.html index 86b2ad16c..9b8c01439 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/table/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/table/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tablet/index.html b/lib/Font-Awesome/src/3.2.1/icon/tablet/index.html index 529db7aa0..2f64560f4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tablet/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tablet/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tag/index.html b/lib/Font-Awesome/src/3.2.1/icon/tag/index.html index dc823f67e..4c8d7c6ed 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tag/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tag/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tags/index.html b/lib/Font-Awesome/src/3.2.1/icon/tags/index.html index 9d5f0b6d1..a69a3e615 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tags/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tags/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tasks/index.html b/lib/Font-Awesome/src/3.2.1/icon/tasks/index.html index 5c232bd10..5133ebead 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tasks/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tasks/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/terminal/index.html b/lib/Font-Awesome/src/3.2.1/icon/terminal/index.html index b608e3fd2..df33a182d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/terminal/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/terminal/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/text-height/index.html b/lib/Font-Awesome/src/3.2.1/icon/text-height/index.html index 3d7ccdee9..b8f130dbd 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/text-height/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/text-height/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/text-width/index.html b/lib/Font-Awesome/src/3.2.1/icon/text-width/index.html index 8a84f94fc..de2dfaaf6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/text-width/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/text-width/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/th-large/index.html b/lib/Font-Awesome/src/3.2.1/icon/th-large/index.html index 7eada0040..93114cbe4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/th-large/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/th-large/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/th-list/index.html b/lib/Font-Awesome/src/3.2.1/icon/th-list/index.html index 67fd825f7..74f926239 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/th-list/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/th-list/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/th/index.html b/lib/Font-Awesome/src/3.2.1/icon/th/index.html index dd086a909..efca82c98 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/th/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/th/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/thumbs-down-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/thumbs-down-alt/index.html index 42b382dfe..2033ed7a1 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/thumbs-down-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/thumbs-down-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/thumbs-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/thumbs-down/index.html index 401c9183f..ebb59f92a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/thumbs-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/thumbs-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/thumbs-up-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/thumbs-up-alt/index.html index eeacb9e2f..e761495b5 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/thumbs-up-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/thumbs-up-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/thumbs-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/thumbs-up/index.html index 7c9fefe31..0657c8f7f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/thumbs-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/thumbs-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/ticket/index.html b/lib/Font-Awesome/src/3.2.1/icon/ticket/index.html index 333f55c36..9f8011856 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/ticket/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/ticket/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/time/index.html b/lib/Font-Awesome/src/3.2.1/icon/time/index.html index af36297bf..1c6648f3d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/time/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/time/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tint/index.html b/lib/Font-Awesome/src/3.2.1/icon/tint/index.html index fb7a37587..4e923720f 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tint/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tint/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/trash/index.html b/lib/Font-Awesome/src/3.2.1/icon/trash/index.html index 58c9bb740..9afe64bac 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/trash/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/trash/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/trello/index.html b/lib/Font-Awesome/src/3.2.1/icon/trello/index.html index 0f3498d9e..21121641d 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/trello/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/trello/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/trophy/index.html b/lib/Font-Awesome/src/3.2.1/icon/trophy/index.html index ecdd6ead8..7b1beda84 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/trophy/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/trophy/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/truck/index.html b/lib/Font-Awesome/src/3.2.1/icon/truck/index.html index 158dc4731..c224df801 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/truck/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/truck/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tumblr-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/tumblr-sign/index.html index 2149ee5b0..9fc48200e 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tumblr-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tumblr-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/tumblr/index.html b/lib/Font-Awesome/src/3.2.1/icon/tumblr/index.html index 276c5131c..a61a9382a 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/tumblr/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/tumblr/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/twitter-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/twitter-sign/index.html index efdf8ef02..57f7840f8 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/twitter-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/twitter-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/twitter/index.html b/lib/Font-Awesome/src/3.2.1/icon/twitter/index.html index d07d9b160..56e5b247b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/twitter/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/twitter/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/umbrella/index.html b/lib/Font-Awesome/src/3.2.1/icon/umbrella/index.html index 9c54399c8..e95206c22 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/umbrella/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/umbrella/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/underline/index.html b/lib/Font-Awesome/src/3.2.1/icon/underline/index.html index 3128eb4f3..f9c6f6a8b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/underline/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/underline/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/undo/index.html b/lib/Font-Awesome/src/3.2.1/icon/undo/index.html index 59e600cee..86e022c35 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/undo/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/undo/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/unlink/index.html b/lib/Font-Awesome/src/3.2.1/icon/unlink/index.html index 9cb39dcf6..2a792ace6 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/unlink/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/unlink/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/unlock-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/unlock-alt/index.html index b37ae71b2..ff43c8c71 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/unlock-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/unlock-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/unlock/index.html b/lib/Font-Awesome/src/3.2.1/icon/unlock/index.html index 0436dc039..494dcbb31 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/unlock/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/unlock/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/upload-alt/index.html b/lib/Font-Awesome/src/3.2.1/icon/upload-alt/index.html index 321de9e3d..8c28a645b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/upload-alt/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/upload-alt/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/upload/index.html b/lib/Font-Awesome/src/3.2.1/icon/upload/index.html index 1a49e7837..1d0f88578 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/upload/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/upload/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/usd/index.html b/lib/Font-Awesome/src/3.2.1/icon/usd/index.html index 36eb1dae6..c8d97ea37 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/usd/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/usd/index.html @@ -193,7 +193,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/user-md/index.html b/lib/Font-Awesome/src/3.2.1/icon/user-md/index.html index e8850dc3e..2b9984955 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/user-md/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/user-md/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/user/index.html b/lib/Font-Awesome/src/3.2.1/icon/user/index.html index 4fe72a21e..672dcb613 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/user/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/user/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/vk/index.html b/lib/Font-Awesome/src/3.2.1/icon/vk/index.html index 3c8f4e8c0..e9178e986 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/vk/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/vk/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/volume-down/index.html b/lib/Font-Awesome/src/3.2.1/icon/volume-down/index.html index 8c538de50..ecc475f74 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/volume-down/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/volume-down/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/volume-off/index.html b/lib/Font-Awesome/src/3.2.1/icon/volume-off/index.html index f00e21634..b5b33e44b 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/volume-off/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/volume-off/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/volume-up/index.html b/lib/Font-Awesome/src/3.2.1/icon/volume-up/index.html index 8157eddf2..f8d27f277 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/volume-up/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/volume-up/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/warning-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/warning-sign/index.html index 31cd8eede..8432f0d3c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/warning-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/warning-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/weibo/index.html b/lib/Font-Awesome/src/3.2.1/icon/weibo/index.html index f76ed2a62..553829ee4 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/weibo/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/weibo/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/windows/index.html b/lib/Font-Awesome/src/3.2.1/icon/windows/index.html index 7513f5ac1..c646a8fda 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/windows/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/windows/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/wrench/index.html b/lib/Font-Awesome/src/3.2.1/icon/wrench/index.html index 6562caad3..c0677c982 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/wrench/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/wrench/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/xing-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/xing-sign/index.html index b2f482f74..685dbed23 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/xing-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/xing-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/xing/index.html b/lib/Font-Awesome/src/3.2.1/icon/xing/index.html index 68aa1532a..86261629c 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/xing/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/xing/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/youtube-play/index.html b/lib/Font-Awesome/src/3.2.1/icon/youtube-play/index.html index 60874dd5c..e4afd1323 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/youtube-play/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/youtube-play/index.html @@ -190,7 +190,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/youtube-sign/index.html b/lib/Font-Awesome/src/3.2.1/icon/youtube-sign/index.html index fe6f624d9..e0c4e4758 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/youtube-sign/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/youtube-sign/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/youtube/index.html b/lib/Font-Awesome/src/3.2.1/icon/youtube/index.html index 51ec01c8d..a4fe62a50 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/youtube/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/youtube/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/zoom-in/index.html b/lib/Font-Awesome/src/3.2.1/icon/zoom-in/index.html index 294842c82..63590f5f8 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/zoom-in/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/zoom-in/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icon/zoom-out/index.html b/lib/Font-Awesome/src/3.2.1/icon/zoom-out/index.html index 2f1f1881c..06cdc9c34 100644 --- a/lib/Font-Awesome/src/3.2.1/icon/zoom-out/index.html +++ b/lib/Font-Awesome/src/3.2.1/icon/zoom-out/index.html @@ -188,7 +188,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/icons/index.html b/lib/Font-Awesome/src/3.2.1/icons/index.html index d5e9c3fbd..be9fd43ed 100644 --- a/lib/Font-Awesome/src/3.2.1/icons/index.html +++ b/lib/Font-Awesome/src/3.2.1/icons/index.html @@ -1191,7 +1191,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/index.html b/lib/Font-Awesome/src/3.2.1/index.html index 417299923..a0fc75dee 100644 --- a/lib/Font-Awesome/src/3.2.1/index.html +++ b/lib/Font-Awesome/src/3.2.1/index.html @@ -282,7 +282,7 @@

    - Thanks to MaxCDN for providing the excellent + Thanks to MaxCDN for providing the excellent BootstrapCDN, the fastest and easiest way to get started with Font Awesome.

    @@ -309,7 +309,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/license/index.html b/lib/Font-Awesome/src/3.2.1/license/index.html index 6c3ce504b..bf2d88726 100644 --- a/lib/Font-Awesome/src/3.2.1/license/index.html +++ b/lib/Font-Awesome/src/3.2.1/license/index.html @@ -250,7 +250,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/test/index.html b/lib/Font-Awesome/src/3.2.1/test/index.html index 29c535fbd..7c63bebd3 100644 --- a/lib/Font-Awesome/src/3.2.1/test/index.html +++ b/lib/Font-Awesome/src/3.2.1/test/index.html @@ -1036,7 +1036,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/3.2.1/whats-new/index.html b/lib/Font-Awesome/src/3.2.1/whats-new/index.html index 6eebfdf8c..307a1b632 100644 --- a/lib/Font-Awesome/src/3.2.1/whats-new/index.html +++ b/lib/Font-Awesome/src/3.2.1/whats-new/index.html @@ -422,7 +422,7 @@ Documentation licensed under CC BY 3.0
    - Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome + Thanks to MaxCDN for providing the excellent BootstrapCDN for Font Awesome
    GitHub Project · diff --git a/lib/Font-Awesome/src/Makefile b/lib/Font-Awesome/src/Makefile index 2058b20c6..bd98b53a2 100644 --- a/lib/Font-Awesome/src/Makefile +++ b/lib/Font-Awesome/src/Makefile @@ -23,11 +23,11 @@ build: @echo "Compiling Less files" @mkdir -p ${FA_CSS_DIRECTORY} - lessc ${FA_LESS_MODERN} > ${FA_CSS_MODERN} - lessc --compress ${FA_LESS_MODERN} > ${FA_CSS_MODERN_MIN} + bundle exec lessc ${FA_LESS_MODERN} > ${FA_CSS_MODERN} + bundle exec lessc --compress ${FA_LESS_MODERN} > ${FA_CSS_MODERN_MIN} # sass ${FA_SCSS_MODERN} ${FA_CSS_MODERN} - lessc --yui-compress ${SITE_LESS} > ${SITE_CSS} + bundle exec lessc --yui-compress ${SITE_LESS} > ${SITE_CSS} cp -r ${FA_ROOT_DIRECTORY}/* ../ mv README.md-nobuild ../README.md cd assets && mv font-awesome font-awesome-{{ site.fontawesome.version }} && zip -r9 font-awesome-{{ site.fontawesome.version }}.zip font-awesome-{{ site.fontawesome.version }} && mv font-awesome-{{ site.fontawesome.version }} font-awesome diff --git a/lib/Font-Awesome/src/README.md-nobuild b/lib/Font-Awesome/src/README.md-nobuild index 0328d3986..728155a7c 100644 --- a/lib/Font-Awesome/src/README.md-nobuild +++ b/lib/Font-Awesome/src/README.md-nobuild @@ -22,20 +22,21 @@ Get started at {{ site.fontawesome.url }}! - Full details: http://fontawesome.io/license ##Changelog -- v3.0.0 - all icons redesigned from scratch, optimized for Bootstrap's 14px default -- v3.0.1 - much improved rendering in webkit, various bug fixes -- v3.0.2 - much improved rendering and alignment in IE7 -- v3.1.0 - Added 54 icons, icon stacking styles, flipping and rotating icons, removed Sass support -- [v3.1.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=4&page=1&state=closed) -- [v3.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=3&page=1&state=closed) -- [v3.2.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=5&page=1&state=closed) -- [v4.0.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=2&page=1&state=closed) -- [v4.0.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=7&page=1&state=closed) -- [v4.0.2 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=8&page=1&state=closed) -- [v4.0.3 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=9&page=1&state=closed) -- [v4.1.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=6&page=1&state=closed) -- [v4.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=12&page=1&state=closed) +- [v4.4.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.4.0+is%3Aclosed) - [v4.3.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?q=milestone%3A4.3.0+is%3Aclosed) +- [v4.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=12&page=1&state=closed) +- [v4.1.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=6&page=1&state=closed) +- [v4.0.3 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=9&page=1&state=closed) +- [v4.0.2 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=8&page=1&state=closed) +- [v4.0.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=7&page=1&state=closed) +- [v4.0.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=2&page=1&state=closed) +- [v3.2.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=5&page=1&state=closed) +- [v3.2.0 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=3&page=1&state=closed) +- [v3.1.1 GitHub milestones](https://github.com/FortAwesome/Font-Awesome/issues?milestone=4&page=1&state=closed) +- v3.1.0 - Added 54 icons, icon stacking styles, flipping and rotating icons, removed Sass support +- v3.0.2 - much improved rendering and alignment in IE7 +- v3.0.1 - much improved rendering in webkit, various bug fixes +- v3.0.0 - all icons redesigned from scratch, optimized for Bootstrap's 14px default ## Contributing @@ -75,6 +76,17 @@ to the `dependencies` in your `component.json`. ## Hacking on Font Awesome +**Before you can build the project**, you must first have the following installed: + +- [Ruby](https://www.ruby-lang.org/en/) +- Ruby Development Headers + - **Ubuntu:** `sudo apt-get install ruby-dev` *(Only if you're __NOT__ using `rbenv` or `rvm`)* + - **Windows:** [DevKit](http://rubyinstaller.org/) +- [Bundler](http://bundler.io/) (Run `gem install bundler` to install). +- [Node Package Manager (AKA NPM)](https://docs.npmjs.com/getting-started/installing-node) +- [Less](http://lesscss.org/) (Run `npm install -g less` to install). +- [Less Plugin: Clean CSS](https://github.com/less/less-plugin-clean-css) (Run `npm install -g less-plugin-clean-css` to install). + From the root of the repository, install the tools used to develop. $ bundle install diff --git a/lib/Font-Awesome/src/_includes/ads/fusion.html b/lib/Font-Awesome/src/_includes/ads/fusion.html index dc8cb8ae0..c49a9f42c 100644 --- a/lib/Font-Awesome/src/_includes/ads/fusion.html +++ b/lib/Font-Awesome/src/_includes/ads/fusion.html @@ -1 +1 @@ - + diff --git a/lib/Font-Awesome/src/_includes/code/core.less b/lib/Font-Awesome/src/_includes/code/core.less index 406162884..cbd0d1ae7 100644 --- a/lib/Font-Awesome/src/_includes/code/core.less +++ b/lib/Font-Awesome/src/_includes/code/core.less @@ -1,7 +1,6 @@ display: inline-block; - font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration + font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox diff --git a/lib/Font-Awesome/src/_includes/code/core.scss b/lib/Font-Awesome/src/_includes/code/core.scss index 2b02720f9..c7ea6e0e3 100644 --- a/lib/Font-Awesome/src/_includes/code/core.scss +++ b/lib/Font-Awesome/src/_includes/code/core.scss @@ -1,7 +1,6 @@ display: inline-block; - font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration + font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration font-size: inherit; // can't have font-size inherit on line above, so need to override text-rendering: auto; // optimizelegibility throws things off #1094 -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; - transform: translate(0, 0); // ensures no half-pixel rendering in firefox diff --git a/lib/Font-Awesome/src/_includes/examples/animated.html b/lib/Font-Awesome/src/_includes/examples/animated.html index ba18ae4ae..a5f61ca5c 100644 --- a/lib/Font-Awesome/src/_includes/examples/animated.html +++ b/lib/Font-Awesome/src/_includes/examples/animated.html @@ -29,7 +29,13 @@ {% endhighlight %}

    - CSS3 animations aren't supported in IE8 - IE9. + + Some browsers on some platforms have issues with animated icons resulting in a jittery wobbling effect. See + issue #671 + for examples and possible workarounds. +

    +

    + CSS3 animations aren't supported in IE8 - IE9.

    diff --git a/lib/Font-Awesome/src/_includes/examples/bordered-pulled.html b/lib/Font-Awesome/src/_includes/examples/bordered-pulled.html index 276641cbc..4eb596da1 100644 --- a/lib/Font-Awesome/src/_includes/examples/bordered-pulled.html +++ b/lib/Font-Awesome/src/_includes/examples/bordered-pulled.html @@ -9,18 +9,18 @@

    - + …tomorrow we will run faster, stretch out our arms farther… And then one fine morning— So we beat on, boats against the current, borne back ceaselessly into the past.

    - Use fa-border and pull-right or pull-left for easy pull quotes or + Use fa-border and fa-pull-right or fa-pull-left for easy pull quotes or article icons.

    {% highlight html %} - + ...tomorrow we will run faster, stretch out our arms farther... And then one fine morning— So we beat on, boats against the current, borne back ceaselessly into the past. diff --git a/lib/Font-Awesome/src/_includes/footer.html b/lib/Font-Awesome/src/_includes/footer.html index 137970aa3..cb71330f1 100644 --- a/lib/Font-Awesome/src/_includes/footer.html +++ b/lib/Font-Awesome/src/_includes/footer.html @@ -1,10 +1,19 @@