aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-xbootstrap/make-first-zones.pl43
-rwxr-xr-xbootstrap/make-named.pl74
-rwxr-xr-xclients/fetch-cubemap-munin.sh17
-rwxr-xr-xclients/ping.pl8
-rwxr-xr-xclients/snmpfetchng.pl37
-rwxr-xr-xexamples/historical/clients/build-linknets.pl (renamed from clients/build-linknets.pl)0
-rwxr-xr-xexamples/historical/clients/flatify.pl (renamed from clients/flatify.pl)0
-rw-r--r--examples/historical/clients/snmp.sql (renamed from clients/snmp.sql)0
-rwxr-xr-xexamples/historical/clients/ssendfile.pl (renamed from clients/ssendfile.pl)0
-rwxr-xr-xexamples/historical/tools/make-accesspoints.pl (renamed from tools/make-accesspoints.pl)0
-rwxr-xr-xexamples/historical/tools/make-switches.pl (renamed from tools/make-switches.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/change-switch-pos.pl (renamed from web/nms.gathering.org/old/change-switch-pos.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/dhcp-json.pl (renamed from web/nms.gathering.org/old/dhcp-json.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/dhcpkart.pl (renamed from web/nms.gathering.org/old/dhcpkart.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/display-rack.html (renamed from web/nms.gathering.org/old/display-rack.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/display.html (renamed from web/nms.gathering.org/old/display.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/edit.html (renamed from web/nms.gathering.org/old/edit.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/index.html (renamed from web/nms.gathering.org/old/index.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/led.pl (renamed from web/nms.gathering.org/old/led.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/mygraph.pl (renamed from web/nms.gathering.org/old/mygraph.pl)0
-rw-r--r--examples/historical/web/nms.gathering.org/nettkart-continuous.html (renamed from web/nms.gathering.org/old/nettkart-continuous.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/nettkart-json.pl (renamed from web/nms.gathering.org/old/nettkart-json.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/nettkart-text.pl (renamed from web/nms.gathering.org/old/nettkart-text.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/nettkart-web.pl (renamed from web/nms.gathering.org/old/nettkart-web.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/nettkart.pl (renamed from web/nms.gathering.org/old/nettkart.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/observium.html (renamed from web/nms.gathering.org/old/observium.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/ping-json.pl (renamed from web/nms.gathering.org/old/ping-json.pl)0
-rw-r--r--examples/historical/web/nms.gathering.org/ping.css (renamed from web/nms.gathering.org/old/ping.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/ping.html (renamed from web/nms.gathering.org/old/ping.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/ping.js (renamed from web/nms.gathering.org/old/ping.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/ping2.html (renamed from web/nms.gathering.org/old/ping2.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/portkart.pl (renamed from web/nms.gathering.org/old/portkart.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/showswitch.pl (renamed from web/nms.gathering.org/old/showswitch.pl)0
-rw-r--r--examples/historical/web/nms.gathering.org/slide.html (renamed from web/nms.gathering.org/old/slide.html)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/smanagement.pl (renamed from web/nms.gathering.org/old/smanagement.pl)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/Statistikk_bakgrunn_alternate-02.png (renamed from web/nms.gathering.org/old/speedometer/Statistikk_bakgrunn_alternate-02.png)bin115463 -> 115463 bytes
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/.editorconfig (renamed from web/nms.gathering.org/old/speedometer/c3-master/.editorconfig)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/.gitignore (renamed from web/nms.gathering.org/old/speedometer/c3-master/.gitignore)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/.jshintrc (renamed from web/nms.gathering.org/old/speedometer/c3-master/.jshintrc)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/.travis.yml (renamed from web/nms.gathering.org/old/speedometer/c3-master/.travis.yml)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/Gruntfile.coffee (renamed from web/nms.gathering.org/old/speedometer/c3-master/Gruntfile.coffee)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/LICENSE (renamed from web/nms.gathering.org/old/speedometer/c3-master/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/README.md (renamed from web/nms.gathering.org/old/speedometer/c3-master/README.md)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/bower.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/bower.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/c3.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/c3.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/c3.min.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/c3.min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/component.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/component.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/config.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/config.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/phantom-exporter.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/phantom-exporter.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/test.png (renamed from web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/test.png)bin16458 -> 16458 bytes
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/js/c3ext.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/extensions/js/c3ext.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/bootstrap.min.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/bootstrap.min.css)0
l---------examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/c3.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/c3.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/index.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/index.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/style.css (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/style.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.csv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.tsv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.tsv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2.csv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2_ts.csv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2_ts.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test3.csv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test3.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_2.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_2.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_3.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_3.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_ts.csv (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_ts.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/index.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/index.html)0
l---------examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.js)0
l---------examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.min.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.min.js)0
l---------examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/extensions (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/extensions)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/require.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/require.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/plugin.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/plugin.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/requirejs.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/requirejs.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_label.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_label.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_range.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_range.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_category.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_category.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_data_colors.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_data_colors.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_legend.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_legend.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_tooltip_show.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_tooltip_show.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_transform.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_transform.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/area_zerobased.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/area_zerobased.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_padding.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_padding.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_range.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_range.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_extent.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_extent.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_localtime.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_localtime.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y2.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y2.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y_default.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y_default.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bar_zerobased.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bar_zerobased.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bindto.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bindto.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/categorized.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/categorized.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_stacked.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_stacked.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_combination.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_combination.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_donut.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_donut.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_gauge.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_gauge.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie_sort.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie_sort.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_scatter.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_scatter.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_spline.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_spline.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step_category.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step_category.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_categorized.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_categorized.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_scale.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_scale.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_xs_scale.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_xs_scale.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_columned.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_columned.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_hide.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_hide.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_json.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_json.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label_format.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label_format.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_rowed.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_rowed.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_url.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_url.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/domain_y.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/domain_y.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/element.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/element.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/emptydata.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/emptydata.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_focus.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_focus.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/interaction_enabled.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/interaction_enabled.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/legend.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/legend.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding_update.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding_update.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/plugin.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/plugin.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/point_r.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/point_r.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions_timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions_timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/requirejs.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/requirejs.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/selection.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/selection.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/simple.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/simple.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart_onbrush.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart_onbrush.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_date.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_date.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_descendent.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_descendent.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_raw.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_raw.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_grouped.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_grouped.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_show.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_show.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_category.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_category.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_onzoom.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_onzoom.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_reduction.html (renamed from web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_reduction.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/package.json (renamed from web/nms.gathering.org/old/speedometer/c3-master/package.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.axis-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.axis-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.data-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.data-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.focus-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.focus-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.grid-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.grid-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.load-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.load-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.zoom-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/api.zoom-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/arc-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/arc-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/axis-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/axis-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-helper.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/c3-helper.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/c3-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/class-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/class-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/core-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/core-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/data-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/data-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/domain-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/domain-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/grid-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/grid-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/interaction-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/interaction-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/legend-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/legend-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.bar-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/shape.bar-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.line-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/shape.line-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/tooltip-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/tooltip-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/type-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/type-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/zoom-spec.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/spec/zoom-spec.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.axis.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.axis.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.category.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.category.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.chart.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.chart.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.color.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.color.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.data.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.data.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.flow.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.flow.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.focus.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.focus.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.grid.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.grid.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.group.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.group.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.legend.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.legend.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.load.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.load.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.region.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.region.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.selection.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.selection.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.show.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.show.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.tooltip.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.tooltip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.transform.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.transform.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.x.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.x.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.zoom.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/api.zoom.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/arc.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/arc.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/axis.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/axis.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/c3.axis.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/c3.axis.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/cache.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/cache.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/category.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/category.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/class.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/class.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/clip.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/clip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/color.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/color.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/config.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/config.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/core.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/core.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.convert.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/data.convert.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/data.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.load.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/data.load.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/domain.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/domain.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/drag.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/drag.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/format.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/format.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/grid.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/grid.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/head.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/head.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/interaction.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/interaction.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/legend.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/legend.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/polyfill.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/polyfill.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/region.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/region.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scale.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scale.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/arc.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/arc.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/area.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/area.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/axis.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/axis.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/bar.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/bar.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/brush.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/brush.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/chart.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/chart.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/focus.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/focus.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/grid.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/grid.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/legend.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/legend.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/line.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/line.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/main.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/main.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/point.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/point.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/region.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/region.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/select_drag.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/select_drag.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/text.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/text.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/tooltip.scss (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/scss/tooltip.scss)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/selection.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/selection.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.bar.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/shape.bar.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/shape.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.line.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/shape.line.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/size.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/size.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/subchart.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/subchart.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tail.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/tail.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/text.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/text.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tooltip.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/tooltip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/type.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/type.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/ua.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/ua.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/util.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/util.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/c3-master/src/zoom.js (renamed from web/nms.gathering.org/old/speedometer/c3-master/src/zoom.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitattributes (renamed from web/nms.gathering.org/old/speedometer/d3-master/.gitattributes)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitignore (renamed from web/nms.gathering.org/old/speedometer/d3-master/.gitignore)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/.npmignore (renamed from web/nms.gathering.org/old/speedometer/d3-master/.npmignore)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/.spmignore (renamed from web/nms.gathering.org/old/speedometer/d3-master/.spmignore)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/CONTRIBUTING.md (renamed from web/nms.gathering.org/old/speedometer/d3-master/CONTRIBUTING.md)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/Makefile (renamed from web/nms.gathering.org/old/speedometer/d3-master/Makefile)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/README.md (renamed from web/nms.gathering.org/old/speedometer/d3-master/README.md)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/bin/bower (renamed from web/nms.gathering.org/old/speedometer/d3-master/bin/bower)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/bin/component (renamed from web/nms.gathering.org/old/speedometer/d3-master/bin/component)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/bin/meteor (renamed from web/nms.gathering.org/old/speedometer/d3-master/bin/meteor)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/bin/start (renamed from web/nms.gathering.org/old/speedometer/d3-master/bin/start)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/bin/uglify (renamed from web/nms.gathering.org/old/speedometer/d3-master/bin/uglify)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/bower.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/bower.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/component.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/component.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/composer.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/composer.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/d3.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.min.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/d3.min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.css (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/geographiclib/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/geographiclib/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/penner/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/penner/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/polymaps/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/polymaps/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/protovis/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/protovis/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/rhill-voronoi/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/rhill-voronoi/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/LICENSE (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/LICENSE)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.min.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.min.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.min.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/package.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/package.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/package.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/package.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/ascending.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/bisect.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/descending.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/deviation.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/entries.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/extent.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/keys.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/map.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/max.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/mean.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/median.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/merge.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/min.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/nest.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/pairs.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/permute.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/quantile.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/range.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/set.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/shuffle.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/sum.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/transpose.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/values.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/variance.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/arrays/zip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/behavior.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/behavior/behavior.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/drag.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/behavior/drag.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/behavior/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/zoom.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/behavior/zoom.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/color.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/color.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hcl.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/hcl.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hsl.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/hsl.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/lab.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/lab.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/rgb.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/rgb.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/xyz.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/color/xyz.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/array.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/compat/array.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/date.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/compat/date.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/compat/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/style.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/compat/style.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/array.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/array.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/class.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/class.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/document.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/document.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/functor.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/functor.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/identity.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/identity.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/noop.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/noop.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/ns.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/ns.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/rebind.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/rebind.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/source.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/source.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/subclass.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/subclass.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/target.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/target.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/true.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/true.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/vendor.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/vendor.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/zero.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/core/zero.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/d3.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/d3.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/csv.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/dsv/csv.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/dsv.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/dsv/dsv.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/dsv/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/tsv.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/dsv/tsv.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/end.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/end.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/dispatch.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/dispatch.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/drag.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/drag.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/event.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/event.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/mouse.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/mouse.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/timer.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/timer.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touch.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/touch.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touches.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/event/touches.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/collapse.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/collapse.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/format.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/format.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/formatPrefix.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/formatPrefix.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/precision.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/precision.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/requote.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/requote.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/round.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/format/round.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers-usa.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers-usa.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/area.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/area.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equal-area.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equal-area.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equidistant.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equidistant.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/bounds.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/bounds.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/cartesian.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/cartesian.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/centroid.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/centroid.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/circle.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/circle.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-antimeridian.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-antimeridian.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-circle.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-circle.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-extent.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-extent.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-polygon.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-polygon.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/compose.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/compose.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-conformal.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-conformal.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equal-area.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equal-area.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equidistant.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equidistant.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/distance.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/distance.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/equirectangular.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/equirectangular.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/geo.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/geo.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/gnomonic.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/gnomonic.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/graticule.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/graticule.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/greatArc.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/greatArc.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/interpolate.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/interpolate.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/length.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/length.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/mercator.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/mercator.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/orthographic.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/orthographic.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-area.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-area.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-bounds.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-bounds.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-buffer.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-buffer.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-centroid.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-centroid.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-context.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-context.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/path.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/point-in-polygon.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/point-in-polygon.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/projection.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/projection.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/resample.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/resample.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/rotation.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/rotation.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/spherical.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/spherical.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stereographic.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/stereographic.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stream.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/stream.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transform.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/transform.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transverse-mercator.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geo/transverse-mercator.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/clip-line.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/clip-line.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/delaunay.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/delaunay.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/geom.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/geom.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/hull.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/hull.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/point.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/point.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/polygon.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/polygon.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/quadtree.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/quadtree.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/beach.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/beach.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/cell.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/cell.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/circle.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/circle.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/clip.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/clip.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/edge.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/edge.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/red-black.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/red-black.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/array.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/ease.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hcl.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hsl.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/interpolate.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/lab.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/number.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/object.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/rgb.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/round.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/string.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/transform.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/uninterpolate.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/zoom.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/bundle.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/bundle.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/chord.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/chord.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/cluster.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/cluster.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/force.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/force.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/hierarchy.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/hierarchy.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/histogram.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/histogram.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/layout.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/layout.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pack.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/pack.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/partition.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/partition.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pie.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/pie.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/stack.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/stack.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/tree.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/tree.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/treemap.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/layout/treemap.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ca-ES.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/ca-ES.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/de-DE.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/de-DE.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-CA.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-CA.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-GB.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-GB.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-US.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-US.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/es-ES.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/es-ES.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fi-FI.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/fi-FI.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-CA.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-CA.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-FR.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-FR.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/he-IL.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/he-IL.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/it-IT.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/it-IT.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/locale.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/locale.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/mk-MK.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/mk-MK.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/nl-NL.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/nl-NL.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/number-format.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/number-format.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pl-PL.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/pl-PL.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pt-BR.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/pt-BR.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ru-RU.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/ru-RU.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-format.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-format.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-scale.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-scale.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/zh-CN.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/locale/zh-CN.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/abs.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/abs.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/adder.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/adder.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/number.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/number.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/random.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/random.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/transform.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/transform.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/trigonometry.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/math/trigonometry.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/bilinear.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/bilinear.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/category.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/category.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/identity.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/identity.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/linear.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/linear.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/log.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/log.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/nice.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/nice.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/ordinal.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/ordinal.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/polylinear.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/polylinear.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/pow.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/pow.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantile.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantile.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantize.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantize.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/scale.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/scale.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/sqrt.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/sqrt.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/threshold.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/scale/threshold.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/append.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/append.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/attr.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/attr.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/call.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/call.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/classed.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/classed.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/data.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/data.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/datum.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/datum.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/each.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/each.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/empty.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/empty.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-insert.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-insert.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-select.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-select.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/filter.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/filter.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/html.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/html.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/insert.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/insert.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/interrupt.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/interrupt.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/node.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/node.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/on.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/on.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/order.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/order.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/property.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/property.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/remove.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/remove.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/select.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/select.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selectAll.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/selectAll.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selection.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/selection.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/size.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/size.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/sort.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/sort.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/style.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/style.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/text.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/text.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/transition.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/selection/transition.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/start.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/start.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/arc.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/arc.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area-radial.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/area-radial.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/area.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/axis.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/axis.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/brush.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/brush.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/chord.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/chord.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal-radial.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal-radial.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line-radial.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/line-radial.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/line.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/svg.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/svg.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/symbol.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/svg/symbol.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/day.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/day.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-iso.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/format-iso.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-utc.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/format-utc.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/format.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/hour.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/hour.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/interval.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/interval.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/minute.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/minute.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/month.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/month.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale-utc.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/scale-utc.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/scale.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/second.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/second.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/time.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/time.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/week.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/week.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/year.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/time/year.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/attr.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/attr.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/delay.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/delay.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/duration.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/duration.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/each.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/each.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/ease.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/ease.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/filter.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/filter.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/remove.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/remove.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/select.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/select.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/selectAll.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/selectAll.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/style.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/style.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/subtransition.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/subtransition.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/text.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/text.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/transition.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/transition.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/tween.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/transition/tween.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/html.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/html.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/index.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/index.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/json.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/json.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/text.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/text.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xhr.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xhr.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xml.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xml.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/XMLHttpRequest.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/XMLHttpRequest.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/ascending-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/ascending-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/bisect-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/bisect-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/descending-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/descending-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/deviation-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/deviation-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/entries-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/entries-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/extent-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/extent-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/keys-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/keys-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/map-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/map-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/max-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/max-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/mean-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/mean-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/median-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/median-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/merge-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/merge-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/min-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/min-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/nest-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/nest-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/one-time-number.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/one-time-number.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/pairs-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/pairs-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/permute-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/permute-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/quantile-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/quantile-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/range-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/range-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/set-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/set-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/shuffle-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/shuffle-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/sum-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/sum-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/transpose-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/transpose-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/values-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/values-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/variance-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/variance-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/zip-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/arrays/zip-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/assert.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/assert.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hcl-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/color/hcl-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hsl-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/color/hsl-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/lab-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/color/lab-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/rgb-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/color/rgb-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/document-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/core/document-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/functor-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/core/functor-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/ns-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/core/ns-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/rebind-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/core/rebind-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/version-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/core/version-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/ocean.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/ocean.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.csv (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.csv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.tsv (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.tsv)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.txt (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.txt)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.xml (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.xml)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/us-counties.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/us-counties.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/world-countries.json (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/data/world-countries.json)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/csv-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/dsv/csv-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/tsv-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/dsv/tsv-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/dispatch-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/event/dispatch-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/mouse-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/event/mouse-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/timer-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/event/timer-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/touch-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/event/touch-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/format-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/format/format-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/formatPrefix-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/format/formatPrefix-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/requote-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/format/requote-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/round-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/format/round-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-usa-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-usa-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-benchmark.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-benchmark.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/bounds-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/bounds-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/centroid-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/centroid-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/circle-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/circle-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/clip-extent-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/clip-extent-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-conformal-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-conformal-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equal-area-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equal-area-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equidistant-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equidistant-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/distance-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/distance-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/equirectangular-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/equirectangular-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/gnomonic-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/gnomonic-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/graticule-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/graticule-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/greatArc-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/greatArc-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/interpolate-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/interpolate-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/length-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/length-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/mercator-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/mercator-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/orthographic-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/orthographic-test.js)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-benchmark (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-benchmark)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-mock.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-mock.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test-suite.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test-suite.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/rotation-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/rotation-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stereographic-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/stereographic-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stream-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/stream-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/transverse-mercator-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geo/transverse-mercator-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/hull-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geom/hull-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/polygon-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geom/polygon-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/quadtree-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geom/quadtree-test.js)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-benchmark (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-benchmark)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/index-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/index-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/array-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/array-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/ease-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/ease-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hcl-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hcl-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hsl-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hsl-test.js)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-string-benchmark (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-string-benchmark)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-transform-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-transform-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/lab-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/lab-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/number-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/number-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/object-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/object-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/rgb-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/rgb-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/round-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/round-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/string-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/string-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/chord-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/chord-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/cluster-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/cluster-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/force-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/force-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/hierarchy-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/hierarchy-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/histogram-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/histogram-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pack-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/pack-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/partition-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/partition-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pie-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/pie-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/tree-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/tree-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/treemap-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/layout/treemap-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/load.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/load.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-caes-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-caes-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-fifi-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-fifi-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-ptbr-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-ptbr-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/random-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/random-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-matrix-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-matrix-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-origin-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-origin-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-test.html (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-test.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/category-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/category-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/identity-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/identity-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/linear-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/linear-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/log-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/log-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/ordinal-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/ordinal-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/pow-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/pow-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantile-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantile-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantize-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantize-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/sqrt-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/sqrt-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/threshold-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/scale/threshold-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/append-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/append-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/attr-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/attr-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/call-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/call-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/classed-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/classed-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-benchmark.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-benchmark.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/datum-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/datum-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/each-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/each-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/empty-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/empty-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/enter-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/enter-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/filter-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/filter-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/html-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/html-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/insert-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/insert-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/interrupt-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/interrupt-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/node-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/node-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/on-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/on-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/order-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/order-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/property-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/property-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/remove-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/remove-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/select-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/select-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selectAll-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/selectAll-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-select-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-select-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-selectAll-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-selectAll-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/size-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/size-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/sort-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/sort-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/style-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/style-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/text-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/selection/text-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/start.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/start.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/arc-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/arc-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-radial-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-radial-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/axis-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/axis-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/brush-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/brush-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/diagonal-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/diagonal-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-radial-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-radial-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/symbol-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/svg/symbol-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/day-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/dayOfYear-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/days-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/format-iso-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/format-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/format-utc-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/hour-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/hours-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/minute-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/minutes-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/month-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/months-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/scale-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/second-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/seconds-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/time.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/time.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/week-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/weeks-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/year-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/time/years-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attr.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attr.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attrTween.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attrTween.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-call.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-call.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-delay.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-delay.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-duration.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-duration.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-each.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-each.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-filter.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-filter.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-id.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-id.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-node.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-node.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-remove.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-remove.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-select.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-select.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-selectAll.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-selectAll.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-size.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-size.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-style.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-style.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-styleTween.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-styleTween.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-text.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-text.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-time.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-time.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-transition.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-transition.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-tween.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-tween.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/html-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/xhr/html-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/json-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/xhr/json-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/text-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/xhr/text-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xhr-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xhr-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xml-test.js (renamed from web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xml-test.js)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/default.css (renamed from web/nms.gathering.org/old/speedometer/default.css)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/index.html (renamed from web/nms.gathering.org/old/speedometer/index.html)0
-rw-r--r--examples/historical/web/nms.gathering.org/speedometer/nms-tmp.js (renamed from web/nms.gathering.org/old/speedometer/nms-tmp.js)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/sshow.pl (renamed from web/nms.gathering.org/old/sshow.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/stempmap.pl (renamed from web/nms.gathering.org/old/stempmap.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/stromkart.pl (renamed from web/nms.gathering.org/old/stromkart.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/switches-json.pl (renamed from web/nms.gathering.org/old/switches-json.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/uplinkkart-text.pl (renamed from web/nms.gathering.org/old/uplinkkart-text.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/uplinkkart.pl (renamed from web/nms.gathering.org/old/uplinkkart.pl)0
-rwxr-xr-xexamples/historical/web/nms.gathering.org/uplinktrafikkart.pl (renamed from web/nms.gathering.org/old/uplinktrafikkart.pl)0
-rw-r--r--examples/historical/web/stats.gathering.org/flute-smack.wav (renamed from web/stats.gathering.org/flute-smack.wav)bin5591400 -> 5591400 bytes
-rw-r--r--examples/historical/web/stats.gathering.org/tg14_logo_rgb_normal.png (renamed from web/stats.gathering.org/tg14_logo_rgb_normal.png)bin28344 -> 28344 bytes
-rw-r--r--examples/historical/web/stats.gathering.org/weathermap-centered.html (renamed from web/stats.gathering.org/weathermap-centered.html)0
-rw-r--r--examples/historical/web/stats.gathering.org/weathermap-erlendo.html (renamed from web/stats.gathering.org/weathermap-erlendo.html)0
-rw-r--r--examples/historical/web/stats.gathering.org/weathermap.html (renamed from web/stats.gathering.org/weathermap.html)0
-rw-r--r--examples/historical/web/stats.gathering.org/weathermap.png (renamed from web/stats.gathering.org/weathermap.png)bin643340 -> 643340 bytes
-rw-r--r--examples/tg15/etc/apache2/munin.tg15.gathering.org.conf (renamed from web/etc/apache2/munin.tg15.gathering.org.conf)0
-rw-r--r--examples/tg15/etc/apache2/stats.tg15.gathering.org.conf (renamed from web/etc/apache2/stats.tg15.gathering.org.conf)0
-rw-r--r--examples/tg15/etc/apache2/stream.tg15.gathering.org.conf (renamed from web/etc/apache2/stream.tg15.gathering.org.conf)0
-rw-r--r--examples/tg15/etc/crontab/einstein.cron (renamed from web/etc/cron/einstein.cron)0
-rw-r--r--include/nms/snmp.pm4
-rw-r--r--include/nms/util.pm17
-rwxr-xr-xinclude/nms/web.pm13
-rw-r--r--nms/.bashrc16
-rw-r--r--nms/Dockerfile.in3
-rw-r--r--nms/README.md26
-rwxr-xr-xnms/config.pm4
-rw-r--r--nms/nms-dump.sql190
-rw-r--r--nms/note1
-rw-r--r--nms/pg_hba.conf16
-rw-r--r--nms/postgresql.conf10
-rwxr-xr-xtools/generate-dnsrr.pl5
-rwxr-xr-xtools/generate-rowdns.pl132
-rwxr-xr-xtools/get_mibs.sh5
-rwxr-xr-xtools/make-linknet-hosts.pl36
-rw-r--r--web/etc/apache2/nms-public.tg15.gathering.org.conf21
-rw-r--r--web/etc/apache2/nms-public.tg16.gathering.org.conf30
-rw-r--r--web/etc/apache2/nms.tg16.gathering.org.conf26
-rw-r--r--web/etc/nginx/default.conf339
-rw-r--r--web/etc/varnish/nms.vcl11
-rwxr-xr-xweb/nms-public.gathering.org/api/public/dhcp20
-rwxr-xr-xweb/nms-public.gathering.org/api/public/dhcp-summary16
-rwxr-xr-xweb/nms-public.gathering.org/api/public/ping37
-rwxr-xr-xweb/nms-public.gathering.org/api/public/switch-state91
-rwxr-xr-xweb/nms-public.gathering.org/api/public/switches36
-rw-r--r--web/nms-public.gathering.org/cagewave.pngbin108137 -> 0 bytes
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.css476
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.css.map1
-rw-r--r--web/nms-public.gathering.org/css/bootstrap-theme.min.css5
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.css6584
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.css.map1
-rw-r--r--web/nms-public.gathering.org/css/bootstrap.min.css5
-rw-r--r--web/nms-public.gathering.org/css/jquery.datetimepicker.css568
-rw-r--r--web/nms-public.gathering.org/css/navbar-static-top.css4
-rw-r--r--web/nms-public.gathering.org/dhcpkart.html10
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eotbin0 -> 20127 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg288
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttfbin0 -> 45404 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woffbin0 -> 23424 bytes
-rw-r--r--web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2bin0 -> 18028 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart-clean-big.pngbin0 -> 84362 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart-full.pngbin0 -> 167427 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg15-salkart.pngbin0 -> 141073 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg16-salkart-clean-big.pngbin0 -> 293835 bytes
-rw-r--r--web/nms-public.gathering.org/img/tg16-salkart-full.pngbin0 -> 575014 bytes
-rw-r--r--web/nms-public.gathering.org/index.html287
-rw-r--r--web/nms-public.gathering.org/js/bootstrap.js2317
-rw-r--r--web/nms-public.gathering.org/js/bootstrap.min.js7
-rw-r--r--web/nms-public.gathering.org/js/jquery.datetimepicker.full.js3073
-rw-r--r--web/nms-public.gathering.org/js/jquery.min.js4
-rw-r--r--web/nms-public.gathering.org/js/nms-color-util.js93
-rw-r--r--web/nms-public.gathering.org/js/nms-data.js259
-rw-r--r--web/nms-public.gathering.org/js/nms-info-box.js713
-rw-r--r--web/nms-public.gathering.org/js/nms-map-handlers.js491
-rw-r--r--web/nms-public.gathering.org/js/nms-map.js580
-rw-r--r--web/nms-public.gathering.org/js/nms.js692
-rw-r--r--web/nms-public.gathering.org/js/npm.js13
-rw-r--r--web/nms-public.gathering.org/led.pl128
-rw-r--r--web/nms-public.gathering.org/nettkart-trafikk.html10
-rw-r--r--web/nms-public.gathering.org/ping-tg14.html22
l---------web/nms-public.gathering.org/ping.css1
-rw-r--r--web/nms-public.gathering.org/ping.html21
l---------web/nms-public.gathering.org/ping.js1
-rw-r--r--web/nms-public.gathering.org/ping2.html21
-rw-r--r--web/nms-public.gathering.org/speedometer.html30
-rw-r--r--web/nms-public.gathering.org/speedometer.js131
-rw-r--r--web/nms-public.gathering.org/tempkart.html10
l---------web/nms-public.gathering.org/tg14-salkart.png1
l---------web/nms-public.gathering.org/tg15-salkart.png1
-rwxr-xr-xweb/nms-public.gathering.org/total_network_traffic-day.sh5
-rwxr-xr-xweb/nms-public.gathering.org/total_network_traffic-week.sh5
-rw-r--r--web/nms-public.gathering.org/trafikk-tg14.html25
-rw-r--r--web/nms-public.gathering.org/weathermap.html10
-rwxr-xr-xweb/nms-public.gathering.org/weathermap.pl18
-rw-r--r--web/nms-public.gathering.org/weathermap.pngbin222386 -> 0 bytes
-rw-r--r--web/nms.gathering.org/api/API.rst86
-rwxr-xr-xweb/nms.gathering.org/api/public/dhcp20
-rwxr-xr-xweb/nms.gathering.org/api/public/dhcp-summary16
-rwxr-xr-xweb/nms.gathering.org/api/public/location44
-rwxr-xr-xweb/nms.gathering.org/api/public/ping38
-rwxr-xr-xweb/nms.gathering.org/api/public/switch-state73
-rwxr-xr-xweb/nms.gathering.org/api/public/switches4
-rwxr-xr-xweb/nms.gathering.org/api/read/comments (renamed from web/nms.gathering.org/api/private/comments)0
-rwxr-xr-xweb/nms.gathering.org/api/read/snmp (renamed from web/nms.gathering.org/api/private/snmp)3
-rwxr-xr-xweb/nms.gathering.org/api/read/switches-management (renamed from web/nms.gathering.org/api/private/switches-management)2
-rwxr-xr-xweb/nms.gathering.org/api/write/comment-add (renamed from web/nms.gathering.org/api/private/comment-add)2
-rwxr-xr-xweb/nms.gathering.org/api/write/comment-change (renamed from web/nms.gathering.org/api/private/comment-change)1
-rwxr-xr-xweb/nms.gathering.org/api/write/switch-add92
-rwxr-xr-xweb/nms.gathering.org/api/write/switch-update (renamed from web/nms.gathering.org/api/private/switch-add)5
-rw-r--r--web/nms.gathering.org/img/tg16-salkart-clean-big.pngbin0 -> 293835 bytes
-rw-r--r--web/nms.gathering.org/img/tg16-salkart-full.pngbin0 -> 575014 bytes
-rw-r--r--web/nms.gathering.org/index.html125
-rw-r--r--web/nms.gathering.org/js/nms-color-util.js3
-rw-r--r--web/nms.gathering.org/js/nms-data.js30
-rw-r--r--web/nms.gathering.org/js/nms-info-box.js949
-rw-r--r--web/nms.gathering.org/js/nms-map-handlers.js235
-rw-r--r--web/nms.gathering.org/js/nms-map.js178
-rw-r--r--web/nms.gathering.org/js/nms.js246
-rw-r--r--web/stats.gathering.org/index.html30
922 files changed, 19210 insertions, 1170 deletions
diff --git a/.gitignore b/.gitignore
index 4856487..33bb432 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
web/.htpasswd
web/.htpasswd.munin
+web/htpasswd*
web/stream.gathering.org/hls
web/stream.gathering.org/chiobe
web/nms-public.gathering.org/nettkart-dhcp.png
@@ -40,4 +41,4 @@ desktop.ini
.idea
.metadata
*.iml
-*.ipr \ No newline at end of file
+*.ipr
diff --git a/bootstrap/make-first-zones.pl b/bootstrap/make-first-zones.pl
index 0f2754c..63cf1d0 100755
--- a/bootstrap/make-first-zones.pl
+++ b/bootstrap/make-first-zones.pl
@@ -1,6 +1,7 @@
#!/usr/bin/perl -I /root/tgmanage
use strict;
use Net::IP;
+use NetAddr::IP;
use POSIX qw(strftime);
BEGIN {
@@ -76,13 +77,18 @@ EOF
}
else { print "Skipped infra-zone, file exists.\n"; }
-$zonefile = $base . "bind/" . $nms::config::ipv6zone . ".zone";
-if ( not -f $zonefile )
-{
- print $zonefile . "\n";
- open IPV6ZONE, ">" . $zonefile or die $! . " " . $zonefile;
+# IPv6 PTR
+foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
+ my $ipv6 = Net::IP->new($ipv6_net);
+ (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
- print IPV6ZONE <<"EOF";
+ $zonefile = $base . "bind/" . $ipv6zone . ".zone";
+ if ( not -f $zonefile )
+ {
+ print $zonefile . "\n";
+ open IPV6ZONE, ">" . $zonefile or die $! . " " . $zonefile;
+
+ print IPV6ZONE <<"EOF";
; autogenerated, and updated from dhcpd -- DO NOT TOUCH!
\$TTL 3600
@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
@@ -97,12 +103,23 @@ if ( not -f $zonefile )
; WARNING! Do not edit this file directly!
; on the bootstrapping/nms server!
-
EOF
- my $ip_pri = Net::IP->new( $nms::config::pri_v6 ) or die ( "Error, new Net::IP for " . $nms::config::pri_v6 );
- my $ip_sec = Net::IP->new( $nms::config::sec_v6 ) or die ( "Error, new Net::IP for " . $nms::config::sec_v6 );
- print IPV6ZONE $ip_pri->reverse_ip() . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n";
- print IPV6ZONE $ip_sec->reverse_ip() . " IN PTR $nms::config::sec_hostname.$nms::config::tgname.gathering.org.\n";
- close IPV6ZONE;
+
+ # print NS reverse
+ my $ipv6addr = NetAddr::IP->new($ipv6_net);
+ my $ip_pri_1 = NetAddr::IP->new($nms::config::pri_v6);
+ if($ipv6addr->contains($ip_pri_1)){
+ my $ip_pri = Net::IP->new( $nms::config::pri_v6 ) or die ( "Error, new Net::IP for " . $nms::config::pri_v6 );
+ print IPV6ZONE $ip_pri->reverse_ip() . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n";
+ }
+
+ my $ip_sec_1 = NetAddr::IP->new($nms::config::sec_v6);
+ if($ipv6addr->contains($ip_sec_1)){
+ my $ip_sec = Net::IP->new( $nms::config::sec_v6 ) or die ( "Error, new Net::IP for " . $nms::config::sec_v6 );
+ print IPV6ZONE $ip_sec->reverse_ip() . " IN PTR $nms::config::sec_hostname.$nms::config::tgname.gathering.org.\n";
+ }
+
+ close IPV6ZONE;
+ }
+ else { print "Skipped v6-reverse-zone, file exists.\n"; }
}
-else { print "Skipped v6-reverse-zone, file exists.\n"; }
diff --git a/bootstrap/make-named.pl b/bootstrap/make-named.pl
index 4812d81..62ad584 100755
--- a/bootstrap/make-named.pl
+++ b/bootstrap/make-named.pl
@@ -1,5 +1,6 @@
#!/usr/bin/perl -I /root/tgmanage
use strict;
+use NetAddr::IP;
BEGIN {
require "include/config.pm";
@@ -54,6 +55,43 @@ options {
recursion yes;
auth-nxdomain no;
listen-on-v6 { any; };
+ statistics-file "/etc/bind/named.rndc-stats";
+};
+
+logging {
+ category "default" { "debug"; };
+ category "general" { "debug"; };
+ category "database" { "debug"; };
+ category "security" { "debug"; "stats"; };
+ category "config" { "debug"; "stats"; };
+ category "resolver" { "debug"; "stats"; };
+ category "xfer-in" { "debug"; "stats"; };
+ category "xfer-out" { "debug"; "stats"; };
+ category "notify" { "debug"; "stats"; };
+ category "client" { "debug"; };
+ category "unmatched" { "debug"; };
+ category "network" { "debug"; };
+ category "update" { "debug"; };
+ category "queries" { "stats"; };
+ category "dispatch" { "debug"; };
+ category "dnssec" { "debug"; };
+ category "lame-servers" { "debug"; };
+
+ channel "debug" {
+ file "/etc/bind/nameddbg" versions 2 size 50m;
+ print-time yes;
+ print-category yes;
+ print-severity yes;
+ severity debug 9;
+ };
+
+ channel "stats" {
+ file "/etc/bind/namedstats" versions 2 size 50m;
+ print-time yes;
+ print-category yes;
+ print-severity yes;
+ severity debug 3;
+ };
};
key DHCP_UPDATER {
@@ -80,18 +118,33 @@ zone "infra.$nms::config::tgname.gathering.org" {
allow-transfer { ns-xfr; };
};
-zone "$nms::config::ipv6zone" {
+EOF
+
+ # IPv6 PTR
+ foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
+ my $ipv6 = Net::IP->new($ipv6_net);
+ (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
+
+
+ print NFILE <<EOF;
+zone "$ipv6zone" {
type master;
allow-update { key DHCP_UPDATER; };
notify yes;
- file "$nms::config::ipv6zone.zone";
+ file "$ipv6zone.zone";
allow-transfer { ns-xfr; ext-xfr; };
};
+EOF
+ }
+
+ print NFILE <<EOF;
+
include "/etc/bind/named.conf.default-zones";
include "named.reverse4.conf";
include "named.master-include.conf";
EOF
+
}
if ( $role eq "slave" )
@@ -114,14 +167,27 @@ zone "infra.$nms::config::tgname.gathering.org" {
masters { master_ns; };
};
-zone "$nms::config::ipv6zone" {
+EOF
+
+ # IPv6 PTR
+ foreach my $ipv6_net (NetAddr::IP->new($nms::config::base_ipv6net)->split(32)){
+ my $ipv6 = Net::IP->new($ipv6_net);
+ (my $ipv6zone = $ipv6->reverse_ip()) =~ s/\.$//;
+
+ print NFILE <<EOF;
+zone "$ipv6zone" {
type slave;
notify no;
masters { master_ns; };
- file "slave/$nms::config::ipv6zone:";
+ file "slave/$ipv6zone";
allow-transfer { ns-xfr; ext-xfr; };
};
+EOF
+ }
+
+ print NFILE <<EOF;
+
include "named.conf.default-zones";
include "named.slave-reverse4.conf";
include "named.slave-include.conf";
diff --git a/clients/fetch-cubemap-munin.sh b/clients/fetch-cubemap-munin.sh
index 2beb8bc..0cc62e2 100755
--- a/clients/fetch-cubemap-munin.sh
+++ b/clients/fetch-cubemap-munin.sh
@@ -1,10 +1,17 @@
#!/bin/bash
-#cp -p "/var/cache/munin/www/tg15.gathering.org/seamus.tg15.gathering.org/cubemap-day.png" "/root/tgmanage/examples/tg15/streamstats/cubemap_seamus_-`date +%Y%m%d_%H%M`.png"
-#cp -p "/var/cache/munin/www/tg15.gathering.org/maggie.tg15.gathering.org/cubemap-day.png" "/root/tgmanage/examples/tg15/streamstats/cubemap_maggie_-`date +%Y%m%d_%H%M`.png"
+tgyear="tg16"
+reflector1="finn"
+reflector2="rey"
-epoch_to=`date +%s`
+if [ $# -eq 0 ]; then
+ epoch_to=`date +%s`
+ epoch_date="`date +%Y%m%d-%H%M`"
+else
+ epoch_to=`date --date "$1" +%s`
+ epoch_date="`date --date \"$1\" +%Y%m%d-%H%M`"
+fi
let "epoch_from = epoch_to - (60 * 60 * 24)"
-wget -qO"/root/tgmanage/examples/tg15/streamstats/cubemap_maggie_detailed-`date +%Y%m%d-%H%M`.png" "http://munin.tg15.gathering.org/munin-cgi/munin-cgi-graph/tg15.gathering.org/maggie.tg15.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
-wget -qO"/root/tgmanage/examples/tg15/streamstats/cubemap_seamus_detailed-`date +%Y%m%d-%H%M`.png" "http://munin.tg15.gathering.org/munin-cgi/munin-cgi-graph/tg15.gathering.org/seamus.tg15.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
+wget -qO"/root/tgmanage/examples/$tgyear/streams/streamstats/cubemap_${reflector1}_detailed-$epoch_date.png" "http://munin.$tgyear.gathering.org/munin-cgi/munin-cgi-graph/$tgyear.gathering.org/${reflector1}.$tgyear.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
+wget -qO"/root/tgmanage/examples/$tgyear/streams/streamstats/cubemap_${reflector2}_detailed-$epoch_date.png" "http://munin.$tgyear.gathering.org/munin-cgi/munin-cgi-graph/$tgyear.gathering.org/${reflector2}.$tgyear.gathering.org/cubemap-pinpoint=$epoch_from,$epoch_to.png?&lower_limit=&upper_limit=&size_x=1280&size_y=720"
diff --git a/clients/ping.pl b/clients/ping.pl
index 27aa878..d945917 100755
--- a/clients/ping.pl
+++ b/clients/ping.pl
@@ -15,13 +15,13 @@ my $dbh = nms::db_connect();
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
-my $q = $dbh->prepare("SELECT switch,host(ip) as ip,host(secondary_ip) as secondary_ip FROM switches WHERE ip is not null ORDER BY random()");
-my $lq = $dbh->prepare("SELECT linknet,addr1,addr2 FROM linknets");
+my $q = $dbh->prepare("SELECT switch,host(mgmt_v4_addr) as ip,host(mgmt_v6_addr) as secondary_ip FROM switches WHERE mgmt_v4_addr is not null ORDER BY random()");
+my $lq = $dbh->prepare("SELECT linknet,addr1,addr2 FROM linknets WHERE addr1 is not null and addr2 is not null");
while (1) {
# ping loopbacks
my $ping = Net::Oping->new;
- $ping->timeout(0.2);
+ $ping->timeout(0.3);
$q->execute;
my %ip_to_switch = ();
@@ -73,7 +73,7 @@ while (1) {
$dbh->commit;
# ping linknets
$ping = Net::Oping->new;
- $ping->timeout(0.2);
+ $ping->timeout(0.3);
$lq->execute;
my @linknets = ();
diff --git a/clients/snmpfetchng.pl b/clients/snmpfetchng.pl
index e813499..2f5e785 100755
--- a/clients/snmpfetchng.pl
+++ b/clients/snmpfetchng.pl
@@ -9,13 +9,12 @@ use Data::Dumper;
use lib '../include';
use nms;
-SNMP::addMibDirs("/tmp/tmp.esQYrkg9MW/v2");
-SNMP::loadModules('SNMPv2-MIB');
-SNMP::loadModules('ENTITY-MIB');
-SNMP::loadModules('IF-MIB');
-SNMP::loadModules('LLDP-MIB');
-SNMP::loadModules('IP-MIB');
-SNMP::loadModules('IP-FORWARD-MIB');
+SNMP::initMib();
+SNMP::addMibDirs("/srv/tgmanage/mibs/StandardMibs");
+SNMP::addMibDirs("/srv/tgmanage/mibs/JuniperMibs");
+SNMP::addMibDirs("/srv/tgmanage/mibs");
+SNMP::loadModules('ALL');
+
our $dbh = nms::db_connect();
$dbh->{AutoCommit} = 0;
$dbh->{RaiseError} = 1;
@@ -23,13 +22,13 @@ $dbh->{RaiseError} = 1;
my $qualification = <<"EOF";
(last_updated IS NULL OR now() - last_updated > poll_frequency)
AND (locked='f' OR now() - last_updated > '15 minutes'::interval)
-AND ip is not null
+AND mgmt_v4_addr is not null
EOF
# Borrowed from snmpfetch.pl
our $qswitch = $dbh->prepare(<<"EOF")
SELECT
- sysname,switch,host(ip) as ip,community,
+ sysname,switch,host(mgmt_v4_addr) as ip,community,
DATE_TRUNC('second', now() - last_updated - poll_frequency) AS overdue
FROM
switches
@@ -48,8 +47,6 @@ my @switches = ();
my $sth = $dbh->prepare("INSERT INTO snmp (switch,data) VALUES((select switch from switches where sysname=?), ?)");
-our $outstanding = 0;
-
sub mylog
{
my $msg = shift;
@@ -61,17 +58,10 @@ sub mylog
sub populate_switches
{
@switches = ();
- my $limit = $nms::config::snmp_max - $outstanding;
- if ($limit < 0) {
- mylog("Something wrong. Too many outstanding polls going.");
- $limit = 1;
- }
- if ($outstanding > 0) {
- mylog("Outstanding polls: $outstanding . Current limit: $limit");
- }
+ my $limit = $nms::config::snmp_max;
$qswitch->execute($limit)
or die "Couldn't get switch";
-
+ $dbh->commit;
while (my $ref = $qswitch->fetchrow_hashref()) {
push @switches, {
'sysname' => $ref->{'sysname'},
@@ -87,7 +77,6 @@ sub inner_loop
populate_switches();
my $poll_todo = "";
for my $refswitch (@switches) {
- $outstanding++;
my %switch = %{$refswitch};
$poll_todo .= "$switch{'sysname'} ";
@@ -102,11 +91,10 @@ sub inner_loop
my $ret = $s->bulkwalk(0, 10, @nms::config::snmp_objects, sub{ callback(\%switch, @_); });
if (!defined($ret)) {
mylog("Fudge: ". $s->{'ErrorStr'});
- $outstanding--;
}
}
mylog( "Polling " . @switches . " switches: $poll_todo");
- SNMP::MainLoop(5);
+ SNMP::MainLoop(10);
}
sub callback{
@@ -146,8 +134,7 @@ sub callback{
$qunlock->execute($switch{'id'})
or die "Couldn't unlock switch";
$dbh->commit;
- $outstanding--;
- mylog( "Polled $switch{'sysname'} in " . (time - $switch{'start'}) . "s. ($outstanding outstanding polls)");
+ mylog( "Polled $switch{'sysname'} in " . (time - $switch{'start'}) . "s.");
}
while (1) {
inner_loop();
diff --git a/clients/build-linknets.pl b/examples/historical/clients/build-linknets.pl
index 015e006..015e006 100755
--- a/clients/build-linknets.pl
+++ b/examples/historical/clients/build-linknets.pl
diff --git a/clients/flatify.pl b/examples/historical/clients/flatify.pl
index f2aa18a..f2aa18a 100755
--- a/clients/flatify.pl
+++ b/examples/historical/clients/flatify.pl
diff --git a/clients/snmp.sql b/examples/historical/clients/snmp.sql
index 7e09313..7e09313 100644
--- a/clients/snmp.sql
+++ b/examples/historical/clients/snmp.sql
diff --git a/clients/ssendfile.pl b/examples/historical/clients/ssendfile.pl
index 224f4e2..224f4e2 100755
--- a/clients/ssendfile.pl
+++ b/examples/historical/clients/ssendfile.pl
diff --git a/tools/make-accesspoints.pl b/examples/historical/tools/make-accesspoints.pl
index b84321a..b84321a 100755
--- a/tools/make-accesspoints.pl
+++ b/examples/historical/tools/make-accesspoints.pl
diff --git a/tools/make-switches.pl b/examples/historical/tools/make-switches.pl
index c0c842a..c0c842a 100755
--- a/tools/make-switches.pl
+++ b/examples/historical/tools/make-switches.pl
diff --git a/web/nms.gathering.org/old/change-switch-pos.pl b/examples/historical/web/nms.gathering.org/change-switch-pos.pl
index 70d12f4..70d12f4 100755
--- a/web/nms.gathering.org/old/change-switch-pos.pl
+++ b/examples/historical/web/nms.gathering.org/change-switch-pos.pl
diff --git a/web/nms.gathering.org/old/dhcp-json.pl b/examples/historical/web/nms.gathering.org/dhcp-json.pl
index 210c434..210c434 100755
--- a/web/nms.gathering.org/old/dhcp-json.pl
+++ b/examples/historical/web/nms.gathering.org/dhcp-json.pl
diff --git a/web/nms.gathering.org/old/dhcpkart.pl b/examples/historical/web/nms.gathering.org/dhcpkart.pl
index ace4a4e..ace4a4e 100755
--- a/web/nms.gathering.org/old/dhcpkart.pl
+++ b/examples/historical/web/nms.gathering.org/dhcpkart.pl
diff --git a/web/nms.gathering.org/old/display-rack.html b/examples/historical/web/nms.gathering.org/display-rack.html
index 694bf11..694bf11 100755
--- a/web/nms.gathering.org/old/display-rack.html
+++ b/examples/historical/web/nms.gathering.org/display-rack.html
diff --git a/web/nms.gathering.org/old/display.html b/examples/historical/web/nms.gathering.org/display.html
index bb7c174..bb7c174 100755
--- a/web/nms.gathering.org/old/display.html
+++ b/examples/historical/web/nms.gathering.org/display.html
diff --git a/web/nms.gathering.org/old/edit.html b/examples/historical/web/nms.gathering.org/edit.html
index dff76c7..dff76c7 100644
--- a/web/nms.gathering.org/old/edit.html
+++ b/examples/historical/web/nms.gathering.org/edit.html
diff --git a/web/nms.gathering.org/old/index.html b/examples/historical/web/nms.gathering.org/index.html
index 8043c7d..8043c7d 100644
--- a/web/nms.gathering.org/old/index.html
+++ b/examples/historical/web/nms.gathering.org/index.html
diff --git a/web/nms.gathering.org/old/led.pl b/examples/historical/web/nms.gathering.org/led.pl
index a05041d..a05041d 100755
--- a/web/nms.gathering.org/old/led.pl
+++ b/examples/historical/web/nms.gathering.org/led.pl
diff --git a/web/nms.gathering.org/old/mygraph.pl b/examples/historical/web/nms.gathering.org/mygraph.pl
index 64104aa..64104aa 100755
--- a/web/nms.gathering.org/old/mygraph.pl
+++ b/examples/historical/web/nms.gathering.org/mygraph.pl
diff --git a/web/nms.gathering.org/old/nettkart-continuous.html b/examples/historical/web/nms.gathering.org/nettkart-continuous.html
index e51eea0..e51eea0 100644
--- a/web/nms.gathering.org/old/nettkart-continuous.html
+++ b/examples/historical/web/nms.gathering.org/nettkart-continuous.html
diff --git a/web/nms.gathering.org/old/nettkart-json.pl b/examples/historical/web/nms.gathering.org/nettkart-json.pl
index e95920e..e95920e 100755
--- a/web/nms.gathering.org/old/nettkart-json.pl
+++ b/examples/historical/web/nms.gathering.org/nettkart-json.pl
diff --git a/web/nms.gathering.org/old/nettkart-text.pl b/examples/historical/web/nms.gathering.org/nettkart-text.pl
index 673ade5..673ade5 100755
--- a/web/nms.gathering.org/old/nettkart-text.pl
+++ b/examples/historical/web/nms.gathering.org/nettkart-text.pl
diff --git a/web/nms.gathering.org/old/nettkart-web.pl b/examples/historical/web/nms.gathering.org/nettkart-web.pl
index ce76c35..ce76c35 100755
--- a/web/nms.gathering.org/old/nettkart-web.pl
+++ b/examples/historical/web/nms.gathering.org/nettkart-web.pl
diff --git a/web/nms.gathering.org/old/nettkart.pl b/examples/historical/web/nms.gathering.org/nettkart.pl
index bf3bf74..bf3bf74 100755
--- a/web/nms.gathering.org/old/nettkart.pl
+++ b/examples/historical/web/nms.gathering.org/nettkart.pl
diff --git a/web/nms.gathering.org/old/observium.html b/examples/historical/web/nms.gathering.org/observium.html
index a4acd16..a4acd16 100755
--- a/web/nms.gathering.org/old/observium.html
+++ b/examples/historical/web/nms.gathering.org/observium.html
diff --git a/web/nms.gathering.org/old/ping-json.pl b/examples/historical/web/nms.gathering.org/ping-json.pl
index e661e8f..e661e8f 100755
--- a/web/nms.gathering.org/old/ping-json.pl
+++ b/examples/historical/web/nms.gathering.org/ping-json.pl
diff --git a/web/nms.gathering.org/old/ping.css b/examples/historical/web/nms.gathering.org/ping.css
index 1045a4a..1045a4a 100644
--- a/web/nms.gathering.org/old/ping.css
+++ b/examples/historical/web/nms.gathering.org/ping.css
diff --git a/web/nms.gathering.org/old/ping.html b/examples/historical/web/nms.gathering.org/ping.html
index 1c3c3e0..1c3c3e0 100644
--- a/web/nms.gathering.org/old/ping.html
+++ b/examples/historical/web/nms.gathering.org/ping.html
diff --git a/web/nms.gathering.org/old/ping.js b/examples/historical/web/nms.gathering.org/ping.js
index 7c5de57..7c5de57 100644
--- a/web/nms.gathering.org/old/ping.js
+++ b/examples/historical/web/nms.gathering.org/ping.js
diff --git a/web/nms.gathering.org/old/ping2.html b/examples/historical/web/nms.gathering.org/ping2.html
index 05ed129..05ed129 100644
--- a/web/nms.gathering.org/old/ping2.html
+++ b/examples/historical/web/nms.gathering.org/ping2.html
diff --git a/web/nms.gathering.org/old/portkart.pl b/examples/historical/web/nms.gathering.org/portkart.pl
index ce7dcdd..ce7dcdd 100755
--- a/web/nms.gathering.org/old/portkart.pl
+++ b/examples/historical/web/nms.gathering.org/portkart.pl
diff --git a/web/nms.gathering.org/old/showswitch.pl b/examples/historical/web/nms.gathering.org/showswitch.pl
index e585841..e585841 100755
--- a/web/nms.gathering.org/old/showswitch.pl
+++ b/examples/historical/web/nms.gathering.org/showswitch.pl
diff --git a/web/nms.gathering.org/old/slide.html b/examples/historical/web/nms.gathering.org/slide.html
index 046020d..046020d 100644
--- a/web/nms.gathering.org/old/slide.html
+++ b/examples/historical/web/nms.gathering.org/slide.html
diff --git a/web/nms.gathering.org/old/smanagement.pl b/examples/historical/web/nms.gathering.org/smanagement.pl
index 485e2b0..485e2b0 100755
--- a/web/nms.gathering.org/old/smanagement.pl
+++ b/examples/historical/web/nms.gathering.org/smanagement.pl
diff --git a/web/nms.gathering.org/old/speedometer/Statistikk_bakgrunn_alternate-02.png b/examples/historical/web/nms.gathering.org/speedometer/Statistikk_bakgrunn_alternate-02.png
index b4805cf..b4805cf 100644
--- a/web/nms.gathering.org/old/speedometer/Statistikk_bakgrunn_alternate-02.png
+++ b/examples/historical/web/nms.gathering.org/speedometer/Statistikk_bakgrunn_alternate-02.png
Binary files differ
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/.editorconfig b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.editorconfig
index 8f96039..8f96039 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/.editorconfig
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.editorconfig
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/.gitignore b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.gitignore
index 85c9d4f..85c9d4f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/.gitignore
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.gitignore
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/.jshintrc b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.jshintrc
index 9b4294c..9b4294c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/.jshintrc
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.jshintrc
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/.travis.yml b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.travis.yml
index cd93ed1..cd93ed1 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/.travis.yml
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/.travis.yml
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/Gruntfile.coffee b/examples/historical/web/nms.gathering.org/speedometer/c3-master/Gruntfile.coffee
index 750bbc7..750bbc7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/Gruntfile.coffee
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/Gruntfile.coffee
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/c3-master/LICENSE
index 29ce9cb..29ce9cb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/README.md b/examples/historical/web/nms.gathering.org/speedometer/c3-master/README.md
index 53d97e2..53d97e2 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/README.md
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/README.md
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/bower.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/bower.json
index 31e1336..31e1336 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/bower.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/bower.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/c3.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.css
index ab0b70a..ab0b70a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/c3.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/c3.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.js
index 233d1b5..233d1b5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/c3.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/c3.min.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.css
index 08e5084..08e5084 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/c3.min.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/c3.min.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.js
index d99c28b..d99c28b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/c3.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/c3.min.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/component.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/component.json
index 51e9f0f..51e9f0f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/component.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/component.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/config.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/config.json
index e3f812a..e3f812a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/config.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/config.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/phantom-exporter.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/phantom-exporter.js
index 92d849d..92d849d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/phantom-exporter.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/phantom-exporter.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/test.png b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/test.png
index 593b70b..593b70b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/extensions/exporter/test.png
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/exporter/test.png
Binary files differ
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/extensions/js/c3ext.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/js/c3ext.js
index 8ff301f..8ff301f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/extensions/js/c3ext.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/extensions/js/c3ext.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/bootstrap.min.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/bootstrap.min.css
index 4cc4e7a..4cc4e7a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/bootstrap.min.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/bootstrap.min.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/c3.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/c3.css
index 4052640..4052640 120000
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/c3.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/c3.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/index.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/index.css
index f38c901..f38c901 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/index.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/index.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/style.css b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/style.css
index 9abe27b..9abe27b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/css/style.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/css/style.css
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.csv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.csv
index dea2e16..dea2e16 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.csv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.json
index 7486b75..7486b75 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.tsv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.tsv
index 1fcab88..1fcab88 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test.tsv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test.tsv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2.csv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2.csv
index ae1a48a..ae1a48a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2.csv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2_ts.csv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2_ts.csv
index 2b8d00e..2b8d00e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test2_ts.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test2_ts.csv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test3.csv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test3.csv
index 2aabb04..2aabb04 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test3.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test3.csv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_2.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_2.json
index ed18b2f..ed18b2f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_2.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_2.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_3.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_3.json
index c08c9c7..c08c9c7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_3.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_3.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_ts.csv b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_ts.csv
index 5bfbd34..5bfbd34 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/data/c3_test_ts.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/data/c3_test_ts.csv
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/index.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/index.html
index 7f2c06a..7f2c06a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/index.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/index.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.js
index 644b352..644b352 120000
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.min.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.min.js
index a221dd2..a221dd2 120000
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/c3.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/c3.min.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/extensions b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/extensions
index 4761652..4761652 120000
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/extensions
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/extensions
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/require.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/require.js
index e599a6a..e599a6a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/require.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/require.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/plugin.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/plugin.js
index e5a0718..e5a0718 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/plugin.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/plugin.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/requirejs.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/requirejs.js
index 95f5a7d..95f5a7d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/requirejs.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/requirejs.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js
index 0c12921..0c12921 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/js/samples/zoom_reduction.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_label.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_label.html
index b53de6a..b53de6a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_label.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_label.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_range.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_range.html
index daa7843..daa7843 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_axis_range.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_axis_range.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_category.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_category.html
index 143c31d..143c31d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_category.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_category.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_data_colors.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_data_colors.html
index 755341a..755341a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_data_colors.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_data_colors.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow.html
index 363faf5..363faf5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html
index 216d7e4..216d7e4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_flow_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_legend.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_legend.html
index dfc6994..dfc6994 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_legend.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_legend.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_tooltip_show.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_tooltip_show.html
index b4a82b5..b4a82b5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_tooltip_show.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_tooltip_show.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_transform.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_transform.html
index 4a85426..4a85426 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_transform.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_transform.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html
index 661d111..661d111 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_xgrid_lines.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html
index 57784ed..57784ed 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/api_ygrid_lines.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/area_zerobased.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/area_zerobased.html
index f7975c9..f7975c9 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/area_zerobased.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/area_zerobased.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_padding.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_padding.html
index c562a4a..c562a4a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_padding.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_padding.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_range.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_range.html
index 732200a..732200a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_range.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_range.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_extent.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_extent.html
index b433824..b433824 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_extent.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_extent.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_localtime.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_localtime.html
index 3b5813e..3b5813e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_localtime.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_localtime.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html
index 4b98bb9..4b98bb9 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_range_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html
index f0f54ca..f0f54ca 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_culling.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html
index 5f8ed36..5f8ed36 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_fit.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html
index 9cfb531..9cfb531 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_rotate.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html
index c8922e6..c8922e6 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_x_tick_values.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y2.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y2.html
index e146c6c..e146c6c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y2.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y2.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y_default.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y_default.html
index 50119eb..50119eb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/axes_y_default.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/axes_y_default.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bar_zerobased.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bar_zerobased.html
index 55d02a8..55d02a8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bar_zerobased.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bar_zerobased.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bindto.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bindto.html
index 14e813d..14e813d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/bindto.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/bindto.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/categorized.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/categorized.html
index 0e4a1b5..0e4a1b5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/categorized.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/categorized.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area.html
index 04ec6bd..04ec6bd 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline.html
index 836474a..836474a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html
index a5448cb..a5448cb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_spline_stacked.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_stacked.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_stacked.html
index 9830d94..9830d94 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_stacked.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_stacked.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step.html
index 2ba7a27..2ba7a27 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html
index ce470e4..ce470e4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_area_step_stacked.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar.html
index 1f19af7..1f19af7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html
index d47fdd7..d47fdd7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_bar_stacked.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_combination.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_combination.html
index 42eb59a..42eb59a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_combination.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_combination.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_donut.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_donut.html
index d8453d3..d8453d3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_donut.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_donut.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_gauge.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_gauge.html
index a650135..a650135 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_gauge.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_gauge.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie.html
index e9b7ccb..e9b7ccb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie_sort.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie_sort.html
index ca875b8..ca875b8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_pie_sort.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_pie_sort.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_scatter.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_scatter.html
index 0afe1da..0afe1da 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_scatter.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_scatter.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_spline.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_spline.html
index 731133d..731133d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_spline.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_spline.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step.html
index fb32067..fb32067 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step_category.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step_category.html
index 4be84a8..4be84a8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/chart_step_category.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/chart_step_category.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_categorized.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_categorized.html
index 460bcf8..460bcf8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_categorized.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_categorized.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_scale.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_scale.html
index 7945ee8..7945ee8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_x_scale.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_x_scale.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_xs_scale.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_xs_scale.html
index 0364c10..0364c10 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/custom_xs_scale.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/custom_xs_scale.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_columned.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_columned.html
index 9bc280c..9bc280c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_columned.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_columned.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_hide.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_hide.html
index fb3469b..fb3469b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_hide.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_hide.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_json.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_json.html
index 522fb93..522fb93 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_json.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_json.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label.html
index e8cc05c..e8cc05c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label_format.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label_format.html
index 1fe0566..1fe0566 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_label_format.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_label_format.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load.html
index 356383d..356383d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load_timeseries.html
index 947db37..947db37 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_load_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_load_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region.html
index 94789e3..94789e3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region_timeseries.html
index 8e154b5..8e154b5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_region_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_region_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_rowed.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_rowed.html
index fd8fcfd..fd8fcfd 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_rowed.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_rowed.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_url.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_url.html
index 95b6eb6..95b6eb6 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/data_url.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/data_url.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/domain_y.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/domain_y.html
index 95c91ce..95c91ce 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/domain_y.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/domain_y.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/element.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/element.html
index 1c28bd9..1c28bd9 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/element.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/element.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/emptydata.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/emptydata.html
index 10bd55f..10bd55f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/emptydata.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/emptydata.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_focus.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_focus.html
index ec6bd97..ec6bd97 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_focus.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_focus.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines.html
index 975a641..975a641 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html
index d3517ad..d3517ad 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grid_x_lines_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids.html
index e0df334..e0df334 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids_timeseries.html
index 53095b0..53095b0 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/grids_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/grids_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/interaction_enabled.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/interaction_enabled.html
index 9e77fea..9e77fea 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/interaction_enabled.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/interaction_enabled.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/legend.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/legend.html
index 92c99ae..92c99ae 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/legend.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/legend.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding.html
index e9f0026..e9f0026 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding_update.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding_update.html
index 37071d9..37071d9 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/padding_update.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/padding_update.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/plugin.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/plugin.html
index cba5227..cba5227 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/plugin.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/plugin.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/point_r.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/point_r.html
index 46ee3ec..46ee3ec 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/point_r.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/point_r.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions.html
index 0546383..0546383 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions_timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions_timeseries.html
index b3fcd23..b3fcd23 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/regions_timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/regions_timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/requirejs.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/requirejs.html
index 001aee7..001aee7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/requirejs.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/requirejs.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/selection.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/selection.html
index 9fc6811..9fc6811 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/selection.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/selection.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/simple.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/simple.html
index 0aeb681..0aeb681 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/simple.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/simple.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart.html
index e068043..e068043 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart_onbrush.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart_onbrush.html
index 2cd2158..2cd2158 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/subchart_onbrush.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/subchart_onbrush.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries.html
index af1265c..af1265c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_date.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_date.html
index ceb8e2f..ceb8e2f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_date.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_date.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_descendent.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_descendent.html
index 58246f6..58246f6 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_descendent.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_descendent.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_raw.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_raw.html
index 06d61f3..06d61f3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/timeseries_raw.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/timeseries_raw.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_grouped.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_grouped.html
index 6f77562..6f77562 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_grouped.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_grouped.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_show.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_show.html
index 3449553..3449553 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/tooltip_show.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/tooltip_show.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom.html
index 73af5ab..73af5ab 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_category.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_category.html
index e8e7e24..e8e7e24 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_category.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_category.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_onzoom.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_onzoom.html
index f79e5ba..f79e5ba 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_onzoom.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_onzoom.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_reduction.html b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_reduction.html
index 4a9873a..4a9873a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/htdocs/samples/zoom_reduction.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/htdocs/samples/zoom_reduction.html
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/package.json b/examples/historical/web/nms.gathering.org/speedometer/c3-master/package.json
index b9d1408..b9d1408 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/package.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/package.json
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.axis-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.axis-spec.js
index 5764f73..5764f73 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.axis-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.axis-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.data-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.data-spec.js
index 60881cb..60881cb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.data-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.data-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.focus-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.focus-spec.js
index df64e80..df64e80 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.focus-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.focus-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.grid-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.grid-spec.js
index ebaeee6..ebaeee6 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.grid-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.grid-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.load-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.load-spec.js
index fbea981..fbea981 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.load-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.load-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.zoom-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.zoom-spec.js
index 4a65927..4a65927 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/api.zoom-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/api.zoom-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/arc-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/arc-spec.js
index 517bf64..517bf64 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/arc-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/arc-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/axis-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/axis-spec.js
index 0f4aa2d..0f4aa2d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/axis-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/axis-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/c3-helper.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-helper.js
index 970cd1b..970cd1b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/c3-helper.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-helper.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/c3-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-spec.js
index 7be30b3..7be30b3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/c3-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/c3-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/class-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/class-spec.js
index 97d0e69..97d0e69 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/class-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/class-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/core-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/core-spec.js
index 048df38..048df38 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/core-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/core-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/data-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/data-spec.js
index db7e929..db7e929 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/data-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/data-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/domain-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/domain-spec.js
index 69f7995..69f7995 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/domain-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/domain-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/grid-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/grid-spec.js
index 0443ec1..0443ec1 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/grid-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/grid-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/interaction-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/interaction-spec.js
index 4e62070..4e62070 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/interaction-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/interaction-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/legend-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/legend-spec.js
index 5773b1a..5773b1a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/legend-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/legend-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/shape.bar-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.bar-spec.js
index 78f2971..78f2971 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/shape.bar-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.bar-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/shape.line-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.line-spec.js
index b4f5dc8..b4f5dc8 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/shape.line-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/shape.line-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/tooltip-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/tooltip-spec.js
index de3983f..de3983f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/tooltip-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/tooltip-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/type-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/type-spec.js
index 9210d50..9210d50 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/type-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/type-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/spec/zoom-spec.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/zoom-spec.js
index 7f1490b..7f1490b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/spec/zoom-spec.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/spec/zoom-spec.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.axis.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.axis.js
index 281a7bb..281a7bb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.axis.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.axis.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.category.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.category.js
index 1616c4a..1616c4a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.category.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.category.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.chart.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.chart.js
index a13b0da..a13b0da 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.chart.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.chart.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.color.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.color.js
index 15aaa3e..15aaa3e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.color.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.color.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.data.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.data.js
index be5b8f7..be5b8f7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.data.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.data.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.flow.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.flow.js
index d8afc19..d8afc19 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.flow.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.flow.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.focus.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.focus.js
index 1a65bcc..1a65bcc 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.focus.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.focus.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.grid.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.grid.js
index 038aa6b..038aa6b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.grid.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.grid.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.group.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.group.js
index 47fedb4..47fedb4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.group.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.group.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.legend.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.legend.js
index 182caa1..182caa1 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.legend.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.legend.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.load.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.load.js
index 6bb4c9a..6bb4c9a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.load.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.load.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.region.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.region.js
index b587b4f..b587b4f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.region.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.region.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.selection.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.selection.js
index 02ad601..02ad601 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.selection.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.selection.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.show.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.show.js
index 08e99e1..08e99e1 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.show.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.show.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.tooltip.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.tooltip.js
index 045a52e..045a52e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.tooltip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.tooltip.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.transform.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.transform.js
index f04b505..f04b505 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.transform.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.transform.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.x.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.x.js
index 93d25d4..93d25d4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.x.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.x.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/api.zoom.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.zoom.js
index 07e7a58..07e7a58 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/api.zoom.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/api.zoom.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/arc.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/arc.js
index 40861eb..40861eb 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/arc.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/arc.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/axis.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/axis.js
index cd14bd6..cd14bd6 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/axis.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/axis.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/c3.axis.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/c3.axis.js
index 6d4f7a3..6d4f7a3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/c3.axis.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/c3.axis.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/cache.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/cache.js
index 6566616..6566616 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/cache.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/cache.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/category.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/category.js
index 5143c6c..5143c6c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/category.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/category.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/class.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/class.js
index 335f17c..335f17c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/class.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/class.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/clip.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/clip.js
index 322dbb5..322dbb5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/clip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/clip.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/color.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/color.js
index da1888e..da1888e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/color.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/color.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/config.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/config.js
index 737ce1b..737ce1b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/config.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/config.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/core.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/core.js
index 5b19c7c..5b19c7c 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/core.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/core.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/data.convert.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.convert.js
index 4384e7a..4384e7a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/data.convert.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.convert.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/data.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.js
index b29bd63..b29bd63 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/data.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/data.load.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.load.js
index 49eee28..49eee28 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/data.load.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/data.load.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/domain.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/domain.js
index 5f03c5f..5f03c5f 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/domain.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/domain.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/drag.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/drag.js
index 56ab070..56ab070 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/drag.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/drag.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/format.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/format.js
index aa72780..aa72780 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/format.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/format.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/grid.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/grid.js
index 9a06432..9a06432 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/grid.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/grid.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/head.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/head.js
index d77cbd0..d77cbd0 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/head.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/head.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/interaction.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/interaction.js
index d7d4c41..d7d4c41 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/interaction.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/interaction.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/legend.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/legend.js
index 7353a98..7353a98 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/legend.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/legend.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/polyfill.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/polyfill.js
index 95d7812..95d7812 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/polyfill.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/polyfill.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/region.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/region.js
index 20c70d5..20c70d5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/region.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/region.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scale.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scale.js
index 6c4c045..6c4c045 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scale.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scale.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/arc.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/arc.scss
index ddea0d7..ddea0d7 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/arc.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/arc.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/area.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/area.scss
index 5f3e2c4..5f3e2c4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/area.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/area.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/axis.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/axis.scss
index 140ee4e..140ee4e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/axis.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/axis.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/bar.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/bar.scss
index 08ae998..08ae998 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/bar.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/bar.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/brush.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/brush.scss
index 0f547c4..0f547c4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/brush.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/brush.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/chart.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/chart.scss
index 969e8da..969e8da 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/chart.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/chart.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/focus.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/focus.scss
index 02db8df..02db8df 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/focus.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/focus.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/grid.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/grid.scss
index fd9ce13..fd9ce13 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/grid.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/grid.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/legend.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/legend.scss
index 8d6d971..8d6d971 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/legend.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/legend.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/line.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/line.scss
index 7690afa..7690afa 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/line.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/line.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/main.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/main.scss
index 20777b4..20777b4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/main.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/main.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/point.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/point.scss
index 532a644..532a644 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/point.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/point.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/region.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/region.scss
index d77f7c3..d77f7c3 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/region.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/region.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/select_drag.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/select_drag.scss
index ef5cb1a..ef5cb1a 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/select_drag.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/select_drag.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/text.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/text.scss
index d4453ce..d4453ce 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/text.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/text.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/tooltip.scss b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/tooltip.scss
index 99f36f9..99f36f9 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/scss/tooltip.scss
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/scss/tooltip.scss
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/selection.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/selection.js
index e9b4ada..e9b4ada 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/selection.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/selection.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.bar.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.bar.js
index bd8403e..bd8403e 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.bar.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.bar.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.js
index fd40598..fd40598 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.line.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.line.js
index 057e35d..057e35d 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/shape.line.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/shape.line.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/size.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/size.js
index 4bfb619..4bfb619 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/size.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/size.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/subchart.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/subchart.js
index ba41035..ba41035 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/subchart.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/subchart.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/tail.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tail.js
index 7e78a25..7e78a25 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/tail.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tail.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/text.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/text.js
index 6574a76..6574a76 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/text.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/text.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/tooltip.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tooltip.js
index 6b0a7d4..6b0a7d4 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/tooltip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/tooltip.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/type.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/type.js
index 51511a5..51511a5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/type.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/type.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/ua.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/ua.js
index 17fcde5..17fcde5 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/ua.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/ua.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/util.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/util.js
index 91cb48b..91cb48b 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/util.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/util.js
diff --git a/web/nms.gathering.org/old/speedometer/c3-master/src/zoom.js b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/zoom.js
index b46a0b1..b46a0b1 100644
--- a/web/nms.gathering.org/old/speedometer/c3-master/src/zoom.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/c3-master/src/zoom.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/.gitattributes b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitattributes
index aa9cd05..aa9cd05 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/.gitattributes
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitattributes
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/.gitignore b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitignore
index 8cc5a84..8cc5a84 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/.gitignore
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.gitignore
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/.npmignore b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.npmignore
index f2a693c..f2a693c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/.npmignore
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.npmignore
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/.spmignore b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.spmignore
index 0a67304..0a67304 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/.spmignore
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/.spmignore
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/CONTRIBUTING.md b/examples/historical/web/nms.gathering.org/speedometer/d3-master/CONTRIBUTING.md
index 5ced343..5ced343 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/CONTRIBUTING.md
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/CONTRIBUTING.md
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/LICENSE
index f27c7e6..f27c7e6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/Makefile b/examples/historical/web/nms.gathering.org/speedometer/d3-master/Makefile
index f9c0b62..f9c0b62 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/Makefile
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/Makefile
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/README.md b/examples/historical/web/nms.gathering.org/speedometer/d3-master/README.md
index 1548344..1548344 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/README.md
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/README.md
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bin/bower b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/bower
index b4f6133..b4f6133 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/bin/bower
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/bower
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bin/component b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/component
index 785d9d6..785d9d6 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/bin/component
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/component
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bin/meteor b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/meteor
index 4787051..4787051 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/bin/meteor
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/meteor
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bin/start b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/start
index 9b046fc..9b046fc 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/bin/start
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/start
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bin/uglify b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/uglify
index 6defe2f..6defe2f 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/bin/uglify
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bin/uglify
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/bower.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bower.json
index 72e0d7b..72e0d7b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/bower.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/bower.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/component.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/component.json
index 4d2d92d..4d2d92d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/component.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/component.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/composer.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/composer.json
index c5a50f2..c5a50f2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/composer.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/composer.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/d3.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.js
index 8868e42..8868e42 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/d3.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/d3.min.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.min.js
index 34d5513..34d5513 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/d3.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/d3.min.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/index.js
index d00e9bf..d00e9bf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/LICENSE
index 2ac775d..2ac775d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.css b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.css
index faed650..faed650 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.css
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.js
index 2295527..2295527 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/colorbrewer/colorbrewer.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/colorbrewer/colorbrewer.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/geographiclib/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/geographiclib/LICENSE
index 692304c..692304c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/geographiclib/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/geographiclib/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/penner/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/penner/LICENSE
index 8429685..8429685 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/penner/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/penner/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/polymaps/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/polymaps/LICENSE
index df48fc5..df48fc5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/polymaps/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/polymaps/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/protovis/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/protovis/LICENSE
index 4c6e405..4c6e405 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/protovis/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/protovis/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/rhill-voronoi/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/rhill-voronoi/LICENSE
index 2be40c3..2be40c3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/rhill-voronoi/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/rhill-voronoi/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/LICENSE b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/LICENSE
index a59d17e..a59d17e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/LICENSE
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/LICENSE
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.js
index 2f5556a..2f5556a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.js
index cbdc2ac..cbdc2ac 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.min.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.min.js
index a470da4..a470da4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.lin.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.lin.min.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.min.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.min.js
index 41cf0eb..41cf0eb 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.min.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.js
index d98df12..d98df12 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.min.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.min.js
index fd69f13..fd69f13 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/lib/science/science.stats.min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/lib/science/science.stats.min.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/package.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/package.js
index e80d6db..e80d6db 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/package.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/package.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/package.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/package.json
index 537a5de..537a5de 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/package.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/package.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/ascending.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js
index 067c17a..067c17a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/ascending.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/ascending.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/bisect.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js
index fbe3a73..fbe3a73 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/bisect.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/bisect.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/descending.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js
index 0503458..0503458 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/descending.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/descending.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/deviation.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js
index 16663e3..16663e3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/deviation.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/deviation.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/entries.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js
index 4ce014b..4ce014b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/entries.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/entries.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/extent.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js
index 7584658..7584658 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/extent.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/extent.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js
index c29fb24..c29fb24 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/keys.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js
index c83ec8e..c83ec8e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/keys.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/keys.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/map.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js
index 4ba7f3d..4ba7f3d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/map.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/map.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/max.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js
index 5aec78d..5aec78d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/max.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/max.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/mean.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js
index ab91ae8..ab91ae8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/mean.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/mean.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/median.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js
index 63c2696..63c2696 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/median.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/median.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/merge.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js
index 53c992d..53c992d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/merge.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/merge.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/min.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js
index c48a49d..c48a49d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/min.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/min.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/nest.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js
index 859add7..859add7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/nest.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/nest.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/pairs.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js
index e270f95..e270f95 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/pairs.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/pairs.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/permute.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js
index f27d2c9..f27d2c9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/permute.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/permute.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/quantile.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js
index 67fe9fd..67fe9fd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/quantile.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/quantile.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/range.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js
index 2fd6a1e..2fd6a1e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/range.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/range.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/set.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js
index de4dbd4..de4dbd4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/set.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/set.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/shuffle.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js
index dbe36bd..dbe36bd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/shuffle.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/shuffle.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/sum.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js
index 1e179bc..1e179bc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/sum.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/sum.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/transpose.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js
index 999c543..999c543 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/transpose.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/transpose.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/values.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js
index 299d304..299d304 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/values.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/values.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/variance.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js
index 70da168..70da168 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/variance.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/variance.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/zip.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js
index 302ec4a..302ec4a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/arrays/zip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/arrays/zip.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/behavior.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/behavior.js
index 39633b1..39633b1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/behavior.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/behavior.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/drag.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/drag.js
index 47db986..47db986 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/drag.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/drag.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/index.js
index 5ce0932..5ce0932 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/zoom.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/zoom.js
index bccbe14..bccbe14 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/behavior/zoom.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/behavior/zoom.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/color.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/color.js
index 5620fea..5620fea 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/color.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/color.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/hcl.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hcl.js
index 509fe3b..509fe3b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/hcl.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hcl.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/hsl.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hsl.js
index e242703..e242703 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/hsl.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/hsl.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/index.js
index 3be3854..3be3854 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/lab.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/lab.js
index 36d8791..36d8791 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/lab.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/lab.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/rgb.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/rgb.js
index a2782f3..a2782f3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/rgb.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/rgb.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/color/xyz.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/xyz.js
index 30e79ab..30e79ab 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/color/xyz.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/color/xyz.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/array.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/array.js
index d5a0ab6..d5a0ab6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/array.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/array.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/date.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/date.js
index e682d4c..e682d4c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/date.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/date.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/index.js
index ec0e180..ec0e180 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/style.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/style.js
index 76563a2..76563a2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/compat/style.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/compat/style.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/array.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/array.js
index cb4fd36..cb4fd36 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/array.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/array.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/class.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/class.js
index 7f1d743..7f1d743 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/class.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/class.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/document.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/document.js
index 58b846d..58b846d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/document.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/document.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/functor.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/functor.js
index f8b1bf7..f8b1bf7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/functor.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/functor.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/identity.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/identity.js
index 73893f8..73893f8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/identity.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/identity.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/index.js
index f6d233e..f6d233e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/noop.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/noop.js
index 35f91d1..35f91d1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/noop.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/noop.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/ns.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/ns.js
index 7d8be9c..7d8be9c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/ns.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/ns.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/rebind.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/rebind.js
index d611846..d611846 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/rebind.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/rebind.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/source.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/source.js
index f56f501..f56f501 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/source.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/source.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/subclass.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/subclass.js
index ea8dc85..ea8dc85 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/subclass.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/subclass.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/target.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/target.js
index 766ba7e..766ba7e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/target.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/target.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/true.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/true.js
index 0900faf..0900faf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/true.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/true.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/vendor.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/vendor.js
index b92c7fe..b92c7fe 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/vendor.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/vendor.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/core/zero.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/zero.js
index 18b52af..18b52af 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/core/zero.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/core/zero.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/d3.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/d3.js
index d0ad738..d0ad738 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/d3.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/d3.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/csv.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/csv.js
index 2b6d94f..2b6d94f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/csv.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/csv.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/dsv.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/dsv.js
index a3c9777..a3c9777 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/dsv.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/dsv.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/index.js
index b92fc3c..b92fc3c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/tsv.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/tsv.js
index 1783744..1783744 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/dsv/tsv.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/dsv/tsv.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/end.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/end.js
index 3e56b2c..3e56b2c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/end.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/end.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/dispatch.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/dispatch.js
index 9b85ccd..9b85ccd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/dispatch.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/dispatch.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/drag.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/drag.js
index 8687ccf..8687ccf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/drag.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/drag.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/event.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/event.js
index 71e676e..71e676e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/event.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/event.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/index.js
index 4bb5a45..4bb5a45 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/mouse.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/mouse.js
index a6994b9..a6994b9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/mouse.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/mouse.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/timer.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/timer.js
index 0591ece..0591ece 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/timer.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/timer.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/touch.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touch.js
index b9828ca..b9828ca 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/touch.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touch.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/event/touches.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touches.js
index a7cbaa5..a7cbaa5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/event/touches.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/event/touches.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/collapse.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/collapse.js
index 08adc3a..08adc3a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/collapse.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/collapse.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/format.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/format.js
index bf740db..bf740db 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/format.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/format.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/formatPrefix.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/formatPrefix.js
index dc84ce0..dc84ce0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/formatPrefix.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/formatPrefix.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/index.js
index 21d7e9d..21d7e9d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/precision.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/precision.js
index 24e32a1..24e32a1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/precision.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/precision.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/requote.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/requote.js
index 99dbf15..99dbf15 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/requote.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/requote.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/format/round.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/round.js
index 44e9574..44e9574 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/format/round.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/format/round.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers-usa.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers-usa.js
index bee8ed2..bee8ed2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers-usa.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers-usa.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers.js
index c1cde75..c1cde75 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/albers.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/albers.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/area.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/area.js
index 32f2c1c..32f2c1c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/area.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/area.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equal-area.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equal-area.js
index 91bdcd6..91bdcd6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equal-area.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equal-area.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equidistant.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equidistant.js
index 80b14a9..80b14a9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal-equidistant.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal-equidistant.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal.js
index 5c0d9f5..5c0d9f5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/azimuthal.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/azimuthal.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/bounds.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/bounds.js
index 2248d85..2248d85 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/bounds.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/bounds.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/cartesian.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/cartesian.js
index f365a3d..f365a3d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/cartesian.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/cartesian.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/centroid.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/centroid.js
index b764e9f..b764e9f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/centroid.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/centroid.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/circle.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/circle.js
index f802f21..f802f21 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/circle.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/circle.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-antimeridian.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-antimeridian.js
index 144a35d..144a35d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-antimeridian.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-antimeridian.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-circle.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-circle.js
index d204a51..d204a51 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-circle.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-circle.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-extent.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-extent.js
index cc69dd0..cc69dd0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-extent.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-extent.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-polygon.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-polygon.js
index 4dd960c..4dd960c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip-polygon.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip-polygon.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip.js
index 9c54214..9c54214 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/clip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/clip.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/compose.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/compose.js
index fe374ef..fe374ef 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/compose.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/compose.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-conformal.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-conformal.js
index 8002322..8002322 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-conformal.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-conformal.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equal-area.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equal-area.js
index 7ccfb32..7ccfb32 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equal-area.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equal-area.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equidistant.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equidistant.js
index 24935b0..24935b0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic-equidistant.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic-equidistant.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic.js
index 8377ec5..8377ec5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/conic.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/conic.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/distance.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/distance.js
index 805dda7..805dda7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/distance.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/distance.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/equirectangular.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/equirectangular.js
index eb9cfe0..eb9cfe0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/equirectangular.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/equirectangular.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/geo.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/geo.js
index cf220ce..cf220ce 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/geo.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/geo.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/gnomonic.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/gnomonic.js
index 8878ad8..8878ad8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/gnomonic.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/gnomonic.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/graticule.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/graticule.js
index 2522059..2522059 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/graticule.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/graticule.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/greatArc.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/greatArc.js
index a60a488..a60a488 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/greatArc.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/greatArc.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/index.js
index c95f341..c95f341 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/interpolate.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/interpolate.js
index dba105b..dba105b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/interpolate.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/interpolate.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/length.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/length.js
index d977d04..d977d04 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/length.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/length.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/mercator.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/mercator.js
index 7eb824d..7eb824d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/mercator.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/mercator.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/orthographic.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/orthographic.js
index f51b500..f51b500 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/orthographic.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/orthographic.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-area.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-area.js
index 53b10e1..53b10e1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-area.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-area.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-bounds.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-bounds.js
index 53c7a06..53c7a06 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-bounds.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-bounds.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-buffer.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-buffer.js
index d14a2fb..d14a2fb 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-buffer.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-buffer.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-centroid.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-centroid.js
index cda5897..cda5897 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-centroid.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-centroid.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-context.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-context.js
index d92086c..d92086c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path-context.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path-context.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path.js
index 51d08be..51d08be 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/path.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/path.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/point-in-polygon.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/point-in-polygon.js
index 448edd6..448edd6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/point-in-polygon.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/point-in-polygon.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/projection.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/projection.js
index fe493a8..fe493a8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/projection.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/projection.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/resample.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/resample.js
index 1ddd9a3..1ddd9a3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/resample.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/resample.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/rotation.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/rotation.js
index 46ea8b6..46ea8b6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/rotation.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/rotation.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/spherical.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/spherical.js
index 9790a5a..9790a5a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/spherical.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/spherical.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/stereographic.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stereographic.js
index 052945f..052945f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/stereographic.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stereographic.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/stream.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stream.js
index 2119c5d..2119c5d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/stream.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/stream.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/transform.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transform.js
index a57af50..a57af50 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/transform.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transform.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/transverse-mercator.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transverse-mercator.js
index eb29203..eb29203 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geo/transverse-mercator.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geo/transverse-mercator.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/clip-line.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/clip-line.js
index c83c412..c83c412 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/clip-line.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/clip-line.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/delaunay.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/delaunay.js
index 0a60cd1..0a60cd1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/delaunay.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/delaunay.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/geom.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/geom.js
index b17c4fc..b17c4fc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/geom.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/geom.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/hull.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/hull.js
index 7abce15..7abce15 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/hull.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/hull.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/index.js
index 9e2fb28..9e2fb28 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/point.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/point.js
index 10cfe3e..10cfe3e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/point.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/point.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/polygon.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/polygon.js
index 02383dd..02383dd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/polygon.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/polygon.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/quadtree.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/quadtree.js
index 8d9f6a5..8d9f6a5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/quadtree.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/quadtree.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi.js
index 53f7d79..53f7d79 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/beach.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/beach.js
index e017467..e017467 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/beach.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/beach.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/cell.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/cell.js
index 8c6628d..8c6628d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/cell.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/cell.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/circle.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/circle.js
index d7fb679..d7fb679 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/circle.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/circle.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/clip.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/clip.js
index e145965..e145965 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/clip.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/clip.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/edge.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/edge.js
index 8e5a734..8e5a734 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/edge.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/edge.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/index.js
index a6c01a8..a6c01a8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/red-black.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/red-black.js
index 7cf6880..7cf6880 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/geom/voronoi/red-black.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/geom/voronoi/red-black.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/array.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js
index 33f8f48..33f8f48 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/array.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/array.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/ease.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js
index fd48a17..fd48a17 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/ease.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/ease.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hcl.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js
index 4e62591..4e62591 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hcl.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hcl.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hsl.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js
index 2b8d70f..2b8d70f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/hsl.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/hsl.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js
index ed6c502..ed6c502 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/interpolate.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js
index 14f5dc5..14f5dc5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/interpolate.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/interpolate.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/lab.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js
index 6b46c04..6b46c04 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/lab.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/lab.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/number.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js
index 2f0e42a..2f0e42a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/number.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/number.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/object.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js
index a3f863a..a3f863a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/object.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/object.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/rgb.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js
index f4944d2..f4944d2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/rgb.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/rgb.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/round.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js
index 8e8797d..8e8797d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/round.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/round.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/string.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js
index 3033a71..3033a71 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/string.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/string.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/transform.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js
index 17a19cb..17a19cb 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/transform.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/transform.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/uninterpolate.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js
index d8c8332..d8c8332 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/uninterpolate.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/uninterpolate.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/zoom.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js
index ae6b5c7..ae6b5c7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/interpolate/zoom.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/interpolate/zoom.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/bundle.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/bundle.js
index 3f30244..3f30244 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/bundle.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/bundle.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/chord.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/chord.js
index 10506e3..10506e3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/chord.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/chord.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/cluster.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/cluster.js
index a4eec3b..a4eec3b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/cluster.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/cluster.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/force.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/force.js
index e863969..e863969 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/force.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/force.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/hierarchy.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/hierarchy.js
index 3bd4780..3bd4780 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/hierarchy.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/hierarchy.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/histogram.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/histogram.js
index 4105d9b..4105d9b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/histogram.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/histogram.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/index.js
index 9c203f3..9c203f3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/layout.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/layout.js
index 3bcbcce..3bcbcce 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/layout.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/layout.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/pack.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pack.js
index 282ce09..282ce09 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/pack.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pack.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/partition.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/partition.js
index 581fd05..581fd05 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/partition.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/partition.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/pie.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pie.js
index a6a4ecf..a6a4ecf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/pie.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/pie.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/stack.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/stack.js
index 79ece60..79ece60 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/stack.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/stack.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/tree.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/tree.js
index 80afaa7..80afaa7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/tree.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/tree.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/treemap.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/treemap.js
index 1a1d94a..1a1d94a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/layout/treemap.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/layout/treemap.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/ca-ES.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ca-ES.js
index a371e37..a371e37 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/ca-ES.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ca-ES.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/de-DE.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/de-DE.js
index a5b86d2..a5b86d2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/de-DE.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/de-DE.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-CA.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-CA.js
index 64853cf..64853cf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-CA.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-CA.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-GB.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-GB.js
index 3f98114..3f98114 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-GB.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-GB.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-US.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-US.js
index 4fa8547..4fa8547 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/en-US.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/en-US.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/es-ES.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/es-ES.js
index 3149e33..3149e33 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/es-ES.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/es-ES.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fi-FI.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fi-FI.js
index dc60567..dc60567 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fi-FI.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fi-FI.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-CA.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-CA.js
index a18c39f..a18c39f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-CA.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-CA.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-FR.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-FR.js
index 9c3f52d..9c3f52d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/fr-FR.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/fr-FR.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/he-IL.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/he-IL.js
index 4fb49b2..4fb49b2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/he-IL.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/he-IL.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/it-IT.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/it-IT.js
index aec9202..aec9202 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/it-IT.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/it-IT.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/locale.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/locale.js
index b3b9950..b3b9950 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/locale.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/locale.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/mk-MK.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/mk-MK.js
index 710c2a4..710c2a4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/mk-MK.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/mk-MK.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/nl-NL.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/nl-NL.js
index c28a436..c28a436 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/nl-NL.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/nl-NL.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/number-format.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/number-format.js
index e62f7b4..e62f7b4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/number-format.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/number-format.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/pl-PL.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pl-PL.js
index a545f0f..a545f0f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/pl-PL.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pl-PL.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/pt-BR.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pt-BR.js
index 7524e48..7524e48 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/pt-BR.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/pt-BR.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/ru-RU.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ru-RU.js
index 714c8f7..714c8f7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/ru-RU.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/ru-RU.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-format.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-format.js
index aeae290..aeae290 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-format.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-format.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-scale.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-scale.js
index e69de29..e69de29 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/time-scale.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/time-scale.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/zh-CN.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/zh-CN.js
index ea35884..ea35884 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/locale/zh-CN.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/locale/zh-CN.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/abs.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/abs.js
index 6c078b9..6c078b9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/abs.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/abs.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/adder.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/adder.js
index 08fa289..08fa289 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/adder.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/adder.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/index.js
index 20f6966..20f6966 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/number.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/number.js
index 44ff332..44ff332 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/number.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/number.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/random.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/random.js
index d0c6ba0..d0c6ba0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/random.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/random.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/transform.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/transform.js
index 8a5e6cd..8a5e6cd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/transform.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/transform.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/math/trigonometry.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/trigonometry.js
index d7099a4..d7099a4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/math/trigonometry.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/math/trigonometry.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/bilinear.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/bilinear.js
index ff01477..ff01477 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/bilinear.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/bilinear.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/category.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/category.js
index 3324917..3324917 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/category.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/category.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/identity.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/identity.js
index 0cc7809..0cc7809 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/identity.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/identity.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/index.js
index 271ea8d..271ea8d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/linear.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/linear.js
index ce60ee4..ce60ee4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/linear.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/linear.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/log.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/log.js
index 5234a58..5234a58 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/log.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/log.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/nice.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/nice.js
index 7d534e9..7d534e9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/nice.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/nice.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/ordinal.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/ordinal.js
index f065d54..f065d54 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/ordinal.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/ordinal.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/polylinear.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/polylinear.js
index 3d729d7..3d729d7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/polylinear.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/polylinear.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/pow.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/pow.js
index 9554fb8..9554fb8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/pow.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/pow.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantile.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantile.js
index b092de2..b092de2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantile.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantile.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantize.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantize.js
index f3b656d..f3b656d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/quantize.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/quantize.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/scale.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/scale.js
index b7952d4..b7952d4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/scale.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/scale.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/sqrt.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/sqrt.js
index a05c287..a05c287 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/sqrt.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/sqrt.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/threshold.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/threshold.js
index 41b04c2..41b04c2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/scale/threshold.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/scale/threshold.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/append.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/append.js
index 9630184..9630184 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/append.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/append.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/attr.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/attr.js
index 723199a..723199a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/attr.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/attr.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/call.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/call.js
index 3dfc386..3dfc386 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/call.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/call.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/classed.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/classed.js
index b477ed6..b477ed6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/classed.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/classed.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/data.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/data.js
index aadf19a..aadf19a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/data.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/data.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/datum.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/datum.js
index 5434de4..5434de4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/datum.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/datum.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/each.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/each.js
index 45b8603..45b8603 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/each.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/each.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/empty.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/empty.js
index 6135c23..6135c23 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/empty.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/empty.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-insert.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-insert.js
index f7d6c15..f7d6c15 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-insert.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-insert.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-select.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-select.js
index 2764c6c..2764c6c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter-select.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter-select.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter.js
index 2533582..2533582 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/enter.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/enter.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/filter.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/filter.js
index 3872856..3872856 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/filter.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/filter.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/html.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/html.js
index 19f475d..19f475d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/html.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/html.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/index.js
index 3350277..3350277 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/insert.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/insert.js
index 909dfd9..909dfd9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/insert.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/insert.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/interrupt.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/interrupt.js
index f2fd55e..f2fd55e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/interrupt.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/interrupt.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/node.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/node.js
index 9c9be4d..9c9be4d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/node.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/node.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/on.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/on.js
index 9f04987..9f04987 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/on.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/on.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/order.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/order.js
index dc537ac..dc537ac 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/order.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/order.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/property.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/property.js
index 8afcb89..8afcb89 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/property.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/property.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/remove.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/remove.js
index 80666d9..80666d9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/remove.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/remove.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/select.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/select.js
index 8c1dcde..8c1dcde 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/select.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/select.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/selectAll.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selectAll.js
index 7072f88..7072f88 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/selectAll.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selectAll.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/selection.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selection.js
index acae550..acae550 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/selection.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/selection.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/size.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/size.js
index 206ab4f..206ab4f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/size.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/size.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/sort.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/sort.js
index 1abacd0..1abacd0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/sort.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/sort.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/style.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/style.js
index 1501da0..1501da0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/style.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/style.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/text.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/text.js
index 3daf802..3daf802 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/text.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/text.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/transition.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/transition.js
index 09f3d98..09f3d98 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/selection/transition.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/selection/transition.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/start.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/start.js
index aea3d9d..aea3d9d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/start.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/start.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/arc.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/arc.js
index feda636..feda636 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/arc.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/arc.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/area-radial.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area-radial.js
index 9a5b862..9a5b862 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/area-radial.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area-radial.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/area.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area.js
index b1c030a..b1c030a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/area.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/area.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/axis.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/axis.js
index 79a6740..79a6740 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/axis.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/axis.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/brush.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/brush.js
index 77ef8d3..77ef8d3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/brush.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/brush.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/chord.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/chord.js
index d7611e1..d7611e1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/chord.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/chord.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal-radial.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal-radial.js
index c4b09fd..c4b09fd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal-radial.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal-radial.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal.js
index 17d15de..17d15de 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/diagonal.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/diagonal.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/index.js
index a9201d7..a9201d7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/line-radial.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line-radial.js
index d69ec30..d69ec30 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/line-radial.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line-radial.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/line.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line.js
index 1cde315..1cde315 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/line.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/line.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/svg.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/svg.js
index 3749248..3749248 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/svg.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/svg.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/symbol.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/symbol.js
index 6ac58bf..6ac58bf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/svg/symbol.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/svg/symbol.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/day.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/day.js
index 3b8e7de..3b8e7de 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/day.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/day.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format-iso.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-iso.js
index 1bcd860..1bcd860 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format-iso.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-iso.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format-utc.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-utc.js
index f5b4808..f5b4808 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format-utc.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format-utc.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format.js
index 3ad7f5f..3ad7f5f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/format.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/format.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/hour.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/hour.js
index 0c6011d..0c6011d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/hour.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/hour.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/index.js
index b041fc6..b041fc6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/interval.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/interval.js
index b177b20..b177b20 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/interval.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/interval.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/minute.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/minute.js
index ad081f6..ad081f6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/minute.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/minute.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/month.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/month.js
index 577d5b2..577d5b2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/month.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/month.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/scale-utc.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale-utc.js
index 1c6e30f..1c6e30f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/scale-utc.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale-utc.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/scale.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale.js
index 90a23df..90a23df 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/scale.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/scale.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/second.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/second.js
index 745c4b9..745c4b9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/second.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/second.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/time.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/time.js
index ddfc018..ddfc018 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/time.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/time.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/week.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/week.js
index 8fdfe13..8fdfe13 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/week.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/week.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/time/year.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/year.js
index 3ac02a2..3ac02a2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/time/year.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/time/year.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/attr.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/attr.js
index 31c77f1..31c77f1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/attr.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/attr.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/delay.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/delay.js
index 068e040..068e040 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/delay.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/delay.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/duration.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/duration.js
index c9db2dc..c9db2dc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/duration.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/duration.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/each.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/each.js
index f1b2057..f1b2057 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/each.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/each.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/ease.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/ease.js
index 5c3564d..5c3564d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/ease.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/ease.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/filter.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/filter.js
index 7e0e13a..7e0e13a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/filter.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/filter.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/index.js
index c2a6702..c2a6702 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/remove.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/remove.js
index 8e6e569..8e6e569 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/remove.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/remove.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/select.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/select.js
index e537368..e537368 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/select.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/select.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/selectAll.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/selectAll.js
index 5500d90..5500d90 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/selectAll.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/selectAll.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/style.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/style.js
index 313c2a4..313c2a4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/style.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/style.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/subtransition.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/subtransition.js
index 7b2229e..7b2229e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/subtransition.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/subtransition.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/text.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/text.js
index 0e2455a..0e2455a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/text.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/text.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/transition.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/transition.js
index 3ffad05..3ffad05 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/transition.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/transition.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/tween.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/tween.js
index 108daa9..108daa9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/transition/tween.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/transition/tween.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/html.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/html.js
index d42283b..d42283b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/html.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/html.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/index.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/index.js
index c71b466..c71b466 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/index.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/index.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/json.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/json.js
index f51bc2c..f51bc2c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/json.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/json.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/text.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/text.js
index 1f51e3d..1f51e3d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/text.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/text.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xhr.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xhr.js
index d0a87a0..d0a87a0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xhr.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xhr.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xml.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xml.js
index 09c18e2..09c18e2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/src/xhr/xml.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/src/xhr/xml.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/XMLHttpRequest.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/XMLHttpRequest.js
index 21ee574..21ee574 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/XMLHttpRequest.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/XMLHttpRequest.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/ascending-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/ascending-test.js
index b7d9a7c..b7d9a7c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/ascending-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/ascending-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/bisect-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/bisect-test.js
index b3c5f61..b3c5f61 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/bisect-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/bisect-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/descending-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/descending-test.js
index 2c28c75..2c28c75 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/descending-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/descending-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/deviation-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/deviation-test.js
index 6566362..6566362 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/deviation-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/deviation-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/entries-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/entries-test.js
index 32f53f9..32f53f9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/entries-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/entries-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/extent-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/extent-test.js
index bfdfa5f..bfdfa5f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/extent-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/extent-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/keys-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/keys-test.js
index c11bda6..c11bda6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/keys-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/keys-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/map-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/map-test.js
index 89290f1..89290f1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/map-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/map-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/max-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/max-test.js
index 2403ac2..2403ac2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/max-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/max-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/mean-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/mean-test.js
index 9c9421b..9c9421b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/mean-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/mean-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/median-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/median-test.js
index 4ab4a52..4ab4a52 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/median-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/median-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/merge-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/merge-test.js
index 9d25080..9d25080 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/merge-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/merge-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/min-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/min-test.js
index 5fe331b..5fe331b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/min-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/min-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/nest-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/nest-test.js
index 13d9001..13d9001 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/nest-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/nest-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/one-time-number.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/one-time-number.js
index 2653283..2653283 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/one-time-number.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/one-time-number.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/pairs-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/pairs-test.js
index 23b07fa..23b07fa 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/pairs-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/pairs-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/permute-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/permute-test.js
index 4f3d01e..4f3d01e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/permute-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/permute-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/quantile-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/quantile-test.js
index 2cbade9..2cbade9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/quantile-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/quantile-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/range-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/range-test.js
index 3561954..3561954 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/range-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/range-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/set-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/set-test.js
index ec24685..ec24685 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/set-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/set-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/shuffle-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/shuffle-test.js
index 2f28457..2f28457 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/shuffle-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/shuffle-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/sum-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/sum-test.js
index 81a3a9c..81a3a9c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/sum-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/sum-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/transpose-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/transpose-test.js
index 84b6b55..84b6b55 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/transpose-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/transpose-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/values-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/values-test.js
index f244dee..f244dee 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/values-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/values-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/variance-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/variance-test.js
index 99af932..99af932 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/variance-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/variance-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/zip-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/zip-test.js
index 56b4076..56b4076 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/arrays/zip-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/arrays/zip-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/assert.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/assert.js
index 3acac51..3acac51 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/assert.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/assert.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/color/hcl-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hcl-test.js
index f8c8093..f8c8093 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/color/hcl-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hcl-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/color/hsl-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hsl-test.js
index d468a1f..d468a1f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/color/hsl-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/hsl-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/color/lab-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/lab-test.js
index 39409bb..39409bb 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/color/lab-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/lab-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/color/rgb-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/rgb-test.js
index 1401c85..1401c85 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/color/rgb-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/color/rgb-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/core/document-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/document-test.js
index 4f0b30f..4f0b30f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/core/document-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/document-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/core/functor-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/functor-test.js
index ef88473..ef88473 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/core/functor-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/functor-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/core/ns-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/ns-test.js
index 3506dc1..3506dc1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/core/ns-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/ns-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/core/rebind-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/rebind-test.js
index 60a9bb6..60a9bb6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/core/rebind-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/rebind-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/core/version-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/version-test.js
index 23678d7..23678d7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/core/version-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/core/version-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/ocean.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/ocean.json
index 1b607f4..1b607f4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/ocean.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/ocean.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.csv b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.csv
index 89d73a0..89d73a0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.csv
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.csv
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.html
index 2029283..2029283 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.json
index 92c35fd..92c35fd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.tsv b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.tsv
index 9998779..9998779 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.tsv
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.tsv
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.txt b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.txt
index af5626b..af5626b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.txt
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.txt
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.xml b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.xml
index a2447a5..a2447a5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/sample.xml
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/sample.xml
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/us-counties.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/us-counties.json
index 2280967..2280967 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/us-counties.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/us-counties.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/data/world-countries.json b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/world-countries.json
index 0dce5f5..0dce5f5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/data/world-countries.json
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/data/world-countries.json
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/dsv/csv-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/csv-test.js
index 04023b1..04023b1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/dsv/csv-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/csv-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/dsv/tsv-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/tsv-test.js
index 6301125..6301125 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/dsv/tsv-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/dsv/tsv-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/event/dispatch-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/dispatch-test.js
index d365fd4..d365fd4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/event/dispatch-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/dispatch-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/event/mouse-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/mouse-test.html
index 219f8ec..219f8ec 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/event/mouse-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/mouse-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/event/timer-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/timer-test.js
index f86039c..f86039c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/event/timer-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/timer-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/event/touch-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/touch-test.html
index 94f1451..94f1451 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/event/touch-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/event/touch-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/format/format-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/format-test.js
index 5a5d0e0..5a5d0e0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/format/format-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/format-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/format/formatPrefix-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/formatPrefix-test.js
index 9bad6f3..9bad6f3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/format/formatPrefix-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/formatPrefix-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/format/requote-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/requote-test.js
index 4c727f9..4c727f9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/format/requote-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/requote-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/format/round-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/round-test.js
index 0f70c48..0f70c48 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/format/round-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/format/round-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-test.js
index 15afa25..15afa25 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-usa-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-usa-test.js
index 38db0b0..38db0b0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/albers-usa-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/albers-usa-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-benchmark.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-benchmark.js
index 4d44b09..4d44b09 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-benchmark.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-benchmark.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-test.js
index a766c14..a766c14 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/area-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/area-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js
index 9199c33..9199c33 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equal-area-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js
index 8ba104d..8ba104d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/azimuthal-equidistant-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/bounds-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/bounds-test.js
index d18e347..d18e347 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/bounds-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/bounds-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/centroid-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/centroid-test.js
index 39ce203..39ce203 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/centroid-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/centroid-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/circle-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/circle-test.js
index 362ad2d..362ad2d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/circle-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/circle-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/clip-extent-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/clip-extent-test.js
index 1877c13..1877c13 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/clip-extent-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/clip-extent-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-conformal-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-conformal-test.js
index c6598c7..c6598c7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-conformal-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-conformal-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equal-area-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equal-area-test.js
index c04bbfc..c04bbfc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equal-area-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equal-area-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equidistant-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equidistant-test.js
index 8725059..8725059 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/conic-equidistant-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/conic-equidistant-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/distance-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/distance-test.js
index b1000ee..b1000ee 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/distance-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/distance-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/equirectangular-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/equirectangular-test.js
index de204e1..de204e1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/equirectangular-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/equirectangular-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/gnomonic-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/gnomonic-test.js
index d5f9aec..d5f9aec 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/gnomonic-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/gnomonic-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/graticule-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/graticule-test.js
index 50e690d..50e690d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/graticule-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/graticule-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/greatArc-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/greatArc-test.js
index efd2696..efd2696 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/greatArc-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/greatArc-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/interpolate-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/interpolate-test.js
index e250ad3..e250ad3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/interpolate-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/interpolate-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/length-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/length-test.js
index 8e97461..8e97461 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/length-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/length-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/mercator-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/mercator-test.js
index 2847b59..2847b59 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/mercator-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/mercator-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/orthographic-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/orthographic-test.js
index cfe0c95..cfe0c95 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/orthographic-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/orthographic-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-benchmark b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-benchmark
index cc0b67c..cc0b67c 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-benchmark
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-benchmark
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-test.js
index 46323df..46323df 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/path-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/path-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-mock.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-mock.js
index c32a5a0..c32a5a0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-mock.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-mock.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-test.js
index 02687b0..02687b0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/point-in-polygon-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/point-in-polygon-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test-suite.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test-suite.js
index d780fd3..d780fd3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test-suite.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test-suite.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test.js
index b68d373..b68d373 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/projection-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/projection-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/rotation-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/rotation-test.js
index d664e43..d664e43 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/rotation-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/rotation-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/stereographic-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stereographic-test.js
index 0987198..0987198 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/stereographic-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stereographic-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/stream-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stream-test.js
index e25318b..e25318b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/stream-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/stream-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/transverse-mercator-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/transverse-mercator-test.js
index 88ae3ac..88ae3ac 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geo/transverse-mercator-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geo/transverse-mercator-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/hull-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/hull-test.js
index 1f30da8..1f30da8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/hull-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/hull-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/polygon-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/polygon-test.js
index 054292e..054292e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/polygon-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/polygon-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/quadtree-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/quadtree-test.js
index 2244765..2244765 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/quadtree-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/quadtree-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-benchmark b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-benchmark
index ae08012..ae08012 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-benchmark
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-benchmark
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-test.js
index 707697b..707697b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/geom/voronoi-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/geom/voronoi-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/index-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/index-test.js
index f6e23ab..f6e23ab 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/index-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/index-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/array-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/array-test.js
index 34ac6ef..34ac6ef 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/array-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/array-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/ease-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/ease-test.js
index 7e36548..7e36548 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/ease-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/ease-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hcl-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hcl-test.js
index f21ab3b..f21ab3b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hcl-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hcl-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hsl-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hsl-test.js
index 26689a3..26689a3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/hsl-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/hsl-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-string-benchmark b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-string-benchmark
index e8babf9..e8babf9 100755
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-string-benchmark
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-string-benchmark
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-test.js
index c05e290..c05e290 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-transform-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-transform-test.js
index 5320740..5320740 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/interpolate-transform-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/interpolate-transform-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/lab-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/lab-test.js
index bb4622a..bb4622a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/lab-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/lab-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/number-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/number-test.js
index 61c3477..61c3477 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/number-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/number-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/object-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/object-test.js
index f9539a6..f9539a6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/object-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/object-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/rgb-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/rgb-test.js
index 89f9959..89f9959 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/rgb-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/rgb-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/round-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/round-test.js
index 98fad58..98fad58 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/round-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/round-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/string-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/string-test.js
index 37aeade..37aeade 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/interpolate/string-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/interpolate/string-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/chord-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/chord-test.js
index f2627bd..f2627bd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/chord-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/chord-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/cluster-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/cluster-test.js
index caa2747..caa2747 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/cluster-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/cluster-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/force-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/force-test.js
index a4b5870..a4b5870 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/force-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/force-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/hierarchy-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/hierarchy-test.js
index 274dcaa..274dcaa 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/hierarchy-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/hierarchy-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/histogram-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/histogram-test.js
index 004bcdc..004bcdc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/histogram-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/histogram-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/pack-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pack-test.js
index 5c39ea5..5c39ea5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/pack-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pack-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/partition-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/partition-test.js
index e7aba25..e7aba25 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/partition-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/partition-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/pie-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pie-test.js
index f4fb2f1..f4fb2f1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/pie-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/pie-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/tree-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/tree-test.js
index a691788..a691788 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/tree-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/tree-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/treemap-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/treemap-test.js
index a25b37f..a25b37f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/layout/treemap-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/layout/treemap-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/load.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/load.js
index 43ea239..43ea239 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/load.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/load.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-caes-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-caes-test.js
index 99abf07..99abf07 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-caes-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-caes-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-fifi-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-fifi-test.js
index 8b03992..8b03992 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-fifi-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-fifi-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-ptbr-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-ptbr-test.js
index 86c081c..86c081c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-ptbr-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-ptbr-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-test.js
index 7eb3b1f..7eb3b1f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/locale/locale-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/locale/locale-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/random-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/random-test.js
index 1e00ec9..1e00ec9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/random-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/random-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-matrix-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-matrix-test.html
index 7a5eec3..7a5eec3 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-matrix-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-matrix-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-test.html
index 6211680..6211680 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-null-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-null-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-origin-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-origin-test.html
index 5a006f5..5a006f5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-origin-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-origin-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-test.html
index 49fb571..49fb571 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-rotate-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-rotate-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-test.html b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-test.html
index 7e313d7..7e313d7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/math/transform-test.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/math/transform-test.html
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/category-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/category-test.js
index 76e8238..76e8238 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/category-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/category-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/identity-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/identity-test.js
index 6ad815e..6ad815e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/identity-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/identity-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/linear-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/linear-test.js
index 2f6abe8..2f6abe8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/linear-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/linear-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/log-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/log-test.js
index 5e372ae..5e372ae 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/log-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/log-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/ordinal-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/ordinal-test.js
index 74564b6..74564b6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/ordinal-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/ordinal-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/pow-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/pow-test.js
index 74c252a..74c252a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/pow-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/pow-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantile-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantile-test.js
index 242e90b..242e90b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantile-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantile-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantize-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantize-test.js
index a3f58c2..a3f58c2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/quantize-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/quantize-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/sqrt-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/sqrt-test.js
index 96e23fc..96e23fc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/sqrt-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/sqrt-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/threshold-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/threshold-test.js
index 798b83a..798b83a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/scale/threshold-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/scale/threshold-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/append-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/append-test.js
index e92aa98..e92aa98 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/append-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/append-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/attr-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/attr-test.js
index c69110e..c69110e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/attr-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/attr-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/call-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/call-test.js
index 9419146..9419146 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/call-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/call-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/classed-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/classed-test.js
index 002d426..002d426 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/classed-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/classed-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-benchmark.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-benchmark.js
index 2331fbe..2331fbe 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-benchmark.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-benchmark.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-test.js
index c607ed6..c607ed6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/data-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/data-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/datum-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/datum-test.js
index 457c8e5..457c8e5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/datum-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/datum-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/each-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/each-test.js
index e1d1308..e1d1308 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/each-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/each-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/empty-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/empty-test.js
index 70cda77..70cda77 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/empty-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/empty-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/enter-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/enter-test.js
index da0e47c..da0e47c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/enter-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/enter-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/filter-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/filter-test.js
index e1fdbcd..e1fdbcd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/filter-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/filter-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/html-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/html-test.js
index e737d19..e737d19 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/html-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/html-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/insert-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/insert-test.js
index fb9957a..fb9957a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/insert-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/insert-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/interrupt-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/interrupt-test.js
index a1e6851..a1e6851 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/interrupt-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/interrupt-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/node-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/node-test.js
index ae6005d..ae6005d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/node-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/node-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/on-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/on-test.js
index a4d4f8f..a4d4f8f 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/on-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/on-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/order-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/order-test.js
index 1576d68..1576d68 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/order-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/order-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/property-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/property-test.js
index 075f3bd..075f3bd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/property-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/property-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/remove-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/remove-test.js
index 907bcb4..907bcb4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/remove-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/remove-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/select-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/select-test.js
index 60a6cd1..60a6cd1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/select-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/select-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selectAll-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selectAll-test.js
index decbc66..decbc66 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selectAll-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selectAll-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-select-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-select-test.js
index 082fb72..082fb72 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-select-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-select-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-selectAll-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-selectAll-test.js
index 1506b5c..1506b5c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-selectAll-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-selectAll-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-test.js
index 313ad4a..313ad4a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/selection-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/selection-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/size-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/size-test.js
index f9c86cb..f9c86cb 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/size-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/size-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/sort-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/sort-test.js
index 73c7d9b..73c7d9b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/sort-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/sort-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/style-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/style-test.js
index 544f177..544f177 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/style-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/style-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/text-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/text-test.js
index 13f994a..13f994a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/selection/text-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/selection/text-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/start.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/start.js
index a8d48a0..a8d48a0 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/start.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/start.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/arc-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/arc-test.js
index 7858eb2..7858eb2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/arc-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/arc-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-radial-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-radial-test.js
index d837217..d837217 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-radial-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-radial-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-test.js
index 289815c..289815c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/area-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/area-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/axis-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/axis-test.js
index c859868..c859868 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/axis-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/axis-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/brush-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/brush-test.js
index c64abfe..c64abfe 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/brush-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/brush-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/diagonal-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/diagonal-test.js
index 4a7ae51..4a7ae51 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/diagonal-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/diagonal-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-radial-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-radial-test.js
index 6d7e358..6d7e358 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-radial-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-radial-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-test.js
index 010189e..010189e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/line-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/line-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/symbol-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/symbol-test.js
index 9477a9a..9477a9a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/svg/symbol-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/svg/symbol-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/day-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js
index c408b5a..c408b5a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/day-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/dayOfYear-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js
index 91866cd..91866cd 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/dayOfYear-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/days-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js
index e20dc36..e20dc36 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/days-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-iso-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js
index fbc0f91..fbc0f91 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-iso-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js
index 5599b89..5599b89 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-utc-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js
index c8bfa54..c8bfa54 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/format-utc-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/hour-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js
index 757ae22..757ae22 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/hour-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/hours-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js
index c0a6a76..c0a6a76 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/hours-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/minute-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js
index e3a3c3c..e3a3c3c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/minute-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/minutes-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js
index 1d176bf..1d176bf 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/minutes-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/month-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js
index 10f349d..10f349d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/month-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/months-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js
index 82bca86..82bca86 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/months-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/scale-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js
index aeb258b..aeb258b 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/scale-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/second-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js
index e740d3a..e740d3a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/second-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/seconds-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js
index e8c6ab4..e8c6ab4 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/seconds-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/time.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/time.js
index 32bca64..32bca64 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/time.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/time.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/week-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js
index f0db1f7..f0db1f7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/week-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/weeks-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js
index 7a110a8..7a110a8 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/weeks-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/year-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js
index 66230f6..66230f6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/year-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/time/years-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js
index 16f6141..16f6141 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/time/years-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attr.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attr.js
index 627f917..627f917 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attr.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attr.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attrTween.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attrTween.js
index 5bd4b33..5bd4b33 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-attrTween.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-attrTween.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-call.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-call.js
index 816d26e..816d26e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-call.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-call.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-delay.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-delay.js
index e721c36..e721c36 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-delay.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-delay.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-duration.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-duration.js
index 34fc2dc..34fc2dc 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-duration.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-duration.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-each.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-each.js
index 0b65206..0b65206 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-each.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-each.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-filter.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-filter.js
index 9667d5c..9667d5c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-filter.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-filter.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-id.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-id.js
index 858a230..858a230 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-id.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-id.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-node.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-node.js
index 54d13d9..54d13d9 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-node.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-node.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-remove.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-remove.js
index fcf98c5..fcf98c5 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-remove.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-remove.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-select.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-select.js
index cf8b148..cf8b148 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-select.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-select.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-selectAll.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-selectAll.js
index 2450c56..2450c56 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-selectAll.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-selectAll.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-size.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-size.js
index 60f6615..60f6615 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-size.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-size.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-style.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-style.js
index 5ca1a9c..5ca1a9c 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-style.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-style.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-styleTween.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-styleTween.js
index 37bb798..37bb798 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-styleTween.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-styleTween.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-text.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-text.js
index b755bf6..b755bf6 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-text.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-text.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-time.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-time.js
index f982a80..f982a80 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-time.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-time.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-transition.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-transition.js
index 6726780..6726780 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-transition.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-transition.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-tween.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-tween.js
index f21a8a7..f21a8a7 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test-tween.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test-tween.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test.js
index e4c41d2..e4c41d2 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/transition/transition-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/transition/transition-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/html-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/html-test.js
index aaf2f3a..aaf2f3a 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/html-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/html-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/json-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/json-test.js
index d6ba779..d6ba779 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/json-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/json-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/text-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/text-test.js
index dbe123d..dbe123d 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/text-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/text-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xhr-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xhr-test.js
index b24722e..b24722e 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xhr-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xhr-test.js
diff --git a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xml-test.js b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xml-test.js
index 2b118f1..2b118f1 100644
--- a/web/nms.gathering.org/old/speedometer/d3-master/test/xhr/xml-test.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/d3-master/test/xhr/xml-test.js
diff --git a/web/nms.gathering.org/old/speedometer/default.css b/examples/historical/web/nms.gathering.org/speedometer/default.css
index eddcb95..eddcb95 100644
--- a/web/nms.gathering.org/old/speedometer/default.css
+++ b/examples/historical/web/nms.gathering.org/speedometer/default.css
diff --git a/web/nms.gathering.org/old/speedometer/index.html b/examples/historical/web/nms.gathering.org/speedometer/index.html
index ba504cf..ba504cf 100644
--- a/web/nms.gathering.org/old/speedometer/index.html
+++ b/examples/historical/web/nms.gathering.org/speedometer/index.html
diff --git a/web/nms.gathering.org/old/speedometer/nms-tmp.js b/examples/historical/web/nms.gathering.org/speedometer/nms-tmp.js
index b1a9859..b1a9859 100644
--- a/web/nms.gathering.org/old/speedometer/nms-tmp.js
+++ b/examples/historical/web/nms.gathering.org/speedometer/nms-tmp.js
diff --git a/web/nms.gathering.org/old/sshow.pl b/examples/historical/web/nms.gathering.org/sshow.pl
index 64663a2..64663a2 100755
--- a/web/nms.gathering.org/old/sshow.pl
+++ b/examples/historical/web/nms.gathering.org/sshow.pl
diff --git a/web/nms.gathering.org/old/stempmap.pl b/examples/historical/web/nms.gathering.org/stempmap.pl
index ccd44fd..ccd44fd 100755
--- a/web/nms.gathering.org/old/stempmap.pl
+++ b/examples/historical/web/nms.gathering.org/stempmap.pl
diff --git a/web/nms.gathering.org/old/stromkart.pl b/examples/historical/web/nms.gathering.org/stromkart.pl
index c0e4a3d..c0e4a3d 100755
--- a/web/nms.gathering.org/old/stromkart.pl
+++ b/examples/historical/web/nms.gathering.org/stromkart.pl
diff --git a/web/nms.gathering.org/old/switches-json.pl b/examples/historical/web/nms.gathering.org/switches-json.pl
index 74f4e5f..74f4e5f 100755
--- a/web/nms.gathering.org/old/switches-json.pl
+++ b/examples/historical/web/nms.gathering.org/switches-json.pl
diff --git a/web/nms.gathering.org/old/uplinkkart-text.pl b/examples/historical/web/nms.gathering.org/uplinkkart-text.pl
index c4b31a9..c4b31a9 100755
--- a/web/nms.gathering.org/old/uplinkkart-text.pl
+++ b/examples/historical/web/nms.gathering.org/uplinkkart-text.pl
diff --git a/web/nms.gathering.org/old/uplinkkart.pl b/examples/historical/web/nms.gathering.org/uplinkkart.pl
index 052fe9c..052fe9c 100755
--- a/web/nms.gathering.org/old/uplinkkart.pl
+++ b/examples/historical/web/nms.gathering.org/uplinkkart.pl
diff --git a/web/nms.gathering.org/old/uplinktrafikkart.pl b/examples/historical/web/nms.gathering.org/uplinktrafikkart.pl
index 97000cf..97000cf 100755
--- a/web/nms.gathering.org/old/uplinktrafikkart.pl
+++ b/examples/historical/web/nms.gathering.org/uplinktrafikkart.pl
diff --git a/web/stats.gathering.org/flute-smack.wav b/examples/historical/web/stats.gathering.org/flute-smack.wav
index 36c9f31..36c9f31 100644
--- a/web/stats.gathering.org/flute-smack.wav
+++ b/examples/historical/web/stats.gathering.org/flute-smack.wav
Binary files differ
diff --git a/web/stats.gathering.org/tg14_logo_rgb_normal.png b/examples/historical/web/stats.gathering.org/tg14_logo_rgb_normal.png
index cc6bca6..cc6bca6 100644
--- a/web/stats.gathering.org/tg14_logo_rgb_normal.png
+++ b/examples/historical/web/stats.gathering.org/tg14_logo_rgb_normal.png
Binary files differ
diff --git a/web/stats.gathering.org/weathermap-centered.html b/examples/historical/web/stats.gathering.org/weathermap-centered.html
index 5cc3eee..5cc3eee 100644
--- a/web/stats.gathering.org/weathermap-centered.html
+++ b/examples/historical/web/stats.gathering.org/weathermap-centered.html
diff --git a/web/stats.gathering.org/weathermap-erlendo.html b/examples/historical/web/stats.gathering.org/weathermap-erlendo.html
index 1883341..1883341 100644
--- a/web/stats.gathering.org/weathermap-erlendo.html
+++ b/examples/historical/web/stats.gathering.org/weathermap-erlendo.html
diff --git a/web/stats.gathering.org/weathermap.html b/examples/historical/web/stats.gathering.org/weathermap.html
index 1a394d2..1a394d2 100644
--- a/web/stats.gathering.org/weathermap.html
+++ b/examples/historical/web/stats.gathering.org/weathermap.html
diff --git a/web/stats.gathering.org/weathermap.png b/examples/historical/web/stats.gathering.org/weathermap.png
index 123883f..123883f 100644
--- a/web/stats.gathering.org/weathermap.png
+++ b/examples/historical/web/stats.gathering.org/weathermap.png
Binary files differ
diff --git a/web/etc/apache2/munin.tg15.gathering.org.conf b/examples/tg15/etc/apache2/munin.tg15.gathering.org.conf
index aaa3848..aaa3848 100644
--- a/web/etc/apache2/munin.tg15.gathering.org.conf
+++ b/examples/tg15/etc/apache2/munin.tg15.gathering.org.conf
diff --git a/web/etc/apache2/stats.tg15.gathering.org.conf b/examples/tg15/etc/apache2/stats.tg15.gathering.org.conf
index 2dc99a4..2dc99a4 100644
--- a/web/etc/apache2/stats.tg15.gathering.org.conf
+++ b/examples/tg15/etc/apache2/stats.tg15.gathering.org.conf
diff --git a/web/etc/apache2/stream.tg15.gathering.org.conf b/examples/tg15/etc/apache2/stream.tg15.gathering.org.conf
index 1f92f47..1f92f47 100644
--- a/web/etc/apache2/stream.tg15.gathering.org.conf
+++ b/examples/tg15/etc/apache2/stream.tg15.gathering.org.conf
diff --git a/web/etc/cron/einstein.cron b/examples/tg15/etc/crontab/einstein.cron
index 616867f..616867f 100644
--- a/web/etc/cron/einstein.cron
+++ b/examples/tg15/etc/crontab/einstein.cron
diff --git a/include/nms/snmp.pm b/include/nms/snmp.pm
index b1354ae..26ada44 100644
--- a/include/nms/snmp.pm
+++ b/include/nms/snmp.pm
@@ -15,7 +15,9 @@ BEGIN {
# cd /usr/share/mibs/site
# wget -O- ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz | sudo tar --strip-components=3 -zxvvf -
SNMP::initMib();
- SNMP::addMibDirs("../mibs");
+ SNMP::addMibDirs("/srv/tgmanage/mibs/StandardMibs");
+ SNMP::addMibDirs("/srv/tgmanage/mibs/JuniperMibs");
+
SNMP::loadModules('SNMPv2-MIB');
SNMP::loadModules('ENTITY-MIB');
SNMP::loadModules('IF-MIB');
diff --git a/include/nms/util.pm b/include/nms/util.pm
index 79598d7..64637b8 100644
--- a/include/nms/util.pm
+++ b/include/nms/util.pm
@@ -15,10 +15,9 @@ sub parse_switch {
'sysname' => "$switch",
'subnet4' => "$subnet4",
'subnet6' => "$subnet6",
- 'mgtmt4' => "$mgtmt4",
- 'mgtmt6' => "$mgtmt6",
- 'lolid' => "$lolid",
- 'ip' => "$mgtmt4",
+ 'mgmt_v4_addr' => "$mgtmt4",
+ 'mgmt_v6_addr' => "$mgtmt6",
+ 'traffic_vlan' => "$lolid",
'distro' => "$distro"
);
%{$ret{'placement'}} = guess_placement($switch);
@@ -91,7 +90,7 @@ sub guess_placement {
$yy -= 20 if ($e >= 79 and $s == 1);
$yy -= 30 if ($e >= 81 and $s == 1);
- } elsif ($name =~ /^sw(\d+)-creativia$/) {
+ } elsif ($name =~ /^creativia(\d+)$/) {
my ($s) = ($1);
$src = "creativia";
$x = 1535;
@@ -114,7 +113,13 @@ sub guess_placement {
$y = int(759 + 20.5 * $s);
$xx = $x + 65;
$yy = $y + 14;
-
+ } elsif ($name =~ /^distro(\d)/) {
+ my $d = ($1);
+ $src = "distro";
+ $x = 292 + $d * 165;
+ $y = 415;
+ $xx = $x + 130;
+ $yy = $y + 20;
} else {
# Fallback to have _some_ position
$src = "random";
diff --git a/include/nms/web.pm b/include/nms/web.pm
index 2a5e132..889e774 100755
--- a/include/nms/web.pm
+++ b/include/nms/web.pm
@@ -57,14 +57,19 @@ sub db_safe_quote {
# endpoints it is better to return no data than old data (e.g.: ping).
sub setwhen {
$now = "now()";
- my $window = '15m';
- if (@_ == 1) {
+ my $window = '8m';
+ my $offset = '0s';
+ if (@_ > 0) {
$window = $_[0];
}
+ if (@_ > 1) {
+ $offset = $_[1];
+ }
if (defined($get_params{'now'})) {
$now = db_safe_quote('now') . "::timestamp ";
$cc{'max-age'} = "3600";
}
+ $now = "(" . $now . " - '" . $offset . "'::interval)";
$when = " time > " . $now . " - '".$window."'::interval and time < " . $now . " ";
}
@@ -81,7 +86,9 @@ sub finalize_output {
printcc;
print "Etag: $hash\n";
- print "Content-Type: text/jso; charset=utf-8\n\n";
+ print "Access-Control-Allow-Origin: *\n";
+ print "Access-Control-Allow-Methods: HEAD, GET\n";
+ print "Content-Type: text/json; charset=utf-8\n\n";
print JSON::XS::encode_json(\%json);
print "\n";
}
diff --git a/nms/.bashrc b/nms/.bashrc
new file mode 100644
index 0000000..06072e3
--- /dev/null
+++ b/nms/.bashrc
@@ -0,0 +1,16 @@
+NAME='NMS Docker'
+
+
+ln -s /srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf /etc/apache2/sites-enabled/
+ln -s /srv/tgmanage/nms/config.pm /srv/tgmanage/include/
+echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/.htpasswd
+
+/etc/init.d/apache2 restart
+echo "go here to look at nms: http://172.17.0.2:8080/"
+
+# Aliases
+alias h="history"
+alias l="ls -lAhoF --color --show-control-chars"
+alias ll="ls -lash --color --show-control-chars"
+alias cd..="cd .."
+
diff --git a/nms/Dockerfile.in b/nms/Dockerfile.in
index b65168d..9f0dfd6 100644
--- a/nms/Dockerfile.in
+++ b/nms/Dockerfile.in
@@ -93,7 +93,8 @@ RUN a2enmod cgi
RUN sed -i 's/Listen 80/Listen 8080/g' /etc/apache2/ports.conf
RUN ln -s /srv/tgmanage/web/etc/apache2/nms.tg16.gathering.org.conf /etc/apache2/sites-enabled/
#(no, not for production, it's just demo:demo during development)
-RUN echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/.htpasswd
+RUN echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/htpasswd-read
+RUN echo 'demo:$apr1$IKrQYF6x$0zmRciLR7Clc2tEEosyHV.' > /srv/tgmanage/web/htpasswd-write
RUN systemctl enable apache2
# Varnish shait
diff --git a/nms/README.md b/nms/README.md
index 4d310cb..9a23e8d 100644
--- a/nms/README.md
+++ b/nms/README.md
@@ -2,21 +2,31 @@
## Installation
- fetch data from tg server: `scp ${USER}@wat.gathering.org:/root/nms-2015.sql.gz .`
+- Rename the nms dump so we can use it later: `mv nms-2015.sql.gz nms-dump.sql.gz`
-- Do the Debian install(or whatever OS you're on.): https://docs.docker.com/engine/installation/linux/debian/ And make sure that your user is in the docker group, so that you can run docker without sudo.
+- Do the Debian install(or whatever OS you're on.):
+https://docs.docker.com/engine/installation/linux/debian/
+And make sure that your user is in the docker group, so that you can run docker without sudo.
- Clone repository: `git clone git@github.com:tech-server/tgmanage.git`
- run `./makedockerfiles.sh`, which creates the docker image files, and builds
them.
-- Start database node: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db`
-- Start front end node: ` docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front `
-- Find IP's: `docker inspect front`, `docker instpect db`
-- Start a shell in a container: `docker exec front /bin/bash`
-- Open localhost:PORT in browser to start testing.
+- Start database node:
+`docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=db nms-db`
+- Start front end node:
+-- with cgroup: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged --rm -ti --name=front --link=db:db nms-front`
+-- getting to prompt(without cgroup):
+`docker run -v "/home/kiro/repos/tgmanage:/srv/tgmanage" -v "/home/kiro/repos/tgmanage/nms/.bashrc:/root/.bashrc" -w "/srv/tgmanage/web/nms.gathering.org" \
+-rm=true -ti --name=front --privileged nms-front /bin/bash`
+- Find IP's:
+`docker inspect nms-db | grep "IPAddress\":"`
+`docker inspect nms-front | grep "IPAddress\":"`
-## TODO
-- finish the installation guide above.
+- Open the nms-front ip in the web browser.
+http://172.17.0.2:8080/
+
+- Note: `docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --rm -ti`
diff --git a/nms/config.pm b/nms/config.pm
index faaeaa1..db9775f 100755
--- a/nms/config.pm
+++ b/nms/config.pm
@@ -6,9 +6,9 @@ package nms::config;
# DB
our $db_name = "nms";
-our $db_host = "db";
+our $db_host = "nms-dev-db.gathering.org";
our $db_username = "nms";
-our $db_password = "foobar";
+our $db_password = "nms-lol";
# NMS hash used for public NMS obfuscation of interface names
our $nms_hash = "<removed>";
diff --git a/nms/nms-dump.sql b/nms/nms-dump.sql
index bbe141d..25ba3ac 100644
--- a/nms/nms-dump.sql
+++ b/nms/nms-dump.sql
@@ -44,17 +44,18 @@ SET default_tablespace = '';
SET default_with_oids = false;
--
--- Name: dhcp; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
+-- Name: dhcp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE dhcp (
switch integer,
- "time" timestamp without time zone,
- mac macaddr
+ "time" timestamp with time zone,
+ mac macaddr,
+ ip inet
);
-ALTER TABLE dhcp OWNER TO postgres;
+ALTER TABLE dhcp OWNER TO nms;
--
-- Name: linknet_ping; Type: TABLE; Schema: public; Owner: nms; Tablespace:
@@ -77,9 +78,11 @@ ALTER TABLE linknet_ping OWNER TO nms;
CREATE TABLE linknets (
linknet integer NOT NULL,
switch1 integer NOT NULL,
- addr1 inet NOT NULL,
+ addr1 inet,
switch2 integer NOT NULL,
- addr2 inet NOT NULL
+ addr2 inet,
+ port1 character varying(10),
+ port2 character varying(10)
);
@@ -162,7 +165,7 @@ CREATE TABLE seen_mac (
ALTER TABLE seen_mac OWNER TO nms;
--
--- Name: snmp; Type: TABLE; Schema: public; Owner: postgres; Tablespace:
+-- Name: snmp; Type: TABLE; Schema: public; Owner: nms; Tablespace:
--
CREATE TABLE snmp (
@@ -176,7 +179,7 @@ CREATE TABLE snmp (
ALTER TABLE snmp OWNER TO nms;
--
--- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres
+-- Name: snmp_id_seq; Type: SEQUENCE; Schema: public; Owner: nms
--
CREATE SEQUENCE snmp_id_seq
@@ -190,7 +193,7 @@ CREATE SEQUENCE snmp_id_seq
ALTER TABLE snmp_id_seq OWNER TO nms;
--
--- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres
+-- Name: snmp_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: nms
--
ALTER SEQUENCE snmp_id_seq OWNED BY snmp.id;
@@ -252,19 +255,26 @@ ALTER TABLE switch_temp OWNER TO nms;
CREATE TABLE switches (
switch integer DEFAULT nextval(('"switches_switch_seq"'::text)::regclass) NOT NULL,
- ip inet,
+ mgmt_v4_addr inet,
sysname character varying NOT NULL,
switchtype character varying DEFAULT 'ex2200'::character varying NOT NULL,
last_updated timestamp with time zone,
locked boolean DEFAULT false NOT NULL,
poll_frequency interval DEFAULT '00:01:00'::interval NOT NULL,
- community character varying DEFAULT 'public'::character varying NOT NULL,
+ community character varying DEFAULT 'FullPuppTilNMS'::character varying NOT NULL,
lldp_chassis_id character varying,
- secondary_ip inet,
+ mgmt_v6_addr inet,
placement box,
subnet4 cidr,
subnet6 cidr,
- distro character varying
+ distro_name character varying,
+ distro_phy_port character varying(100),
+ mgmt_v6_gw inet,
+ mgmt_v4_gw inet,
+ mgmt_vlan integer DEFAULT 666,
+ traffic_vlan integer,
+ last_config_fetch timestamp with time zone,
+ current_mac macaddr
);
@@ -285,6 +295,17 @@ CREATE SEQUENCE switches_switch_seq
ALTER TABLE switches_switch_seq OWNER TO nms;
--
+-- Name: test_table; Type: TABLE; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE TABLE test_table (
+ test timestamp with time zone
+);
+
+
+ALTER TABLE test_table OWNER TO nms;
+
+--
-- Name: linknet; Type: DEFAULT; Schema: public; Owner: nms
--
@@ -292,7 +313,7 @@ ALTER TABLE ONLY linknets ALTER COLUMN linknet SET DEFAULT nextval('linknets_lin
--
--- Name: id; Type: DEFAULT; Schema: public; Owner: postgres
+-- Name: id; Type: DEFAULT; Schema: public; Owner: nms
--
ALTER TABLE ONLY snmp ALTER COLUMN id SET DEFAULT nextval('snmp_id_seq'::regclass);
@@ -354,14 +375,28 @@ ALTER TABLE ONLY switches
--
--- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
+-- Name: dhcp_ip; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_ip ON dhcp USING btree (ip);
+
+
+--
+-- Name: dhcp_mac; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX dhcp_mac ON dhcp USING btree (mac);
+
+
+--
+-- Name: dhcp_switch; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX dhcp_switch ON dhcp USING btree (switch);
--
--- Name: dhcp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
+-- Name: dhcp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX dhcp_time ON dhcp USING btree ("time");
@@ -375,6 +410,13 @@ CREATE INDEX ping_index ON ping USING btree ("time");
--
+-- Name: ping_secondary_index; Type: INDEX; Schema: public; Owner: nms; Tablespace:
+--
+
+CREATE INDEX ping_secondary_index ON ping_secondary_ip USING btree ("time");
+
+
+--
-- Name: polls_ifname; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
@@ -417,21 +459,21 @@ CREATE INDEX seen_mac_seen ON seen_mac USING btree (seen);
--
--- Name: snmp_time; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
+-- Name: snmp_time; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time ON snmp USING btree ("time");
--
--- Name: snmp_time15; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
+-- Name: snmp_time15; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time15 ON snmp USING btree (id, switch);
--
--- Name: snmp_time6; Type: INDEX; Schema: public; Owner: postgres; Tablespace:
+-- Name: snmp_time6; Type: INDEX; Schema: public; Owner: nms; Tablespace:
--
CREATE INDEX snmp_time6 ON snmp USING btree ("time" DESC, switch);
@@ -466,7 +508,7 @@ CREATE INDEX updated_index3 ON ping_secondary_ip USING btree ("time");
--
--- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+-- Name: dhcp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
--
ALTER TABLE ONLY dhcp
@@ -474,7 +516,7 @@ ALTER TABLE ONLY dhcp
--
--- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres
+-- Name: snmp_switch_fkey; Type: FK CONSTRAINT; Schema: public; Owner: nms
--
ALTER TABLE ONLY snmp
@@ -513,6 +555,67 @@ REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;
+GRANT ALL ON SCHEMA public TO fap;
+
+
+--
+-- Name: dhcp; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE dhcp FROM PUBLIC;
+REVOKE ALL ON TABLE dhcp FROM nms;
+GRANT ALL ON TABLE dhcp TO nms;
+GRANT ALL ON TABLE dhcp TO fap;
+
+
+--
+-- Name: linknet_ping; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE linknet_ping FROM PUBLIC;
+REVOKE ALL ON TABLE linknet_ping FROM nms;
+GRANT ALL ON TABLE linknet_ping TO nms;
+GRANT ALL ON TABLE linknet_ping TO fap;
+
+
+--
+-- Name: linknets; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE linknets FROM PUBLIC;
+REVOKE ALL ON TABLE linknets FROM nms;
+GRANT ALL ON TABLE linknets TO nms;
+GRANT ALL ON TABLE linknets TO fap;
+
+
+--
+-- Name: ping; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE ping FROM PUBLIC;
+REVOKE ALL ON TABLE ping FROM nms;
+GRANT ALL ON TABLE ping TO nms;
+GRANT ALL ON TABLE ping TO fap;
+
+
+--
+-- Name: ping_secondary_ip; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE ping_secondary_ip FROM PUBLIC;
+REVOKE ALL ON TABLE ping_secondary_ip FROM nms;
+GRANT ALL ON TABLE ping_secondary_ip TO nms;
+GRANT ALL ON TABLE ping_secondary_ip TO fap;
+
+
+--
+-- Name: polls; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE polls FROM PUBLIC;
+REVOKE ALL ON TABLE polls FROM nms;
+GRANT ALL ON TABLE polls TO nms;
+GRANT ALL ON TABLE polls TO fap;
--
@@ -522,26 +625,48 @@ GRANT ALL ON SCHEMA public TO PUBLIC;
REVOKE ALL ON TABLE seen_mac FROM PUBLIC;
REVOKE ALL ON TABLE seen_mac FROM nms;
GRANT ALL ON TABLE seen_mac TO nms;
+GRANT ALL ON TABLE seen_mac TO fap;
--
--- Name: snmp; Type: ACL; Schema: public; Owner: postgres
+-- Name: snmp; Type: ACL; Schema: public; Owner: nms
--
REVOKE ALL ON TABLE snmp FROM PUBLIC;
-REVOKE ALL ON TABLE snmp FROM postgres;
-GRANT ALL ON TABLE snmp TO postgres;
+REVOKE ALL ON TABLE snmp FROM nms;
GRANT ALL ON TABLE snmp TO nms;
+GRANT ALL ON TABLE snmp TO postgres;
+GRANT ALL ON TABLE snmp TO fap;
--
--- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: postgres
+-- Name: snmp_id_seq; Type: ACL; Schema: public; Owner: nms
--
REVOKE ALL ON SEQUENCE snmp_id_seq FROM PUBLIC;
-REVOKE ALL ON SEQUENCE snmp_id_seq FROM postgres;
-GRANT ALL ON SEQUENCE snmp_id_seq TO postgres;
+REVOKE ALL ON SEQUENCE snmp_id_seq FROM nms;
GRANT ALL ON SEQUENCE snmp_id_seq TO nms;
+GRANT ALL ON SEQUENCE snmp_id_seq TO postgres;
+
+
+--
+-- Name: switch_comments; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE switch_comments FROM PUBLIC;
+REVOKE ALL ON TABLE switch_comments FROM nms;
+GRANT ALL ON TABLE switch_comments TO nms;
+GRANT ALL ON TABLE switch_comments TO fap;
+
+
+--
+-- Name: switch_temp; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE switch_temp FROM PUBLIC;
+REVOKE ALL ON TABLE switch_temp FROM nms;
+GRANT ALL ON TABLE switch_temp TO nms;
+GRANT ALL ON TABLE switch_temp TO fap;
--
@@ -551,6 +676,17 @@ GRANT ALL ON SEQUENCE snmp_id_seq TO nms;
REVOKE ALL ON TABLE switches FROM PUBLIC;
REVOKE ALL ON TABLE switches FROM nms;
GRANT ALL ON TABLE switches TO nms;
+GRANT ALL ON TABLE switches TO fap;
+
+
+--
+-- Name: test_table; Type: ACL; Schema: public; Owner: nms
+--
+
+REVOKE ALL ON TABLE test_table FROM PUBLIC;
+REVOKE ALL ON TABLE test_table FROM nms;
+GRANT ALL ON TABLE test_table TO nms;
+GRANT ALL ON TABLE test_table TO fap;
--
diff --git a/nms/note b/nms/note
deleted file mode 100644
index 58adfa6..0000000
--- a/nms/note
+++ /dev/null
@@ -1 +0,0 @@
-# docker run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --rm -ti
diff --git a/nms/pg_hba.conf b/nms/pg_hba.conf
index d026e1a..9b23a31 100644
--- a/nms/pg_hba.conf
+++ b/nms/pg_hba.conf
@@ -95,6 +95,22 @@ host all all ::1/128 md5
host nms nms 172.17.0.0/16 md5
+# NOC-nett
+host nms nms 185.110.150.0/25 md5
+host nms nms 2a06:5841:150a::0/64 md5
+
+host nms fap 185.110.150.0/25 md5
+host nms fap 2a06:5841:150a::0/64 md5
+
+# Server-nett
+host nms nms 185.110.148.0/26 md5
+host nms nms 2a06:5841:1337::0/64 md5
+
+host nms fap 185.110.148.0/26 md5
+host nms fap 2a06:5841:1337::0/64 md5
+# r2-d2 med mer
+host nms nms 185.110.149.0/26 md5
+
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
diff --git a/nms/postgresql.conf b/nms/postgresql.conf
index 23241a7..dee1129 100644
--- a/nms/postgresql.conf
+++ b/nms/postgresql.conf
@@ -113,19 +113,19 @@ ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key' # (change requires rest
# - Memory -
-shared_buffers = 2048MB # min 128kB
+shared_buffers = 76GB # min 128kB
# (change requires restart)
#huge_pages = try # on, off, or try
# (change requires restart)
-#temp_buffers = 8MB # min 800kB
+temp_buffers = 32MB # min 800kB
#max_prepared_transactions = 0 # zero disables the feature
# (change requires restart)
# Note: Increasing max_prepared_transactions costs ~600 bytes of shared memory
# per transaction slot, plus lock space (see max_locks_per_transaction).
# It is not advisable to set max_prepared_transactions nonzero unless you
# actively intend to use prepared transactions.
-#work_mem = 4MB # min 64kB
-#maintenance_work_mem = 64MB # min 1MB
+work_mem = 16MB # min 64kB
+maintenance_work_mem = 256MB # min 1MB
#autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
#max_stack_depth = 2MB # min 100kB
dynamic_shared_memory_type = posix # the default is the first option
@@ -173,7 +173,7 @@ dynamic_shared_memory_type = posix # the default is the first option
# - Settings -
-#wal_level = minimal # minimal, archive, hot_standby, or logical
+wal_level = archive # minimal, archive, hot_standby, or logical
# (change requires restart)
#fsync = on # turns forced synchronization on or off
#synchronous_commit = on # synchronization level;
diff --git a/tools/generate-dnsrr.pl b/tools/generate-dnsrr.pl
index ad9230c..99ff395 100755
--- a/tools/generate-dnsrr.pl
+++ b/tools/generate-dnsrr.pl
@@ -19,6 +19,9 @@
# Command-syntax to send this to nsupdate, running it on the DNS server:
# cat file.txt | tools/generate-dnsrr.pl --dom foo -ns | ssh $dnsserver "nsupdate -k /etc/bind/Kdhcp_updater.+157+XXXXX"
#
+# Generate DNS for linknets:
+# cat /tmp/linknets.txt | perl -wple 's,;, ,g' | perl tools/make-linknet-hosts.pl | tools/generate-dnsrr.pl --domain tgXX.gathering.org -ns -rev | ssh $dnsserver "nsupdate -k /etc/bind/Kdhcp_updater.XXXXX"
+#
# Format of input:
# hostname ipv4-adress ipv6-address
# If any of ipv4-address or ipv6-address are NOT set for the host, specify "nope"
@@ -99,7 +102,6 @@ sub print_ptr{
unless ( $ipv4 eq "nope" ) {
my $v4 = new Net::IP($ipv4);
- print "prereq nxdomain " . $v4->reverse_ip() . "\n" unless $delete;
print "update add " . $v4->reverse_ip() . " 3600 IN PTR " . $hostname . $domain .".\n" unless $delete;
print "update delete " . $v4->reverse_ip() . " IN PTR\n" if $delete;
print "send\n";
@@ -109,7 +111,6 @@ sub print_ptr{
if (( not ($ipv6 eq "nope") ) && ( $ipv6 )) {
my $v6 = new Net::IP($ipv6);
- print "prereq nxdomain " . $v6->reverse_ip() . "\n" unless $delete;
print "update add " . $v6->reverse_ip() . " 3600 IN PTR " . $hostname . $domain . ".\n" unless $delete;
print "update delete " . $v6->reverse_ip() . " IN PTR\n" if $delete;
print "send\n";
diff --git a/tools/generate-rowdns.pl b/tools/generate-rowdns.pl
index 1cc2b8d..a7b9aef 100755
--- a/tools/generate-rowdns.pl
+++ b/tools/generate-rowdns.pl
@@ -5,6 +5,10 @@ BEGIN {
require "include/config.pm";
}
+use JSON -support_by_pp;
+use LWP 5.64;
+use LWP::UserAgent;
+use Net::SSL; # needed, else LWP goes into emo-mode
use Net::IP;
use NetAddr::IP;
use Getopt::Long;
@@ -18,75 +22,81 @@ if (@ARGV > 0) {
}
# Use this to generate nsupdate for all edge switches
-# Expects joined input from switches.txt and patchlist.txt
-## paste -d' ' switches.txt <(cut -d' ' -f3- patchlist.txt) > working-area/switches-patchlist.txt
-print "server $nms::config::pri_v4\n";
+# fetch PI API content
+sub get_url{
+ my $url = shift;
-while (<STDIN>){
- # e73-4 151.216.160.64/26 2a02:ed02:160b::/64 151.216.181.141/26 2a02:ed02:181c::141/64 1734 distro6 @ports
- my ( $swname, $client_v4, $client_v6, $sw_v4, $sw_v6, $vlan, $distro, @ports ) = split;
-
- (my $v4gw = NetAddr::IP->new($client_v4)->first()) =~ s/\/[0-9]{1,2}//;
- (my $v6gw = NetAddr::IP->new($client_v6)->first()) =~ s/\/[0-9]{1,2}//;
+ $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; # just to be sure :-D
+ my $ua = LWP::UserAgent->new;
+ my $req = HTTP::Request->new(GET => $url);
+ $req->authorization_basic($nms::config::nmsapi_user, $nms::config::nmsapi_pass);
+
+ return $ua->request($req)->content();
+}
+
+my $json_obj = new JSON;
+my $json_content = get_url($nms::config::nmsapi_url . "/api/read/switches-management");
+if($json_content){
+ my $json = $json_obj->allow_nonref->utf8->relaxed->escape_slash->loose->allow_singlequote->allow_barekey->decode($json_content);
- (my $v4mgmt = $sw_v4) =~ s/\/[0-9]{1,2}//;
- (my $v6mgmt = $sw_v6) =~ s/\/[0-9]{1,2}//;
+ print "server $nms::config::pri_v4\n";
- my $fqdn = $swname . "." . $nms::config::tgname . ".gathering.org.";
- my $sw_fqdn = "sw." . $fqdn;
- my $gw_fqdn = "gw." . $fqdn;
- my $text_info = $distro . ", vlan $vlan, " . join(' + ', @ports);
+ foreach my $switch (values %{$json->{switches}}){
+ next unless ($switch->{subnet4}); # require at least IPv4 client subnet
+ next unless ($switch->{sysname} =~ m/^e[0-9]+?\-/); # only rows
+
+ (my $v4mgmt = $switch->{mgmt_v4_addr}) =~ s/\/[0-9]{1,2}//;
+ (my $v6mgmt = $switch->{mgmt_v6_addr}) =~ s/\/[0-9]{1,2}//;
+ (my $v4gw = NetAddr::IP->new($switch->{subnet4})->first()) =~ s/\/[0-9]{1,2}//;
+ (my $v6gw = NetAddr::IP->new($switch->{subnet6})->first()) =~ s/\/[0-9]{1,2}//;
+
+ my $fqdn = $switch->{sysname} . "." . $nms::config::tgname . ".gathering.org.";
+ my $sw_fqdn = "sw." . $fqdn;
+ my $gw_fqdn = "gw." . $fqdn;
- # A and AAAA-record to the switch
- if($delete){
- print "update delete $sw_fqdn \t IN A\n";
- print "update delete $sw_fqdn \t IN AAAA\n";
- } else {
- print "update add $sw_fqdn \t 3600 IN A \t $v4mgmt\n";
- print "update add $sw_fqdn \t 3600 IN AAAA \t $v6mgmt\n";
- }
- print "send\n";
-
- # PTR to the switch
- if($delete){
- print "update delete " . Net::IP->new($v4mgmt)->reverse_ip() . " \t IN PTR\n";
- print "send\n";
- print "update delete " . Net::IP->new($v6mgmt)->reverse_ip() . " \t IN PTR\n";
- } else {
- print "update add " . Net::IP->new($v4mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n";
+ # A and AAAA-record to the switch
+ if($delete){
+ print "update delete $sw_fqdn \t IN A\n";
+ print "update delete $sw_fqdn \t IN AAAA\n";
+ } else {
+ print "update add $sw_fqdn \t 3600 IN A \t $v4mgmt\n";
+ print "update add $sw_fqdn \t 3600 IN AAAA \t $v6mgmt\n";
+ }
print "send\n";
- print "update add " . Net::IP->new($v6mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n";
- }
- print "send\n";
-
- # TXT-record with details
- if($delete){
- print "update delete $sw_fqdn \t IN TXT\n";
- } else {
- print "update add $sw_fqdn \t 3600 IN TXT \t \"" . $text_info . "\"\n";
- }
- print "send\n";
- # A and AAAA-record to the gateway/router
- if($delete){
- print "update delete $gw_fqdn \t IN A\n";
- print "update delete $gw_fqdn \t IN AAAA\n";
- } else {
- print "update add $gw_fqdn \t 3600 IN A \t $v4gw\n";
- print "update add $gw_fqdn \t 3600 IN AAAA \t $v6gw\n";
- }
- print "send\n";
-
- # PTR to the gateway/router
- if($delete){
- print "update delete " . Net::IP->new($v4gw)->reverse_ip() . " \t IN PTR\n";
+ # PTR to the switch
+ if($delete){
+ print "update delete " . Net::IP->new($v4mgmt)->reverse_ip() . " \t IN PTR\n" if $v4mgmt;
+ print "send\n" if $v4mgmt;
+ print "update delete " . Net::IP->new($v6mgmt)->reverse_ip() . " \t IN PTR\n" if $v6mgmt
+ } else {
+ print "update add " . Net::IP->new($v4mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n" if $v4mgmt;
+ print "send\n" if $v4mgmt;
+ print "update add " . Net::IP->new($v6mgmt)->reverse_ip() . " \t 3600 IN PTR \t $sw_fqdn\n" if $v6mgmt;
+ }
print "send\n";
- print "update delete " . Net::IP->new($v6gw)->reverse_ip() . " \t IN PTR\n";
- } else {
- print "update add " . Net::IP->new($v4gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n";
+
+ # A and AAAA-record to the gateway/router
+ if($delete){
+ print "update delete $gw_fqdn \t IN A\n";
+ print "update delete $gw_fqdn \t IN AAAA\n";
+ } else {
+ print "update add $gw_fqdn \t 3600 IN A \t $v4gw\n" if $v4gw;
+ print "update add $gw_fqdn \t 3600 IN AAAA \t $v6gw\n" if $v6gw;
+ }
print "send\n";
- print "update add " . Net::IP->new($v6gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n";
+
+ # PTR to the gateway/router
+ if($delete){
+ print "update delete " . Net::IP->new($v4gw)->reverse_ip() . " \t IN PTR\n" if $v4gw;
+ print "send\n" if $v4gw;
+ print "update delete " . Net::IP->new($v6gw)->reverse_ip() . " \t IN PTR\n" if $v6gw;
+ } else {
+ print "update add " . Net::IP->new($v4gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n" if $v4gw;
+ print "send\n" if $v4gw;
+ print "update add " . Net::IP->new($v6gw)->reverse_ip() . " \t 3600 IN PTR \t $gw_fqdn\n" if $v6gw;
+ }
+ print "send\n";
}
- print "send\n";
}
diff --git a/tools/get_mibs.sh b/tools/get_mibs.sh
index cab9fa3..7c8cc52 100755
--- a/tools/get_mibs.sh
+++ b/tools/get_mibs.sh
@@ -1,6 +1,5 @@
#!/bin/sh
-MIBS="SNMPv2 ENTITY IF LLDP IP IP-FORWARD"
ORIGPWD=$PWD
TMP=$(mktemp -d)
set -x
@@ -10,9 +9,7 @@ wget ftp://ftp.cisco.com/pub/mibs/v2/v2.tar.gz
tar xvzf v2.tar.gz --strip-components=2
mkdir -p mibs
-for a in $MIBS; do
- cp v2/$a-MIB.my mibs/
-done
+cp v2/* mibs/
mv mibs ${ORIGPWD}/
cd ${ORIGPWD}
rm -rf ${TMP}
diff --git a/tools/make-linknet-hosts.pl b/tools/make-linknet-hosts.pl
index 1db630a..c00e81b 100755
--- a/tools/make-linknet-hosts.pl
+++ b/tools/make-linknet-hosts.pl
@@ -24,21 +24,35 @@ while (<STDIN>) {
my ($ipv4_raw, $ipv6_raw, $from, $to) = split;
- # v4
- my $ipv4_first = NetAddr::IP->new($ipv4_raw);
- my $ipv4_second = $ipv4_first + 1;
-
- # v6
- my $ipv6_first = NetAddr::IP->new($ipv6_raw);
- my $ipv6_second = $ipv6_first + 1;
+ my ($ipv4_first, $ipv4_second, $ipv6_first, $ipv6_second);
+ if($ipv6_raw =~ m/nope/){
+ $ipv6_first = "nope";
+ $ipv6_second = "nope";
+ } else {
+ my $ipv6 = NetAddr::IP->new($ipv6_raw);
+ $ipv6_first = $ipv6->addr();
+ $ipv6++;
+ $ipv6_second = $ipv6->addr();
+ }
+
+ if($ipv4_raw =~ m/nope/){
+ $ipv4_first = "";
+ $ipv4_second = "";
+ } else {
+ my $ipv4 = NetAddr::IP->new($ipv4_raw);
+ $ipv4_first = $ipv4->addr();
+ $ipv4++;
+ $ipv4_second = $ipv4->addr;
+ }
+
# generate-dnsrr.pl format:
# hostname ipv4 ipv6
if($first){
- printf("%s %s %s\n", $from, $ipv4_first->addr, $ipv6_first->addr);
- printf("%s %s %s\n", $to, $ipv4_second->addr, $ipv6_second->addr);
+ printf("%s %s %s\n", $from, $ipv4_first, $ipv6_first);
+ printf("%s %s %s\n", $to, $ipv4_second, $ipv6_second);
} else {
- printf("%s-%s %s %s\n", $from, $to, $ipv4_first->addr, $ipv6_first->addr);
- printf("%s-%s %s %s\n", $to, $from, $ipv4_second->addr, $ipv6_second->addr);
+ printf("%s-%s %s %s\n", $from, $to, $ipv4_first, $ipv6_first);
+ printf("%s-%s %s %s\n", $to, $from, $ipv4_second, $ipv6_second);
}
}
diff --git a/web/etc/apache2/nms-public.tg15.gathering.org.conf b/web/etc/apache2/nms-public.tg15.gathering.org.conf
deleted file mode 100644
index 6ca255d..0000000
--- a/web/etc/apache2/nms-public.tg15.gathering.org.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-<VirtualHost *:8080>
- ServerAdmin drift@gathering.org
- ServerName nms-public.tg15.gathering.org
-
- DocumentRoot /root/tgmanage/web/nms-public.gathering.org
- AddHandler cgi-script .cgi .sh .pl .py
-
- LogLevel warn
- ErrorLog /var/log/apache2/error-nms-public.tg15.gathering.org.log
- CustomLog /var/log/apache2/access-nms-public.tg15.gathering.org.log combined
-
- <Directory "/root/tgmanage/web/nms-public.gathering.org">
- AllowOverride None
- Options Indexes FollowSymLinks ExecCGI MultiViews
-
- Require all granted
- </Directory>
-
- ServerSignature On
-
-</VirtualHost>
diff --git a/web/etc/apache2/nms-public.tg16.gathering.org.conf b/web/etc/apache2/nms-public.tg16.gathering.org.conf
new file mode 100644
index 0000000..7e24b5c
--- /dev/null
+++ b/web/etc/apache2/nms-public.tg16.gathering.org.conf
@@ -0,0 +1,30 @@
+<VirtualHost *:8080>
+ ServerAdmin drift@gathering.org
+ ServerName nms-public.tg16.gathering.org
+ ServerAlias nms-public.tg16.gathering.org
+
+ DocumentRoot /srv/tgmanage/web/nms-public.gathering.org
+ ScriptAlias /api/public/ /srv/tgmanage/web/nms-public.gathering.org/api/public/
+ <Directory "/srv/tgmanage/web/nms-public.gathering.org/api/public/">
+ AllowOverride None
+ Options +ExecCGI -MultiViews +Indexes +SymLinksIfOwnerMatch
+ Require all granted
+ </Directory>
+ <Directory "/srv/tgmanage/web/nms-public.gathering.org">
+ AllowOverride None
+ Options Indexes FollowSymLinks MultiViews
+ Require all granted
+
+ AddDefaultCharset UTF-8
+ </Directory>
+
+ ErrorLog /var/log/apache2/error-nms-public.tg16.gathering.org.log
+
+ # Possible values include: debug, info, notice, warn, error, crit,
+ # alert, emerg.
+ LogLevel warn
+
+ CustomLog /var/log/apache2/access-nms-public.tg16.gathering.org.log combined
+ ServerSignature On
+
+</VirtualHost>
diff --git a/web/etc/apache2/nms.tg16.gathering.org.conf b/web/etc/apache2/nms.tg16.gathering.org.conf
index 9a6d7cd..08471e0 100644
--- a/web/etc/apache2/nms.tg16.gathering.org.conf
+++ b/web/etc/apache2/nms.tg16.gathering.org.conf
@@ -1,21 +1,32 @@
<VirtualHost *:8080>
ServerAdmin drift@gathering.org
ServerName nms.tg16.gathering.org
- ServerAlias einstein.tg16.gathering.org
+ ServerAlias nms.tg16.gathering.org
DocumentRoot /srv/tgmanage/web/nms.gathering.org
- ScriptAlias /api/private/ /srv/tgmanage/web/nms.gathering.org/api/private/
+ ScriptAlias /api/write/ /srv/tgmanage/web/nms.gathering.org/api/write/
+ ScriptAlias /api/read/ /srv/tgmanage/web/nms.gathering.org/api/read/
ScriptAlias /api/public/ /srv/tgmanage/web/nms.gathering.org/api/public/
- <Directory "/srv/tgmanage/web/nms.gathering.org/api/private/">
+ <Directory "/srv/tgmanage/web/nms.gathering.org/api/write/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
<RequireAny>
- AuthUserFile /srv/tgmanage/web/.htpasswd
+ AuthUserFile /srv/tgmanage/web/htpasswd-write
AuthName "Tech:Server Secret Volcano Lair"
AuthType Basic
Require valid-user
</RequireAny>
</Directory>
+ <Directory "/srv/tgmanage/web/nms.gathering.org/api/read/">
+ AllowOverride None
+ Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
+ <RequireAny>
+ AuthUserFile /srv/tgmanage/web/htpasswd-read
+ AuthName "The Gathering Network Management System"
+ AuthType Basic
+ Require valid-user
+ </RequireAny>
+ </Directory>
<Directory "/srv/tgmanage/web/nms.gathering.org/api/public/">
AllowOverride None
Options +ExecCGI -MultiViews +Indexes +SymLinksIfOwnerMatch
@@ -24,16 +35,13 @@
<Directory "/srv/tgmanage/web/nms.gathering.org">
AllowOverride None
Options Indexes FollowSymLinks MultiViews
-
AddDefaultCharset UTF-8
-
<RequireAny>
- AuthUserFile /srv/tgmanage/web/.htpasswd
- AuthName "Tech:Server Secret Volcano Lair"
+ AuthUserFile /srv/tgmanage/web/htpasswd-read
+ AuthName "The Gathering Network Management System"
AuthType Basic
Require valid-user
</RequireAny>
-
</Directory>
ErrorLog /var/log/apache2/error-nms.tg16.gathering.org.log
diff --git a/web/etc/nginx/default.conf b/web/etc/nginx/default.conf
new file mode 100644
index 0000000..4335774
--- /dev/null
+++ b/web/etc/nginx/default.conf
@@ -0,0 +1,339 @@
+# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
+
+ssl_dhparam /etc/nginx/dhparam.pem;
+resolver 185.110.149.2 185.110.148.2;
+
+# Yoda!
+server {
+ listen 80 default_server;
+ listen [::]:80 default_server;
+ root /var/www/html;
+ # Add index.php to the list if you are using PHP
+ index index.html index.htm index.nginx-debian.html;
+ add_header Strict-Transport-Security max-age=15768000;
+ server_name yoda.tg16.gathering.org;
+
+ location /display {
+ allow 185.110.148.24;
+ allow 2a06:5841:1337::24;
+ allow 185.110.148.25;
+ allow 2a06:5841:1337::25;
+ allow 185.110.148.26;
+ allow 2a06:5841:1337::26;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.150.0/25;
+ deny all;
+ }
+ #location / {
+ # return 301 https://$host$request_uri;
+ #}
+}
+
+# Munin
+server {
+ listen 80;
+ listen [::]:80;
+ access_log /var/log/nginx/munin.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/munin.tg16.gathering.org_ssl_error.log error;
+ root /var/www/html;
+
+ server_name munin.tg16.gathering.org;
+
+ allow 185.110.150.0/25;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.149.0/26;
+ allow 2a06:5841:149a::/64;
+ allow 185.110.148.0/26;
+ allow 2a06:5841:1337::/64;
+ allow 185.110.151.0/27;
+ allow 2a06:5841:151a::/64;
+ deny all;
+
+ location ^~ /munin-cgi/munin-cgi-graph/ {
+ fastcgi_split_path_info ^(/munin-cgi/munin-cgi-graph)(.*);
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ fastcgi_pass unix:/var/run/munin/fastcgi-graph.sock;
+ include fastcgi_params;
+ }
+
+
+ location /munin/static/ {
+ alias /etc/munin/static/;
+ }
+
+ location /munin/ {
+ fastcgi_split_path_info ^(/munin)(.*);
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ fastcgi_pass unix:/var/run/munin/fastcgi-html.sock;
+ include fastcgi_params;
+
+ rewrite ^/munin/(.*.png)$ /munin-cgi/munin-cgi-graph/$1;
+ }
+
+ location = / {
+ return 301 $scheme://$server_name/munin/;
+ }
+}
+
+# Yoda!
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ access_log /var/log/nginx/yoda.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/yoda.tg16.gathering.org_ssl_error.log error;
+ server_name yoda.tg16.gathering.org;
+ add_header Strict-Transport-Security max-age=0;
+ add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
+ ssl_prefer_server_ciphers on;
+ ssl_certificate /root/le/prodcerts/yoda.prod.pem;
+ ssl_certificate_key /root/le/keys/domain.key;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:50m;
+ client_max_body_size 10m;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ root /var/www/html;
+ index index.pl index.html;
+ location ~ \.pl|cgi$ {
+ try_files $uri =404;
+ gzip off;
+ fastcgi_pass 127.0.0.1:8999;
+ fastcgi_index index.pl;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ include fastcgi_params;
+ }
+ location / {
+ try_files $uri $uri/ =404;
+ }
+}
+
+# Webcam
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ access_log /var/log/nginx/webcam.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/webcam.tg16.gathering.org_ssl_error.log error;
+ server_name webcam.tg16.gathering.org webcams.tg16.gathering.org;
+ add_header Strict-Transport-Security max-age=0;
+ add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
+ ssl_prefer_server_ciphers on;
+ ssl_certificate /root/le/prodcerts/yoda.prod.pem;
+ ssl_certificate_key /root/le/keys/domain.key;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:50m;
+ client_max_body_size 10m;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ root /var/www/webcam;
+ location / {
+ return 301 http://stream.tg16.gathering.org/;
+ #try_files $uri $uri/ =404;
+ }
+}
+
+# Stream
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ access_log /var/log/nginx/stream.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/stream.tg16.gathering.org_ssl_error.log error;
+ server_name stream.tg16.gathering.org streams.tg16.gathering.org;
+ #add_header Strict-Transport-Security max-age=15768000;
+ add_header Strict-Transport-Security max-age=0;
+ #add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
+ ssl_prefer_server_ciphers on;
+ ssl_certificate /root/le/prodcerts/yoda.prod.pem;
+ ssl_certificate_key /root/le/keys/domain.key;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:50m;
+ client_max_body_size 10m;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ root /var/www/stream/;
+# index index.pl index.html;
+ index index.pl index.py index.html;
+ location /hls {
+ types {
+ #application/vnd.apple.mpegurl m3u8;
+ application/x-mpegURL m3u8;
+ video/mp2t ts;
+ text/html htm;
+ }
+ root /var/www/;
+ add_header Cache-Control no-cache;
+ }
+ location /stat {
+ allow 185.110.150.0/25;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.149.0/26;
+ allow 2a06:5841:149a::/64;
+ allow 185.110.148.0/26;
+ allow 2a06:5841:1337::/64;
+ allow 185.110.151.0/27;
+ allow 2a06:5841:151a::/64;
+ deny all;
+ rtmp_stat all;
+ rtmp_stat_stylesheet /stat.xsl;
+ }
+ location /stat.xsl {
+ allow 185.110.150.0/25;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.149.0/26;
+ allow 2a06:5841:149a::/64;
+ allow 185.110.148.0/26;
+ allow 2a06:5841:1337::/64;
+ allow 185.110.151.0/27;
+ allow 2a06:5841:151a::/64;
+ deny all;
+ }
+ location ~ \.py {
+ try_files $uri =404;
+ fastcgi_pass unix:/tmp/index-fcgi.sock;
+ fastcgi_index index.py;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ include fastcgi_params;
+ }
+ location ~ \.pl|cgi$ {
+ try_files $uri =404;
+ gzip off;
+ fastcgi_pass 127.0.0.1:8999;
+ fastcgi_index index.pl;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ include fastcgi_params;
+ }
+ location / {
+ return 301 http://$host$request_uri;
+ #try_files $uri $uri/ =404;
+ }
+}
+
+# Stream
+server {
+ listen 80;
+ listen [::]:80;
+ access_log /var/log/nginx/stream.tg16.gathering.org_access.log;
+ error_log /var/log/nginx/stream.tg16.gathering.org_error.log error;
+ server_name stream.tg16.gathering.org streams.tg16.gathering.org;
+ add_header Strict-Transport-Security max-age=0;
+ client_max_body_size 10m;
+ root /var/www/stream/;
+# index index.pl index.html;
+ index index.pl index.py index.html;
+ location /hls {
+ types {
+ #application/vnd.apple.mpegurl m3u8;
+ application/x-mpegURL m3u8;
+ video/mp2t ts;
+ text/html htm;
+ }
+ root /var/www/;
+ add_header Cache-Control no-cache;
+ }
+ location /stat {
+ allow 185.110.150.0/25;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.149.0/26;
+ allow 2a06:5841:149a::/64;
+ allow 185.110.148.0/26;
+ allow 2a06:5841:1337::/64;
+ allow 185.110.151.0/27;
+ allow 2a06:5841:151a::/64;
+ deny all;
+ rtmp_stat all;
+ rtmp_stat_stylesheet /stat.xsl;
+ }
+ location /stat.xsl {
+ allow 185.110.150.0/25;
+ allow 2a06:5841:150a::/64;
+ allow 185.110.149.0/26;
+ allow 2a06:5841:149a::/64;
+ allow 185.110.148.0/26;
+ allow 2a06:5841:1337::/64;
+ allow 185.110.151.0/27;
+ allow 2a06:5841:151a::/64;
+ deny all;
+ }
+ location ~ \.py {
+ try_files $uri =404;
+ fastcgi_pass unix:/tmp/index-fcgi.sock;
+ fastcgi_index index.py;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ include fastcgi_params;
+ }
+ location ~ \.pl|cgi$ {
+ try_files $uri =404;
+ gzip off;
+ fastcgi_pass 127.0.0.1:8999;
+ fastcgi_index index.pl;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ include fastcgi_params;
+ }
+ location / {
+ try_files $uri $uri/ =404;
+ }
+}
+
+# NMS-backend
+upstream nms {
+ server obi-wan.tg16.gathering.org;
+ keepalive 32;
+}
+
+# NMS
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ access_log /var/log/nginx/nms.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/nms.tg16.gathering.org_ssl_error.log error;
+ server_name nms.tg16.gathering.org nms-public.tg16.gathering.org nms-api.tg16.gathering.org nms4.tg16.gathering.org nms6.tg16.gathering.org;
+ add_header Strict-Transport-Security max-age=15768000;
+ add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
+ ssl_prefer_server_ciphers on;
+ ssl_certificate /root/le/prodcerts/yoda.prod.pem;
+ ssl_certificate_key /root/le/keys/domain.key;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:50m;
+ client_max_body_size 10m;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ location / {
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $remote_addr;
+ proxy_pass http://nms;
+ proxy_http_version 1.1;
+ proxy_set_header Connection "";
+ }
+}
+
+# Stats
+server {
+ listen 443 ssl http2;
+ listen [::]:443 ssl http2;
+ access_log /var/log/nginx/stats.tg16.gathering.org_ssl_access.log;
+ error_log /var/log/nginx/stats.tg16.gathering.org_ssl_error.log error;
+ server_name stats.tg16.gathering.org;
+ add_header Strict-Transport-Security max-age=15768000;
+ add_header Public-Key-Pins 'pin-sha256="47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="; pin-sha256="DqEaRBrMacYurT/HXzsxYONYXAyhWRgNa3/+g3920uQ="; max-age=5184000; includeSubDomains';
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
+ ssl_prefer_server_ciphers on;
+ ssl_certificate /root/le/prodcerts/yoda.prod.pem;
+ ssl_certificate_key /root/le/keys/domain.key;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:50m;
+ client_max_body_size 10m;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ root /var/www/stats;
+ location / {
+ try_files $uri $uri/ =404;
+ }
+}
diff --git a/web/etc/varnish/nms.vcl b/web/etc/varnish/nms.vcl
index 6349238..53a9444 100644
--- a/web/etc/varnish/nms.vcl
+++ b/web/etc/varnish/nms.vcl
@@ -11,6 +11,9 @@ backend default {
# Sort magi.
sub vcl_recv {
+ if (req.url ~ "^/where" || req.url ~ "^/location") {
+ set req.url = "/api/public/location";
+ }
if (req.method != "GET" &&
req.method != "HEAD" &&
req.method != "PUT" &&
@@ -22,9 +25,6 @@ sub vcl_recv {
return (synth(418,"LOLOLOL"));
}
- # Hardcoded for testing
- set req.http.host = "nms.tg16.gathering.org";
-
if (req.method != "GET" && req.method != "HEAD") {
/* We only deal with GET and HEAD by default */
return (pass);
@@ -37,6 +37,7 @@ sub vcl_recv {
return (hash);
}
+
# Rosa magi
sub vcl_hash {
# Wheee. Legg til authorization-headeren i hashen.
@@ -50,4 +51,8 @@ sub vcl_backend_response {
if (beresp.http.x-ban) {
ban("obj.http.x-url ~ " + beresp.http.x-ban);
}
+ if (beresp.status != 200) {
+ set beresp.uncacheable = false;
+ set beresp.ttl = 5s;
+ }
}
diff --git a/web/nms-public.gathering.org/api/public/dhcp b/web/nms-public.gathering.org/api/public/dhcp
new file mode 100755
index 0000000..91d52af
--- /dev/null
+++ b/web/nms-public.gathering.org/api/public/dhcp
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use lib '../../../../include';
+use nms::web qw (%json finalize_output);
+use strict;
+use warnings;
+use Data::Dumper;
+
+nms::web::setwhen('60m');
+my $q = $nms::web::dbh->prepare('select distinct on (sysname) extract(epoch from date_trunc(\'second\',time)) as time,sysname from dhcp join switches on dhcp.switch = switches.switch where ' . $nms::web::when . ' order by sysname,time desc;');
+$q->execute();
+while ( my $ref = $q->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+ $json{'dhcp'}{$ref->{'sysname'}} = $ref->{'time'};
+}
+
+$nms::web::cc{'max-age'} = "5";
+$nms::web::cc{'stale-while-revalidate'} = "30";
+finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/dhcp-summary b/web/nms-public.gathering.org/api/public/dhcp-summary
new file mode 100755
index 0000000..a0e5609
--- /dev/null
+++ b/web/nms-public.gathering.org/api/public/dhcp-summary
@@ -0,0 +1,16 @@
+#! /usr/bin/perl
+use lib '../../../../include';
+use strict;
+use warnings;
+use nms::web;
+
+nms::web::setwhen('2h');
+
+my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;");
+$q2->execute();
+while (my $ref = $q2->fetchrow_hashref()) {
+ $nms::web::json{'dhcp'} = $ref;
+}
+$nms::web::cc{'max-age'} = "10";
+$nms::web::cc{'stale-while-revalidate'} = "15";
+finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/ping b/web/nms-public.gathering.org/api/public/ping
new file mode 100755
index 0000000..db46b00
--- /dev/null
+++ b/web/nms-public.gathering.org/api/public/ping
@@ -0,0 +1,37 @@
+#! /usr/bin/perl
+use lib '../../../../include';
+use strict;
+use warnings;
+use nms::web;
+
+nms::web::setwhen('10s');
+
+my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where "
+ . $nms::web::when . " group by switch)");
+
+$q->execute();
+while (my $ref = $q->fetchrow_hashref()) {
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'};
+ # Get seconds, without decimlas, from timestamp.
+ # '00:01:01.435601' => 61 seconds.
+ my ( $h, $m, $s ) = split( ':|\.', $ref->{'age'} );
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s; # $$ref->{'age'};
+}
+
+my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE "
+ . $nms::web::when . " ORDER BY switch, time DESC;");
+$qs->execute();
+while ( my $ref = $qs->fetchrow_hashref() ) {
+ $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'};
+}
+
+my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE "
+ . $nms::web::when . " ORDER BY linknet, time DESC;");
+$lq->execute();
+while ( my $ref = $lq->fetchrow_hashref() ) {
+ $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ];
+}
+
+$nms::web::cc{'max-age'} = "2";
+$nms::web::cc{'stale-while-revalidate'} = "15";
+finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/switch-state b/web/nms-public.gathering.org/api/public/switch-state
new file mode 100755
index 0000000..0e28cfd
--- /dev/null
+++ b/web/nms-public.gathering.org/api/public/switch-state
@@ -0,0 +1,91 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use lib '../../../../include';
+use nms::web qw (%json finalize_output);
+use strict;
+use warnings;
+use Data::Dumper;
+
+my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
+
+$q->execute();
+while ( my $ref = $q->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+
+ my %data = %{JSON::XS::decode_json($ref->{'data'})};
+
+ for my $porti (keys %{$data{'ports'}}) {
+ my %port = %{$data{'ports'}{$porti}};
+ my $smallport = $porti;
+ if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
+ $smallport =~ s/[0-9-].*$//;
+ } else {
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
+ }
+ if ($porti =~ /ge-0\/0\/4[4-7]$/) {
+ $json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'switches'}{$sysname}{'uplinks'}{'live'} += 1;
+ }
+ $json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
+ }
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'switches'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'live'} += 1;
+ $json{'switches'}{$sysname}{totals}{'live'} += 1;
+ }
+ $json{'switches'}{$sysname}{totals}{'total'} += 1;
+ }
+ $json{'switches'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'};
+ $json{'switches'}{$sysname}{'time'} = $ref->{'time'};
+}
+
+nms::web::setwhen('15m','10m');
+my $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
+
+$q2->execute();
+while ( my $ref = $q2->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+
+ my %data = %{JSON::XS::decode_json($ref->{'data'})};
+
+ for my $porti (keys %{$data{'ports'}}) {
+ my %port = %{$data{'ports'}{$porti}};
+ my $smallport = $porti;
+ if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
+ $smallport =~ s/[0-9-].*$//;
+ } else {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
+ }
+ if ($porti =~ /ge-0\/0\/4[4-7]$/) {
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{'uplinks'}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
+ }
+
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'live'} += 1;
+ $json{'then'}{$sysname}{totals}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{totals}{'total'} += 1;
+ }
+ $json{'then'}{$sysname}{'temp'} = $data{'misc'}{'enterprises.2636.3.1.13.1.7.7.1.0.0'}{''};
+ $json{'then'}{$sysname}{'time'} = $ref->{'time'};
+}
+$nms::web::cc{'max-age'} = "5";
+$nms::web::cc{'stale-while-revalidate'} = "30";
+finalize_output();
diff --git a/web/nms-public.gathering.org/api/public/switches b/web/nms-public.gathering.org/api/public/switches
new file mode 100755
index 0000000..890b7d7
--- /dev/null
+++ b/web/nms-public.gathering.org/api/public/switches
@@ -0,0 +1,36 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use CGI qw(fatalsToBrowser);
+use DBI;
+use lib '../../../../include';
+use nms;
+use nms::web;
+use strict;
+use warnings;
+use Data::Dumper;
+
+$nms::web::cc{'max-age'} = "60";
+
+my $q2 = $nms::web::dbh->prepare('select switch,sysname,distro_name,placement,mgmt_v4_addr,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,community,last_updated,switchtype from switches where placement is not null');
+
+$q2->execute();
+while (my $ref = $q2->fetchrow_hashref()) {
+ $ref->{'placement'} =~ /\((-?\d+),(-?\d+)\),\((-?\d+),(-?\d+)\)/;
+ my ($x1, $y1, $x2, $y2) = ($1, $2, $3, $4);
+ my $sysname = $ref->{'sysname'};
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'x'} = $x2;
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'y'} = $y2;
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'width'} = $x1 - $x2;
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'height'} = $y1 - $y2;
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'distro_name'} = $ref->{'distro_name'};
+}
+
+my $q4 = $nms::web::dbh->prepare('select linknet, (select sysname from switches where switch = switch1) as sysname1, (select sysname from switches where switch = switch2) as sysname2 from linknets');
+
+$q4->execute();
+while (my $ref = $q4->fetchrow_hashref()) {
+ $nms::web::json{'linknets'}{$ref->{'linknet'}} = $ref;
+}
+
+finalize_output();
diff --git a/web/nms-public.gathering.org/cagewave.png b/web/nms-public.gathering.org/cagewave.png
deleted file mode 100644
index 581df1b..0000000
--- a/web/nms-public.gathering.org/cagewave.png
+++ /dev/null
Binary files differ
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.css b/web/nms-public.gathering.org/css/bootstrap-theme.css
new file mode 100644
index 0000000..b0fdfcb
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap-theme.css
@@ -0,0 +1,476 @@
+/*!
+ * Bootstrap v3.3.4 (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, .2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+ text-shadow: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+}
+.btn-default {
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #dbdbdb;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+ background-color: #e0e0e0;
+ background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+ background-color: #e0e0e0;
+ border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default:disabled,
+.btn-default[disabled] {
+ background-color: #e0e0e0;
+ background-image: none;
+}
+.btn-primary {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+ background-color: #265a88;
+ background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+ background-color: #265a88;
+ border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary:disabled,
+.btn-primary[disabled] {
+ background-color: #265a88;
+ background-image: none;
+}
+.btn-success {
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+ background-color: #419641;
+ background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+ background-color: #419641;
+ border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success:disabled,
+.btn-success[disabled] {
+ background-color: #419641;
+ background-image: none;
+}
+.btn-info {
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+ background-color: #2aabd2;
+ background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+ background-color: #2aabd2;
+ border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info:disabled,
+.btn-info[disabled] {
+ background-color: #2aabd2;
+ background-image: none;
+}
+.btn-warning {
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, 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,
+.btn-warning[disabled] {
+ background-color: #eb9316;
+ background-image: none;
+}
+.btn-danger {
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, 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,
+.btn-danger[disabled] {
+ background-color: #c12e2a;
+ background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ background-color: #e8e8e8;
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+ background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ background-color: #2e6da4;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+}
+.navbar-default {
+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+ background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+ background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+ background-repeat: repeat-x;
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+ background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+ background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+ background-repeat: repeat-x;
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ border-radius: 0;
+}
+@media (max-width: 767px) {
+ .navbar .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+ }
+}
+.alert {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #b2dba1;
+}
+.alert-info {
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #9acfea;
+}
+.alert-warning {
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #f5e79e;
+}
+.alert-danger {
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #dca7a7;
+}
+.progress {
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-success {
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-info {
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-warning {
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-danger {
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ text-shadow: 0 -1px 0 #286090;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+ text-shadow: none;
+}
+.panel {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+ background-repeat: repeat-x;
+}
+.well {
+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #dcdcdc;
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.css.map b/web/nms-public.gathering.org/css/bootstrap-theme.css.map
new file mode 100644
index 0000000..5a12d63
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/bootstrap-theme.min.css b/web/nms-public.gathering.org/css/bootstrap-theme.min.css
new file mode 100644
index 0000000..cefa3d1
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap-theme.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.4 (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 .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,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,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,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,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,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,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,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,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,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,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,.btn-danger[disabled]{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}.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/web/nms-public.gathering.org/css/bootstrap.css b/web/nms-public.gathering.org/css/bootstrap.css
new file mode 100644
index 0000000..fb15e3d
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap.css
@@ -0,0 +1,6584 @@
+/*!
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ select {
+ background: #fff !important;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+.glyphicon-plus:before {
+ content: "\2b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+.glyphicon-cd:before {
+ content: "\e201";
+}
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+.glyphicon-copy:before {
+ content: "\e205";
+}
+.glyphicon-paste:before {
+ content: "\e206";
+}
+.glyphicon-alert:before {
+ content: "\e209";
+}
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+.glyphicon-king:before {
+ content: "\e211";
+}
+.glyphicon-queen:before {
+ content: "\e212";
+}
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+.glyphicon-knight:before {
+ content: "\e215";
+}
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+.glyphicon-bed:before {
+ content: "\e219";
+}
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+.glyphicon-erase:before {
+ content: "\e221";
+}
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+.glyphicon-btc:before {
+ content: "\e227";
+}
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+.glyphicon-scale:before {
+ content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+.glyphicon-education:before {
+ content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+.glyphicon-oil:before {
+ content: "\e238";
+}
+.glyphicon-grain:before {
+ content: "\e239";
+}
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+.glyphicon-console:before {
+ content: "\e254";
+}
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: 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 {
+ color: #286090;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+a.bg-primary:hover {
+ background-color: #286090;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ 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"],
+ input[type="time"],
+ input[type="datetime-local"],
+ input[type="month"] {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-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;
+}
+select.form-group-sm .form-control {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.form-group-sm .form-control,
+select[multiple].form-group-sm .form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.form-group-lg .form-control {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.form-group-lg .form-control,
+select[multiple].form-group-lg .form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .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;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ }
+}
+.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 {
+ 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.focus,
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary.focus,
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:hover,
+.btn-success:focus,
+.btn-success.focus,
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:hover,
+.btn-info:focus,
+.btn-info.focus,
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning.focus,
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger.focus,
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn-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="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+.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;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+.label-primary {
+ background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding: 30px 15px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding: 48px 0;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media-body {
+ width: 10000px;
+}
+.media-object {
+ display: block;
+}
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+a.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success {
+ 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-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+ margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ min-height: 16.42857143px;
+ 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-weight: normal;
+ line-height: 1.4;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.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;
+ 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 {
+ 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-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ 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);
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000;
+ perspective: 1000;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+.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;
+ font-family: serif;
+ line-height: 1;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -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;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/web/nms-public.gathering.org/css/bootstrap.css.map b/web/nms-public.gathering.org/css/bootstrap.css.map
new file mode 100644
index 0000000..2fd84f3
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACwBD;;;;;;;;;;;;;EAaE,gBAAA;EDtBD;AC8BD;;;;EAIE,uBAAA;EACA,0BAAA;ED5BD;ACoCD;EACE,eAAA;EACA,WAAA;EDlCD;AC0CD;;EAEE,eAAA;EDxCD;ACkDD;EACE,+BAAA;EDhDD;ACuDD;;EAEE,YAAA;EDrDD;AC+DD;EACE,2BAAA;ED7DD;ACoED;;EAEE,mBAAA;EDlED;ACyED;EACE,oBAAA;EDvED;AC+ED;EACE,gBAAA;EACA,kBAAA;ED7ED;ACoFD;EACE,kBAAA;EACA,aAAA;EDlFD;ACyFD;EACE,gBAAA;EDvFD;AC8FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED5FD;AC+FD;EACE,aAAA;ED7FD;ACgGD;EACE,iBAAA;ED9FD;ACwGD;EACE,WAAA;EDtGD;AC6GD;EACE,kBAAA;ED3GD;ACqHD;EACE,kBAAA;EDnHD;AC0HD;EACE,8BAAA;EACA,iCAAA;UAAA,yBAAA;EACA,WAAA;EDxHD;AC+HD;EACE,gBAAA;ED7HD;ACoID;;;;EAIE,mCAAA;EACA,gBAAA;EDlID;ACoJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDlJD;ACyJD;EACE,mBAAA;EDvJD;ACiKD;;EAEE,sBAAA;ED/JD;AC0KD;;;;EAIE,4BAAA;EACA,iBAAA;EDxKD;AC+KD;;EAEE,iBAAA;ED7KD;ACoLD;;EAEE,WAAA;EACA,YAAA;EDlLD;AC0LD;EACE,qBAAA;EDxLD;ACmMD;;EAEE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,YAAA;EDjMD;AC0MD;;EAEE,cAAA;EDxMD;ACiND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED/MD;ACwND;;EAEE,0BAAA;EDtND;AC6ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED3ND;ACmOD;EACE,WAAA;EACA,YAAA;EDjOD;ACwOD;EACE,gBAAA;EDtOD;AC8OD;EACE,mBAAA;ED5OD;ACsPD;EACE,2BAAA;EACA,mBAAA;EDpPD;ACuPD;;EAEE,YAAA;EDrPD;AACD,sFAAqF;AE1ErF;EAnGI;;;IAGI,oCAAA;IACA,wBAAA;IACA,qCAAA;YAAA,6BAAA;IACA,8BAAA;IFgLL;EE7KC;;IAEI,4BAAA;IF+KL;EE5KC;IACI,8BAAA;IF8KL;EE3KC;IACI,+BAAA;IF6KL;EExKC;;IAEI,aAAA;IF0KL;EEvKC;;IAEI,wBAAA;IACA,0BAAA;IFyKL;EEtKC;IACI,6BAAA;IFwKL;EErKC;;IAEI,0BAAA;IFuKL;EEpKC;IACI,4BAAA;IFsKL;EEnKC;;;IAGI,YAAA;IACA,WAAA;IFqKL;EElKC;;IAEI,yBAAA;IFoKL;EE7JC;IACI,6BAAA;IF+JL;EE3JC;IACI,eAAA;IF6JL;EE3JC;;IAGQ,mCAAA;IF4JT;EEzJC;IACI,wBAAA;IF2JL;EExJC;IACI,sCAAA;IF0JL;EE3JC;;IAKQ,mCAAA;IF0JT;EEvJC;;IAGQ,mCAAA;IFwJT;EACF;AGpPD;EACE,qCAAA;EACA,uDAAA;EACA,iYAAA;EHsPD;AG9OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EHgPD;AG5OmC;EAAW,gBAAA;EH+O9C;AG9OmC;EAAW,gBAAA;EHiP9C;AG/OmC;;EAAW,kBAAA;EHmP9C;AGlPmC;EAAW,kBAAA;EHqP9C;AGpPmC;EAAW,kBAAA;EHuP9C;AGtPmC;EAAW,kBAAA;EHyP9C;AGxPmC;EAAW,kBAAA;EH2P9C;AG1PmC;EAAW,kBAAA;EH6P9C;AG5PmC;EAAW,kBAAA;EH+P9C;AG9PmC;EAAW,kBAAA;EHiQ9C;AGhQmC;EAAW,kBAAA;EHmQ9C;AGlQmC;EAAW,kBAAA;EHqQ9C;AGpQmC;EAAW,kBAAA;EHuQ9C;AGtQmC;EAAW,kBAAA;EHyQ9C;AGxQmC;EAAW,kBAAA;EH2Q9C;AG1QmC;EAAW,kBAAA;EH6Q9C;AG5QmC;EAAW,kBAAA;EH+Q9C;AG9QmC;EAAW,kBAAA;EHiR9C;AGhRmC;EAAW,kBAAA;EHmR9C;AGlRmC;EAAW,kBAAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,kBAAA;EH2tB9C;AG1tBmC;EAAW,kBAAA;EH6tB9C;AG5tBmC;EAAW,kBAAA;EH+tB9C;AG9tBmC;EAAW,kBAAA;EHiuB9C;AGhuBmC;EAAW,kBAAA;EHmuB9C;AGluBmC;EAAW,kBAAA;EHquB9C;AGpuBmC;EAAW,kBAAA;EHuuB9C;AGtuBmC;EAAW,kBAAA;EHyuB9C;AGxuBmC;EAAW,kBAAA;EH2uB9C;AG1uBmC;EAAW,kBAAA;EH6uB9C;AG5uBmC;EAAW,kBAAA;EH+uB9C;AG9uBmC;EAAW,kBAAA;EHivB9C;AIvhCD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL09BT;AIzhCD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELg+BT;AIvhCD;EACE,iBAAA;EACA,+CAAA;EJyhCD;AIthCD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJwhCD;AIphCD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJshCD;AIhhCD;EACE,gBAAA;EACA,uBAAA;EJkhCD;AIhhCC;;EAEE,gBAAA;EACA,4BAAA;EJkhCH;AI/gCC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENskCD;AIzgCD;EACE,WAAA;EJ2gCD;AIrgCD;EACE,wBAAA;EJugCD;AIngCD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPilCD;AIvgCD;EACE,oBAAA;EJygCD;AIngCD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPimCD;AIngCD;EACE,oBAAA;EJqgCD;AI//BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJigCD;AIz/BD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ2/BD;AIn/BC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJq/BH;AIz+BD;EACE,iBAAA;EJ2+BD;AQnoCD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+oCD;AQppCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERqqCH;AQjqCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERsqCD;AQ1qCD;;;;;;;;;;;;EAQI,gBAAA;ERgrCH;AQ7qCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERkrCD;AQtrCD;;;;;;;;;;;;EAQI,gBAAA;ER4rCH;AQxrCD;;EAAU,iBAAA;ER4rCT;AQ3rCD;;EAAU,iBAAA;ER+rCT;AQ9rCD;;EAAU,iBAAA;ERksCT;AQjsCD;;EAAU,iBAAA;ERqsCT;AQpsCD;;EAAU,iBAAA;ERwsCT;AQvsCD;;EAAU,iBAAA;ER2sCT;AQrsCD;EACE,kBAAA;ERusCD;AQpsCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERssCD;AQjsCD;EAAA;IAFI,iBAAA;IRusCD;EACF;AQ/rCD;;EAEE,gBAAA;ERisCD;AQ9rCD;;EAEE,2BAAA;EACA,eAAA;ERgsCD;AQ5rCD;EAAuB,kBAAA;ER+rCtB;AQ9rCD;EAAuB,mBAAA;ERisCtB;AQhsCD;EAAuB,oBAAA;ERmsCtB;AQlsCD;EAAuB,qBAAA;ERqsCtB;AQpsCD;EAAuB,qBAAA;ERusCtB;AQpsCD;EAAuB,2BAAA;ERusCtB;AQtsCD;EAAuB,2BAAA;ERysCtB;AQxsCD;EAAuB,4BAAA;ER2sCtB;AQxsCD;EACE,gBAAA;ER0sCD;AQxsCD;ECrGE,gBAAA;ETgzCD;AS/yCC;EACE,gBAAA;ETizCH;AQ3sCD;ECxGE,gBAAA;ETszCD;ASrzCC;EACE,gBAAA;ETuzCH;AQ9sCD;EC3GE,gBAAA;ET4zCD;AS3zCC;EACE,gBAAA;ET6zCH;AQjtCD;EC9GE,gBAAA;ETk0CD;ASj0CC;EACE,gBAAA;ETm0CH;AQptCD;ECjHE,gBAAA;ETw0CD;ASv0CC;EACE,gBAAA;ETy0CH;AQntCD;EAGE,aAAA;EE3HA,2BAAA;EV+0CD;AU90CC;EACE,2BAAA;EVg1CH;AQptCD;EE9HE,2BAAA;EVq1CD;AUp1CC;EACE,2BAAA;EVs1CH;AQvtCD;EEjIE,2BAAA;EV21CD;AU11CC;EACE,2BAAA;EV41CH;AQ1tCD;EEpIE,2BAAA;EVi2CD;AUh2CC;EACE,2BAAA;EVk2CH;AQ7tCD;EEvIE,2BAAA;EVu2CD;AUt2CC;EACE,2BAAA;EVw2CH;AQ3tCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER6tCD;AQrtCD;;EAEE,eAAA;EACA,qBAAA;ERutCD;AQ1tCD;;;;EAMI,kBAAA;ER0tCH;AQntCD;EACE,iBAAA;EACA,kBAAA;ERqtCD;AQjtCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERotCD;AQttCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERotCH;AQ/sCD;EACE,eAAA;EACA,qBAAA;ERitCD;AQ/sCD;;EAEE,yBAAA;ERitCD;AQ/sCD;EACE,mBAAA;ERitCD;AQ/sCD;EACE,gBAAA;ERitCD;AQxrCD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IX65CC;EQlsCH;IAHM,oBAAA;IRwsCH;EACF;AQ/rCD;;EAGE,cAAA;EACA,mCAAA;ERgsCD;AQ9rCD;EACE,gBAAA;EA9IqB,2BAAA;ER+0CtB;AQ5rCD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER8rCD;AQzrCG;;;EACE,kBAAA;ER6rCL;AQvsCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERyrCH;AQvrCG;;;EACE,wBAAA;ER2rCL;AQnrCD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERqrCD;AQ/qCG;;;;;;EAAW,aAAA;ERurCd;AQtrCG;;;;;;EACE,wBAAA;ER6rCL;AQvrCD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERyrCD;AY/9CD;;;;EAIE,gEAAA;EZi+CD;AY79CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZ+9CD;AY39CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZ69CD;AYn+CD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZ69CH;AYx9CD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ09CD;AYr+CD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZy9CH;AYp9CD;EACE,mBAAA;EACA,oBAAA;EZs9CD;AahhDD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EdshDD;AahhDC;EAAA;IAFE,cAAA;IbshDD;EACF;AalhDC;EAAA;IAFE,cAAA;IbwhDD;EACF;AaphDD;EAAA;IAFI,eAAA;Ib0hDD;EACF;AajhDD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed2iDD;Aa9gDD;ECvBE,oBAAA;EACA,qBAAA;EdwiDD;AexiDG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;EfwiDL;AexhDG;EACE,aAAA;Ef0hDL;AenhDC;EACE,aAAA;EfqhDH;AethDC;EACE,qBAAA;EfwhDH;AezhDC;EACE,qBAAA;Ef2hDH;Ae5hDC;EACE,YAAA;Ef8hDH;Ae/hDC;EACE,qBAAA;EfiiDH;AeliDC;EACE,qBAAA;EfoiDH;AeriDC;EACE,YAAA;EfuiDH;AexiDC;EACE,qBAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,YAAA;EfgjDH;AejjDC;EACE,qBAAA;EfmjDH;AepjDC;EACE,oBAAA;EfsjDH;AexiDC;EACE,aAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,qBAAA;EfgjDH;AejjDC;EACE,YAAA;EfmjDH;AepjDC;EACE,qBAAA;EfsjDH;AevjDC;EACE,qBAAA;EfyjDH;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qED;EACE,kBAAA;EhBirED;AgB3qED;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhB6qED;AgBhrED;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhB6qEP;AgB3rED;EAoBI,wBAAA;EACA,kCAAA;EhB0qEH;AgB/rED;;;;;;EA8BQ,eAAA;EhByqEP;AgBvsED;EAoCI,+BAAA;EhBsqEH;AgB1sED;EAyCI,2BAAA;EhBoqEH;AgB7pED;;;;;;EAOQ,cAAA;EhB8pEP;AgBnpED;EACE,2BAAA;EhBqpED;AgBtpED;;;;;;EAQQ,2BAAA;EhBspEP;AgB9pED;;EAeM,0BAAA;EhBmpEL;AgBzoED;EAEI,2BAAA;EhB0oEH;AgBjoED;EAEI,2BAAA;EhBkoEH;AgBznED;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB2nED;AgBtnEG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhBynEL;AiBrwEC;;;;;;;;;;;;EAOI,2BAAA;EjB4wEL;AiBtwEC;;;;;EAMI,2BAAA;EjBuwEL;AiB1xEC;;;;;;;;;;;;EAOI,2BAAA;EjBiyEL;AiB3xEC;;;;;EAMI,2BAAA;EjB4xEL;AiB/yEC;;;;;;;;;;;;EAOI,2BAAA;EjBszEL;AiBhzEC;;;;;EAMI,2BAAA;EjBizEL;AiBp0EC;;;;;;;;;;;;EAOI,2BAAA;EjB20EL;AiBr0EC;;;;;EAMI,2BAAA;EjBs0EL;AiBz1EC;;;;;;;;;;;;EAOI,2BAAA;EjBg2EL;AiB11EC;;;;;EAMI,2BAAA;EjB21EL;AgBzsED;EACE,kBAAA;EACA,mBAAA;EhB2sED;AgB9oED;EAAA;IA1DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,8CAAA;IACA,2BAAA;IhB4sED;EgBtpEH;IAlDM,kBAAA;IhB2sEH;EgBzpEH;;;;;;IAzCY,qBAAA;IhB0sET;EgBjqEH;IAjCM,WAAA;IhBqsEH;EgBpqEH;;;;;;IAxBY,gBAAA;IhBosET;EgB5qEH;;;;;;IApBY,iBAAA;IhBwsET;EgBprEH;;;;IAPY,kBAAA;IhBisET;EACF;AkB35ED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB05ED;AkBv5ED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBy5ED;AkBt5ED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBw5ED;AkB74ED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELo3ET;AkB74ED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+4ED;AkB34ED;EACE,gBAAA;ElB64ED;AkBz4ED;EACE,gBAAA;EACA,aAAA;ElB24ED;AkBv4ED;;EAEE,cAAA;ElBy4ED;AkBr4ED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENi9ED;AkBr4ED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBu4ED;AkB72ED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAyHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELizET;AmBz7EC;EACE,uBAAA;EACA,YAAA;EdUF,wFAAA;EACQ,gFAAA;ELk7ET;AKj5EC;EACE,gBAAA;EACA,YAAA;ELm5EH;AKj5EC;EAA0B,gBAAA;ELo5E3B;AKn5EC;EAAgC,gBAAA;ELs5EjC;AkBr3EC;;;EAGE,2BAAA;EACA,YAAA;ElBu3EH;AkBp3EC;;EAEE,qBAAA;ElBs3EH;AkBl3EC;EACE,cAAA;ElBo3EH;AkBx2ED;EACE,0BAAA;ElB02ED;AkBt0ED;EAxBE;;;;IAIE,mBAAA;IlBi2ED;EkB/1EC;;;;;;;;IAEE,mBAAA;IlBu2EH;EkBp2EC;;;;;;;;IAEE,mBAAA;IlB42EH;EACF;AkBl2ED;EACE,qBAAA;ElBo2ED;AkB51ED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;ElB81ED;AkBn2ED;;EAQI,kBAAA;EACA,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElB+1EH;AkB51ED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElB81ED;AkB31ED;;EAEE,kBAAA;ElB61ED;AkBz1ED;;EAEE,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElB21ED;AkBz1ED;;EAEE,eAAA;EACA,mBAAA;ElB21ED;AkBl1EC;;;;;;EAGE,qBAAA;ElBu1EH;AkBj1EC;;;;EAEE,qBAAA;ElBq1EH;AkB/0EC;;;;EAGI,qBAAA;ElBk1EL;AkBv0ED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;EACA,kBAAA;ElBu0ED;AkBr0EC;;EAEE,iBAAA;EACA,kBAAA;ElBu0EH;AkB1zED;EC1PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBujFD;AmBrjFC;EACE,cAAA;EACA,mBAAA;EnBujFH;AmBpjFC;;EAEE,cAAA;EnBsjFH;AkBt0ED;EC7PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBskFD;AmBpkFC;EACE,cAAA;EACA,mBAAA;EnBskFH;AmBnkFC;;EAEE,cAAA;EnBqkFH;AkBr1ED;EAKI,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ElBm1EH;AkB/0ED;EC1QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB4lFD;AmB1lFC;EACE,cAAA;EACA,mBAAA;EnB4lFH;AmBzlFC;;EAEE,cAAA;EnB2lFH;AkB31ED;EC7QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB2mFD;AmBzmFC;EACE,cAAA;EACA,mBAAA;EnB2mFH;AmBxmFC;;EAEE,cAAA;EnB0mFH;AkB12ED;EAKI,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;ElBw2EH;AkB/1ED;EAEE,oBAAA;ElBg2ED;AkBl2ED;EAMI,uBAAA;ElB+1EH;AkB31ED;EACE,oBAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,sBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkBz1ED;;;;;;;;;;ECrXI,gBAAA;EnB0tFH;AkBr2ED;ECjXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL2qFT;AmBztFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;ELgrFT;AkB/2ED;ECvWI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBytFH;AkBp3ED;ECjWI,gBAAA;EnBwtFH;AkBp3ED;;;;;;;;;;ECxXI,gBAAA;EnBwvFH;AkBh4ED;ECpXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELysFT;AmBvvFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL8sFT;AkB14ED;EC1WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBuvFH;AkB/4ED;ECpWI,gBAAA;EnBsvFH;AkB/4ED;;;;;;;;;;EC3XI,gBAAA;EnBsxFH;AkB35ED;ECvXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELuuFT;AmBrxFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL4uFT;AkBr6ED;EC7WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBqxFH;AkB16ED;ECvWI,gBAAA;EnBoxFH;AkBt6EC;EACG,WAAA;ElBw6EJ;AkBt6EC;EACG,QAAA;ElBw6EJ;AkB95ED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBg6ED;AkB70ED;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+4EH;EkBn1EH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB64EH;EkBx1EH;IAhDM,uBAAA;IlB24EH;EkB31EH;IA5CM,uBAAA;IACA,wBAAA;IlB04EH;EkB/1EH;;;IAtCQ,aAAA;IlB04EL;EkBp2EH;IAhCM,aAAA;IlBu4EH;EkBv2EH;IA5BM,kBAAA;IACA,wBAAA;IlBs4EH;EkB32EH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBm4EH;EkBl3EH;;IAdQ,iBAAA;IlBo4EL;EkBt3EH;;IATM,oBAAA;IACA,gBAAA;IlBm4EH;EkB33EH;IAHM,QAAA;IlBi4EH;EACF;AkBv3ED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBo3EH;AkB/3ED;;EAiBI,kBAAA;ElBk3EH;AkBn4ED;EJjfE,oBAAA;EACA,qBAAA;Edu3FD;AkBh2EC;EAAA;IAVI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB82EH;EACF;AkB94ED;EAwCI,aAAA;ElBy2EH;AkB51EC;EAAA;IAHM,0BAAA;IlBm2EL;EACF;AkB11EC;EAAA;IAHM,kBAAA;IlBi2EL;EACF;AoBn5FD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,gCAAA;MAAA,4BAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC6BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB4KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;EL8sFT;AoBt5FG;;;;;;EdrBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENk7FD;AoB15FC;;;EAGE,gBAAA;EACA,uBAAA;EpB45FH;AoBz5FC;;EAEE,YAAA;EACA,wBAAA;Ef2BF,0DAAA;EACQ,kDAAA;ELi4FT;AoBz5FC;;;EAGE,qBAAA;EACA,sBAAA;EE9CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL24FT;AoBr5FD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB68FD;AqB38FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB68FP;AqB38FC;;;EAGE,wBAAA;ErB68FH;AqBx8FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBs9FT;AoB97FD;ECnBI,gBAAA;EACA,2BAAA;ErBo9FH;AoB/7FD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB0/FD;AqBx/FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB0/FP;AqBx/FC;;;EAGE,wBAAA;ErB0/FH;AqBr/FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBmgGT;AoBx+FD;ECtBI,gBAAA;EACA,2BAAA;ErBigGH;AoBx+FD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuiGD;AqBriGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuiGP;AqBriGC;;;EAGE,wBAAA;ErBuiGH;AqBliGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBgjGT;AoBjhGD;EC1BI,gBAAA;EACA,2BAAA;ErB8iGH;AoBjhGD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBolGD;AqBllGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBolGP;AqBllGC;;;EAGE,wBAAA;ErBolGH;AqB/kGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB6lGT;AoB1jGD;EC9BI,gBAAA;EACA,2BAAA;ErB2lGH;AoB1jGD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBioGD;AqB/nGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBioGP;AqB/nGC;;;EAGE,wBAAA;ErBioGH;AqB5nGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB0oGT;AoBnmGD;EClCI,gBAAA;EACA,2BAAA;ErBwoGH;AoBnmGD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8qGD;AqB5qGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8qGP;AqB5qGC;;;EAGE,wBAAA;ErB8qGH;AqBzqGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBurGT;AoB5oGD;ECtCI,gBAAA;EACA,2BAAA;ErBqrGH;AoBvoGD;EACE,gBAAA;EACA,qBAAA;EACA,kBAAA;EpByoGD;AoBvoGC;;;;;EAKE,+BAAA;Ef7BF,0BAAA;EACQ,kBAAA;ELuqGT;AoBxoGC;;;;EAIE,2BAAA;EpB0oGH;AoBxoGC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpB0oGH;AoBtoGG;;;;EAEE,gBAAA;EACA,uBAAA;EpB0oGL;AoBjoGD;;EC/EE,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;ErBotGD;AoBpoGD;;ECnFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB2tGD;AoBvoGD;;ECvFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBkuGD;AoBtoGD;EACE,gBAAA;EACA,aAAA;EpBwoGD;AoBpoGD;EACE,iBAAA;EpBsoGD;AoB/nGC;;;EACE,aAAA;EpBmoGH;AuBvxGD;EACE,YAAA;ElBoLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELsmGT;AuB1xGC;EACE,YAAA;EvB4xGH;AuBxxGD;EACE,eAAA;EvB0xGD;AuBxxGC;EAAY,gBAAA;EvB2xGb;AuB1xGC;EAAY,oBAAA;EvB6xGb;AuB5xGC;EAAY,0BAAA;EvB+xGb;AuB5xGD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElBuKA,iDAAA;EACQ,4CAAA;KAAA,yCAAA;EAOR,oCAAA;EACQ,+BAAA;KAAA,4BAAA;EAGR,0CAAA;EACQ,qCAAA;KAAA,kCAAA;ELgnGT;AwB1zGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,wBAAA;EACA,qCAAA;EACA,oCAAA;ExB4zGD;AwBxzGD;;EAEE,oBAAA;ExB0zGD;AwBtzGD;EACE,YAAA;ExBwzGD;AwBpzGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBuBA,qDAAA;EACQ,6CAAA;EmBtBR,sCAAA;UAAA,8BAAA;ExBuzGD;AwBlzGC;EACE,UAAA;EACA,YAAA;ExBozGH;AwB70GD;ECxBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBw2GD;AwBn1GD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBmzGH;AwB7yGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExB+yGH;AwBzyGC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExB2yGH;AwBlyGC;;;EAGE,gBAAA;ExBoyGH;AwBhyGC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBkyGH;AwB7xGD;EAGI,gBAAA;ExB6xGH;AwBhyGD;EAQI,YAAA;ExB2xGH;AwBnxGD;EACE,YAAA;EACA,UAAA;ExBqxGD;AwB7wGD;EACE,SAAA;EACA,aAAA;ExB+wGD;AwB3wGD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExB6wGD;AwBzwGD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExB2wGD;AwBvwGD;EACE,UAAA;EACA,YAAA;ExBywGD;AwBjwGD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBiwGH;AwBvwGD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBiwGH;AwB5uGD;EAXE;IAnEA,YAAA;IACA,UAAA;IxB8zGC;EwB5vGD;IAzDA,SAAA;IACA,aAAA;IxBwzGC;EACF;A2Bv8GD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3By8GD;A2B78GD;;EAMI,oBAAA;EACA,aAAA;E3B28GH;A2Bz8GG;;;;;;;;EAIE,YAAA;E3B+8GL;A2Bz8GD;;;;EAKI,mBAAA;E3B08GH;A2Br8GD;EACE,mBAAA;E3Bu8GD;A2Bx8GD;;EAMI,aAAA;E3Bs8GH;A2B58GD;;;EAWI,kBAAA;E3Bs8GH;A2Bl8GD;EACE,kBAAA;E3Bo8GD;A2Bh8GD;EACE,gBAAA;E3Bk8GD;A2Bj8GC;ECjDA,+BAAA;EACG,4BAAA;E5Bq/GJ;A2Bh8GD;;EC9CE,8BAAA;EACG,2BAAA;E5Bk/GJ;A2B/7GD;EACE,aAAA;E3Bi8GD;A2B/7GD;EACE,kBAAA;E3Bi8GD;A2B/7GD;;EClEE,+BAAA;EACG,4BAAA;E5BqgHJ;A2B97GD;EChEE,8BAAA;EACG,2BAAA;E5BigHJ;A2B77GD;;EAEE,YAAA;E3B+7GD;A2B96GD;EACE,mBAAA;EACA,oBAAA;E3Bg7GD;A2B96GD;EACE,oBAAA;EACA,qBAAA;E3Bg7GD;A2B36GD;EtB9CE,0DAAA;EACQ,kDAAA;EL49GT;A2B36GC;EtBlDA,0BAAA;EACQ,kBAAA;ELg+GT;A2Bx6GD;EACE,gBAAA;E3B06GD;A2Bv6GD;EACE,yBAAA;EACA,wBAAA;E3By6GD;A2Bt6GD;EACE,yBAAA;E3Bw6GD;A2Bj6GD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3Bk6GH;A2Bz6GD;EAcM,aAAA;E3B85GL;A2B56GD;;;;EAsBI,kBAAA;EACA,gBAAA;E3B45GH;A2Bv5GC;EACE,kBAAA;E3By5GH;A2Bv5GC;EACE,8BAAA;ECnKF,+BAAA;EACC,8BAAA;E5B6jHF;A2Bx5GC;EACE,gCAAA;EC/KF,4BAAA;EACC,2BAAA;E5B0kHF;A2Bx5GD;EACE,kBAAA;E3B05GD;A2Bx5GD;;EC9KE,+BAAA;EACC,8BAAA;E5B0kHF;A2Bv5GD;EC5LE,4BAAA;EACC,2BAAA;E5BslHF;A2Bn5GD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3Bq5GD;A2Bz5GD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3Bs5GH;A2B/5GD;EAYI,aAAA;E3Bs5GH;A2Bl6GD;EAgBI,YAAA;E3Bq5GH;A2Bp4GD;;;;EAKM,oBAAA;EACA,wBAAA;EACA,sBAAA;E3Bq4GL;A6B9mHD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7BgnHD;A6B7mHC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7B+mHH;A6BxnHD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7BumHH;A6B9lHD;;;EV8BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnBqkHD;AmBnkHC;;;EACE,cAAA;EACA,mBAAA;EnBukHH;AmBpkHC;;;;;;EAEE,cAAA;EnB0kHH;A6BhnHD;;;EVyBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB4lHD;AmB1lHC;;;EACE,cAAA;EACA,mBAAA;EnB8lHH;AmB3lHC;;;;;;EAEE,cAAA;EnBimHH;A6B9nHD;;;EAGE,qBAAA;E7BgoHD;A6B9nHC;;;EACE,kBAAA;E7BkoHH;A6B9nHD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7BgoHD;A6B3nHD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7B6nHD;A6B1nHC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6B1nHC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6BhpHD;;EA0BI,eAAA;E7B0nHH;A6BrnHD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5B8tHJ;A6BtnHD;EACE,iBAAA;E7BwnHD;A6BtnHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5BmuHJ;A6BvnHD;EACE,gBAAA;E7BynHD;A6BpnHD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7BonHD;A6BznHD;EAUI,oBAAA;E7BknHH;A6B5nHD;EAYM,mBAAA;E7BmnHL;A6BhnHG;;;EAGE,YAAA;E7BknHL;A6B7mHC;;EAGI,oBAAA;E7B8mHL;A6B3mHC;;EAGI,mBAAA;E7B4mHL;A8BtwHD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9BwwHD;A8B3wHD;EAOI,oBAAA;EACA,gBAAA;E9BuwHH;A8B/wHD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9BuwHL;A8BtwHK;;EAEE,uBAAA;EACA,2BAAA;E9BwwHP;A8BnwHG;EACE,gBAAA;E9BqwHL;A8BnwHK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9BqwHP;A8B9vHG;;;EAGE,2BAAA;EACA,uBAAA;E9BgwHL;A8BzyHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB+yHD;A8B/yHD;EA0DI,iBAAA;E9BwvHH;A8B/uHD;EACE,kCAAA;E9BivHD;A8BlvHD;EAGI,aAAA;EAEA,qBAAA;E9BivHH;A8BtvHD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9BgvHL;A8B/uHK;EACE,uCAAA;E9BivHP;A8B3uHK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9B6uHP;A8BxuHC;EAqDA,aAAA;EA8BA,kBAAA;E9BypHD;A8B5uHC;EAwDE,aAAA;E9BurHH;A8B/uHC;EA0DI,oBAAA;EACA,oBAAA;E9BwrHL;A8BnvHC;EAgEE,WAAA;EACA,YAAA;E9BsrHH;A8B1qHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BqrHH;E8B/qHH;IAJQ,kBAAA;I9BsrHL;EACF;A8BhwHC;EAuFE,iBAAA;EACA,oBAAA;E9B4qHH;A8BpwHC;;;EA8FE,2BAAA;E9B2qHH;A8B7pHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B0qHH;E8BlqHH;;;IAHM,8BAAA;I9B0qHH;EACF;A8B3wHD;EAEI,aAAA;E9B4wHH;A8B9wHD;EAMM,oBAAA;E9B2wHL;A8BjxHD;EASM,kBAAA;E9B2wHL;A8BtwHK;;;EAGE,gBAAA;EACA,2BAAA;E9BwwHP;A8BhwHD;EAEI,aAAA;E9BiwHH;A8BnwHD;EAIM,iBAAA;EACA,gBAAA;E9BkwHL;A8BtvHD;EACE,aAAA;E9BwvHD;A8BzvHD;EAII,aAAA;E9BwvHH;A8B5vHD;EAMM,oBAAA;EACA,oBAAA;E9ByvHL;A8BhwHD;EAYI,WAAA;EACA,YAAA;E9BuvHH;A8B3uHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BsvHH;E8BhvHH;IAJQ,kBAAA;I9BuvHL;EACF;A8B/uHD;EACE,kBAAA;E9BivHD;A8BlvHD;EAKI,iBAAA;EACA,oBAAA;E9BgvHH;A8BtvHD;;;EAYI,2BAAA;E9B+uHH;A8BjuHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B8uHH;E8BtuHH;;;IAHM,8BAAA;I9B8uHH;EACF;A8BruHD;EAEI,eAAA;E9BsuHH;A8BxuHD;EAKI,gBAAA;E9BsuHH;A8B7tHD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5B08HF;A+Bp8HD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/Bs8HD;A+B97HD;EAAA;IAFI,oBAAA;I/Bo8HD;EACF;A+Br7HD;EAAA;IAFI,aAAA;I/B27HD;EACF;A+B76HD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;UAAA,oDAAA;EAEA,mCAAA;E/B86HD;A+B56HC;EACE,kBAAA;E/B86HH;A+Bl5HD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;YAAA,kBAAA;I/B86HD;E+B56HC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/B86HH;E+B36HC;IACE,qBAAA;I/B66HH;E+Bx6HC;;;IAGE,iBAAA;IACA,kBAAA;I/B06HH;EACF;A+Bt6HD;;EAGI,mBAAA;E/Bu6HH;A+Bl6HC;EAAA;;IAFI,mBAAA;I/By6HH;EACF;A+Bh6HD;;;;EAII,qBAAA;EACA,oBAAA;E/Bk6HH;A+B55HC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/Bs6HH;EACF;A+B15HD;EACE,eAAA;EACA,uBAAA;E/B45HD;A+Bv5HD;EAAA;IAFI,kBAAA;I/B65HD;EACF;A+Bz5HD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E/B25HD;A+Br5HD;EAAA;;IAFI,kBAAA;I/B45HD;EACF;A+B15HD;EACE,QAAA;EACA,uBAAA;E/B45HD;A+B15HD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/B45HD;A+Bt5HD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/Bw5HD;A+Bt5HC;;EAEE,uBAAA;E/Bw5HH;A+Bj6HD;EAaI,gBAAA;E/Bu5HH;A+B94HD;EALI;;IAEE,oBAAA;I/Bs5HH;EACF;A+B54HD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC9LA,iBAAA;EACA,oBAAA;ED+LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/B+4HD;A+B34HC;EACE,YAAA;E/B64HH;A+B35HD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/B24HH;A+Bj6HD;EAyBI,iBAAA;E/B24HH;A+Br4HD;EAAA;IAFI,eAAA;I/B24HD;EACF;A+Bl4HD;EACE,qBAAA;E/Bo4HD;A+Br4HD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/Bo4HH;A+Bx2HC;EAAA;IAtBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;YAAA,kBAAA;I/Bk4HH;E+Bl3HD;;IAbM,4BAAA;I/Bm4HL;E+Bt3HD;IAVM,mBAAA;I/Bm4HL;E+Bl4HK;;IAEE,wBAAA;I/Bo4HP;EACF;A+Bl3HD;EAAA;IAXI,aAAA;IACA,WAAA;I/Bi4HD;E+Bv3HH;IAPM,aAAA;I/Bi4HH;E+B13HH;IALQ,mBAAA;IACA,sBAAA;I/Bk4HL;EACF;A+Bv3HD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B9NA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhCwpID;AkBvqHD;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlByuHH;EkB7qHH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBuuHH;EkBlrHH;IAhDM,uBAAA;IlBquHH;EkBrrHH;IA5CM,uBAAA;IACA,wBAAA;IlBouHH;EkBzrHH;;;IAtCQ,aAAA;IlBouHL;EkB9rHH;IAhCM,aAAA;IlBiuHH;EkBjsHH;IA5BM,kBAAA;IACA,wBAAA;IlBguHH;EkBrsHH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlB6tHH;EkB5sHH;;IAdQ,iBAAA;IlB8tHL;EkBhtHH;;IATM,oBAAA;IACA,gBAAA;IlB6tHH;EkBrtHH;IAHM,QAAA;IlB2tHH;EACF;A+Bh6HC;EAAA;IANI,oBAAA;I/B06HH;E+Bx6HG;IACE,kBAAA;I/B06HL;EACF;A+Bz5HD;EAAA;IARI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BzPF,0BAAA;IACQ,kBAAA;IL+pIP;EACF;A+B/5HD;EACE,eAAA;EHpUA,4BAAA;EACC,2BAAA;E5BsuIF;A+B/5HD;EACE,kBAAA;EHzUA,8BAAA;EACC,6BAAA;EAOD,+BAAA;EACC,8BAAA;E5BquIF;A+B35HD;EChVE,iBAAA;EACA,oBAAA;EhC8uID;A+B55HC;ECnVA,kBAAA;EACA,qBAAA;EhCkvID;A+B75HC;ECtVA,kBAAA;EACA,qBAAA;EhCsvID;A+Bv5HD;EChWE,kBAAA;EACA,qBAAA;EhC0vID;A+Bn5HD;EAAA;IAJI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B25HD;EACF;A+B93HD;EAhBE;IExWA,wBAAA;IjC0vIC;E+Bj5HD;IE5WA,yBAAA;IF8WE,qBAAA;I/Bm5HD;E+Br5HD;IAKI,iBAAA;I/Bm5HH;EACF;A+B14HD;EACE,2BAAA;EACA,uBAAA;E/B44HD;A+B94HD;EAKI,gBAAA;E/B44HH;A+B34HG;;EAEE,gBAAA;EACA,+BAAA;E/B64HL;A+Bt5HD;EAcI,gBAAA;E/B24HH;A+Bz5HD;EAmBM,gBAAA;E/By4HL;A+Bv4HK;;EAEE,gBAAA;EACA,+BAAA;E/By4HP;A+Br4HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bu4HP;A+Bn4HK;;;EAGE,gBAAA;EACA,+BAAA;E/Bq4HP;A+B76HD;EA8CI,uBAAA;E/Bk4HH;A+Bj4HG;;EAEE,2BAAA;E/Bm4HL;A+Bp7HD;EAoDM,2BAAA;E/Bm4HL;A+Bv7HD;;EA0DI,uBAAA;E/Bi4HH;A+B13HK;;;EAGE,2BAAA;EACA,gBAAA;E/B43HP;A+B31HC;EAAA;IAzBQ,gBAAA;I/Bw3HP;E+Bv3HO;;IAEE,gBAAA;IACA,+BAAA;I/By3HT;E+Br3HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bu3HT;E+Bn3HO;;;IAGE,gBAAA;IACA,+BAAA;I/Bq3HT;EACF;A+Bv9HD;EA8GI,gBAAA;E/B42HH;A+B32HG;EACE,gBAAA;E/B62HL;A+B79HD;EAqHI,gBAAA;E/B22HH;A+B12HG;;EAEE,gBAAA;E/B42HL;A+Bx2HK;;;;EAEE,gBAAA;E/B42HP;A+Bp2HD;EACE,2BAAA;EACA,uBAAA;E/Bs2HD;A+Bx2HD;EAKI,gBAAA;E/Bs2HH;A+Br2HG;;EAEE,gBAAA;EACA,+BAAA;E/Bu2HL;A+Bh3HD;EAcI,gBAAA;E/Bq2HH;A+Bn3HD;EAmBM,gBAAA;E/Bm2HL;A+Bj2HK;;EAEE,gBAAA;EACA,+BAAA;E/Bm2HP;A+B/1HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bi2HP;A+B71HK;;;EAGE,gBAAA;EACA,+BAAA;E/B+1HP;A+Bv4HD;EA+CI,uBAAA;E/B21HH;A+B11HG;;EAEE,2BAAA;E/B41HL;A+B94HD;EAqDM,2BAAA;E/B41HL;A+Bj5HD;;EA2DI,uBAAA;E/B01HH;A+Bp1HK;;;EAGE,2BAAA;EACA,gBAAA;E/Bs1HP;A+B/yHC;EAAA;IA/BQ,uBAAA;I/Bk1HP;E+BnzHD;IA5BQ,2BAAA;I/Bk1HP;E+BtzHD;IAzBQ,gBAAA;I/Bk1HP;E+Bj1HO;;IAEE,gBAAA;IACA,+BAAA;I/Bm1HT;E+B/0HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bi1HT;E+B70HO;;;IAGE,gBAAA;IACA,+BAAA;I/B+0HT;EACF;A+Bv7HD;EA+GI,gBAAA;E/B20HH;A+B10HG;EACE,gBAAA;E/B40HL;A+B77HD;EAsHI,gBAAA;E/B00HH;A+Bz0HG;;EAEE,gBAAA;E/B20HL;A+Bv0HK;;;;EAEE,gBAAA;E/B20HP;AkCr9ID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElCu9ID;AkC59ID;EAQI,uBAAA;ElCu9IH;AkC/9ID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElCu9IL;AkCp+ID;EAkBI,gBAAA;ElCq9IH;AmCz+ID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC2+ID;AmC/+ID;EAOI,iBAAA;EnC2+IH;AmCl/ID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC4+IL;AmC1+IG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5Bu/IJ;AmCz+IG;;EPvBF,iCAAA;EACG,8BAAA;E5BogJJ;AmCp+IG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnCw+IL;AmCl+IG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnCu+IL;AmC7hJD;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCo+IL;AmC39ID;;EC1EM,oBAAA;EACA,iBAAA;EpCyiJL;AoCviJG;;ERMF,gCAAA;EACG,6BAAA;E5BqiJJ;AoCtiJG;;ERRF,iCAAA;EACG,8BAAA;E5BkjJJ;AmCr+ID;;EC/EM,mBAAA;EACA,iBAAA;EpCwjJL;AoCtjJG;;ERMF,gCAAA;EACG,6BAAA;E5BojJJ;AoCrjJG;;ERRF,iCAAA;EACG,8BAAA;E5BikJJ;AqCpkJD;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCskJD;AqC1kJD;EAOI,iBAAA;ErCskJH;AqC7kJD;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErCukJL;AqCrlJD;;EAmBM,uBAAA;EACA,2BAAA;ErCskJL;AqC1lJD;;EA2BM,cAAA;ErCmkJL;AqC9lJD;;EAkCM,aAAA;ErCgkJL;AqClmJD;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErC6jJL;AsC3mJD;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtC6mJD;AsCzmJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC2mJL;AsCtmJC;EACE,eAAA;EtCwmJH;AsCpmJC;EACE,oBAAA;EACA,WAAA;EtCsmJH;AsC/lJD;ECtCE,2BAAA;EvCwoJD;AuCroJG;;EAEE,2BAAA;EvCuoJL;AsClmJD;EC1CE,2BAAA;EvC+oJD;AuC5oJG;;EAEE,2BAAA;EvC8oJL;AsCrmJD;EC9CE,2BAAA;EvCspJD;AuCnpJG;;EAEE,2BAAA;EvCqpJL;AsCxmJD;EClDE,2BAAA;EvC6pJD;AuC1pJG;;EAEE,2BAAA;EvC4pJL;AsC3mJD;ECtDE,2BAAA;EvCoqJD;AuCjqJG;;EAEE,2BAAA;EvCmqJL;AsC9mJD;EC1DE,2BAAA;EvC2qJD;AuCxqJG;;EAEE,2BAAA;EvC0qJL;AwC5qJD;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExC8qJD;AwC3qJC;EACE,eAAA;ExC6qJH;AwCzqJC;EACE,oBAAA;EACA,WAAA;ExC2qJH;AwCxqJC;;EAEE,QAAA;EACA,kBAAA;ExC0qJH;AwCrqJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExCuqJL;AwClqJC;;EAEE,gBAAA;EACA,2BAAA;ExCoqJH;AwCjqJC;EACE,cAAA;ExCmqJH;AwChqJC;EACE,mBAAA;ExCkqJH;AwC/pJC;EACE,kBAAA;ExCiqJH;AyC3tJD;EACE,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzC6tJD;AyCjuJD;;EAQI,gBAAA;EzC6tJH;AyCruJD;EAYI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzC4tJH;AyC1uJD;EAkBI,2BAAA;EzC2tJH;AyCxtJC;;EAEE,oBAAA;EzC0tJH;AyCjvJD;EA2BI,iBAAA;EzCytJH;AyCxsJD;EAAA;IAbI,iBAAA;IzCytJD;EyCvtJC;;IAEE,oBAAA;IACA,qBAAA;IzCytJH;EyCjtJH;;IAHM,iBAAA;IzCwtJH;EACF;A0CjwJD;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErCiLA,6CAAA;EACK,wCAAA;EACG,qCAAA;ELmlJT;A0C7wJD;;EAaI,mBAAA;EACA,oBAAA;E1CowJH;A0ChwJC;;;EAGE,uBAAA;E1CkwJH;A0CvxJD;EA0BI,cAAA;EACA,gBAAA;E1CgwJH;A2CzxJD;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3C2xJD;A2C/xJD;EAQI,eAAA;EAEA,gBAAA;E3CyxJH;A2CnyJD;EAeI,mBAAA;E3CuxJH;A2CtyJD;;EAqBI,kBAAA;E3CqxJH;A2C1yJD;EAyBI,iBAAA;E3CoxJH;A2C5wJD;;EAEE,qBAAA;E3C8wJD;A2ChxJD;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C8wJH;A2CtwJD;ECvDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cg0JD;A2C3wJD;EClDI,2BAAA;E5Cg0JH;A2C9wJD;EC/CI,gBAAA;E5Cg0JH;A2C7wJD;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C20JD;A2ClxJD;ECtDI,2BAAA;E5C20JH;A2CrxJD;ECnDI,gBAAA;E5C20JH;A2CpxJD;EC/DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cs1JD;A2CzxJD;EC1DI,2BAAA;E5Cs1JH;A2C5xJD;ECvDI,gBAAA;E5Cs1JH;A2C3xJD;ECnEE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Ci2JD;A2ChyJD;EC9DI,2BAAA;E5Ci2JH;A2CnyJD;EC3DI,gBAAA;E5Ci2JH;A6Cn2JD;EACE;IAAQ,6BAAA;I7Cs2JP;E6Cr2JD;IAAQ,0BAAA;I7Cw2JP;EACF;A6Cr2JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6C72JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6Cn2JD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCsCA,wDAAA;EACQ,gDAAA;ELg0JT;A6Cl2JD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCyBA,wDAAA;EACQ,gDAAA;EAyHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELotJT;A6C/1JD;;ECCI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDAF,oCAAA;UAAA,4BAAA;E7Cm2JD;A6C51JD;;ExC5CE,4DAAA;EACK,uDAAA;EACG,oDAAA;EL44JT;A6Cz1JD;EErEE,2BAAA;E/Ci6JD;A+C95JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci3JH;A6C71JD;EEzEE,2BAAA;E/Cy6JD;A+Ct6JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy3JH;A6Cj2JD;EE7EE,2BAAA;E/Ci7JD;A+C96JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci4JH;A6Cr2JD;EEjFE,2BAAA;E/Cy7JD;A+Ct7JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy4JH;AgDj8JD;EAEE,kBAAA;EhDk8JD;AgDh8JC;EACE,eAAA;EhDk8JH;AgD97JD;;EAEE,SAAA;EACA,kBAAA;EhDg8JD;AgD77JD;EACE,gBAAA;EhD+7JD;AgD57JD;EACE,gBAAA;EhD87JD;AgD37JD;;EAEE,oBAAA;EhD67JD;AgD17JD;;EAEE,qBAAA;EhD47JD;AgDz7JD;;;EAGE,qBAAA;EACA,qBAAA;EhD27JD;AgDx7JD;EACE,wBAAA;EhD07JD;AgDv7JD;EACE,wBAAA;EhDy7JD;AgDr7JD;EACE,eAAA;EACA,oBAAA;EhDu7JD;AgDj7JD;EACE,iBAAA;EACA,kBAAA;EhDm7JD;AiDr+JD;EAEE,qBAAA;EACA,iBAAA;EjDs+JD;AiD99JD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjD+9JD;AiD59JC;ErB3BA,8BAAA;EACC,6BAAA;E5B0/JF;AiD79JC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5Bu/JF;AiDt9JD;EACE,gBAAA;EjDw9JD;AiDz9JD;EAII,gBAAA;EjDw9JH;AiDp9JC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDs9JH;AiDh9JC;;;EAGE,2BAAA;EACA,gBAAA;EACA,qBAAA;EjDk9JH;AiDv9JC;;;EASI,gBAAA;EjDm9JL;AiD59JC;;;EAYI,gBAAA;EjDq9JL;AiDh9JC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDk9JH;AiDx9JC;;;;;;;;;EAYI,gBAAA;EjDu9JL;AiDn+JC;;;EAeI,gBAAA;EjDy9JL;AkDrjKC;EACE,gBAAA;EACA,2BAAA;ElDujKH;AkDrjKG;EACE,gBAAA;ElDujKL;AkDxjKG;EAII,gBAAA;ElDujKP;AkDpjKK;;EAEE,gBAAA;EACA,2BAAA;ElDsjKP;AkDpjKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsjKP;AkD3kKC;EACE,gBAAA;EACA,2BAAA;ElD6kKH;AkD3kKG;EACE,gBAAA;ElD6kKL;AkD9kKG;EAII,gBAAA;ElD6kKP;AkD1kKK;;EAEE,gBAAA;EACA,2BAAA;ElD4kKP;AkD1kKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4kKP;AkDjmKC;EACE,gBAAA;EACA,2BAAA;ElDmmKH;AkDjmKG;EACE,gBAAA;ElDmmKL;AkDpmKG;EAII,gBAAA;ElDmmKP;AkDhmKK;;EAEE,gBAAA;EACA,2BAAA;ElDkmKP;AkDhmKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDkmKP;AkDvnKC;EACE,gBAAA;EACA,2BAAA;ElDynKH;AkDvnKG;EACE,gBAAA;ElDynKL;AkD1nKG;EAII,gBAAA;ElDynKP;AkDtnKK;;EAEE,gBAAA;EACA,2BAAA;ElDwnKP;AkDtnKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDwnKP;AiD5hKD;EACE,eAAA;EACA,oBAAA;EjD8hKD;AiD5hKD;EACE,kBAAA;EACA,kBAAA;EjD8hKD;AmDlpKD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;EL2lKT;AmDjpKD;EACE,eAAA;EnDmpKD;AmD9oKD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5BqqKF;AmDppKD;EAMI,gBAAA;EnDipKH;AmD5oKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnD8oKD;AmDlpKD;;;;;EAWI,gBAAA;EnD8oKH;AmDzoKD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBxCA,iCAAA;EACC,gCAAA;E5BorKF;AmDnoKD;;EAGI,kBAAA;EnDooKH;AmDvoKD;;EAMM,qBAAA;EACA,kBAAA;EnDqoKL;AmDjoKG;;EAEI,eAAA;EvBvEN,8BAAA;EACC,6BAAA;E5B2sKF;AmDhoKG;;EAEI,kBAAA;EvBtEN,iCAAA;EACC,gCAAA;E5BysKF;AmD7nKD;EAEI,qBAAA;EnD8nKH;AmD3nKD;EACE,qBAAA;EnD6nKD;AmDrnKD;;;EAII,kBAAA;EnDsnKH;AmD1nKD;;;EAOM,oBAAA;EACA,qBAAA;EnDwnKL;AmDhoKD;;EvBnGE,8BAAA;EACC,6BAAA;E5BuuKF;AmDroKD;;;;EAmBQ,6BAAA;EACA,8BAAA;EnDwnKP;AmD5oKD;;;;;;;;EAwBU,6BAAA;EnD8nKT;AmDtpKD;;;;;;;;EA4BU,8BAAA;EnDooKT;AmDhqKD;;EvB3FE,iCAAA;EACC,gCAAA;E5B+vKF;AmDrqKD;;;;EAyCQ,gCAAA;EACA,iCAAA;EnDkoKP;AmD5qKD;;;;;;;;EA8CU,gCAAA;EnDwoKT;AmDtrKD;;;;;;;;EAkDU,iCAAA;EnD8oKT;AmDhsKD;;;;EA2DI,+BAAA;EnD2oKH;AmDtsKD;;EA+DI,eAAA;EnD2oKH;AmD1sKD;;EAmEI,WAAA;EnD2oKH;AmD9sKD;;;;;;;;;;;;EA0EU,gBAAA;EnDkpKT;AmD5tKD;;;;;;;;;;;;EA8EU,iBAAA;EnD4pKT;AmD1uKD;;;;;;;;EAuFU,kBAAA;EnD6pKT;AmDpvKD;;;;;;;;EAgGU,kBAAA;EnD8pKT;AmD9vKD;EAsGI,WAAA;EACA,kBAAA;EnD2pKH;AmDjpKD;EACE,qBAAA;EnDmpKD;AmDppKD;EAKI,kBAAA;EACA,oBAAA;EnDkpKH;AmDxpKD;EASM,iBAAA;EnDkpKL;AmD3pKD;EAcI,kBAAA;EnDgpKH;AmD9pKD;;EAkBM,+BAAA;EnDgpKL;AmDlqKD;EAuBI,eAAA;EnD8oKH;AmDrqKD;EAyBM,kCAAA;EnD+oKL;AmDxoKD;ECpPE,uBAAA;EpD+3KD;AoD73KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD+3KH;AoDl4KC;EAMI,2BAAA;EpD+3KL;AoDr4KC;EASI,gBAAA;EACA,2BAAA;EpD+3KL;AoD53KC;EAEI,8BAAA;EpD63KL;AmDvpKD;ECvPE,uBAAA;EpDi5KD;AoD/4KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDi5KH;AoDp5KC;EAMI,2BAAA;EpDi5KL;AoDv5KC;EASI,gBAAA;EACA,2BAAA;EpDi5KL;AoD94KC;EAEI,8BAAA;EpD+4KL;AmDtqKD;EC1PE,uBAAA;EpDm6KD;AoDj6KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDm6KH;AoDt6KC;EAMI,2BAAA;EpDm6KL;AoDz6KC;EASI,gBAAA;EACA,2BAAA;EpDm6KL;AoDh6KC;EAEI,8BAAA;EpDi6KL;AmDrrKD;EC7PE,uBAAA;EpDq7KD;AoDn7KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDq7KH;AoDx7KC;EAMI,2BAAA;EpDq7KL;AoD37KC;EASI,gBAAA;EACA,2BAAA;EpDq7KL;AoDl7KC;EAEI,8BAAA;EpDm7KL;AmDpsKD;EChQE,uBAAA;EpDu8KD;AoDr8KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDu8KH;AoD18KC;EAMI,2BAAA;EpDu8KL;AoD78KC;EASI,gBAAA;EACA,2BAAA;EpDu8KL;AoDp8KC;EAEI,8BAAA;EpDq8KL;AmDntKD;ECnQE,uBAAA;EpDy9KD;AoDv9KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDy9KH;AoD59KC;EAMI,2BAAA;EpDy9KL;AoD/9KC;EASI,gBAAA;EACA,2BAAA;EpDy9KL;AoDt9KC;EAEI,8BAAA;EpDu9KL;AqDv+KD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDy+KD;AqD9+KD;;;;;EAYI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDy+KH;AqDp+KD;EACE,wBAAA;ErDs+KD;AqDl+KD;EACE,qBAAA;ErDo+KD;AsD//KD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;EL08KT;AsDzgLD;EASI,oBAAA;EACA,mCAAA;EtDmgLH;AsD9/KD;EACE,eAAA;EACA,oBAAA;EtDggLD;AsD9/KD;EACE,cAAA;EACA,oBAAA;EtDggLD;AuDthLD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtB+hLD;AuDvhLC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBuiLD;AuDnhLC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDqhLH;AwD1iLD;EACE,kBAAA;ExD4iLD;AwDxiLD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDuiLD;AwDpiLC;EnD+GA,uCAAA;EACI,mCAAA;EACC,kCAAA;EACG,+BAAA;EAkER,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELu3KT;AwD1iLC;EnD2GA,oCAAA;EACI,gCAAA;EACC,+BAAA;EACG,4BAAA;ELk8KT;AwD9iLD;EACE,oBAAA;EACA,kBAAA;ExDgjLD;AwD5iLD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExD8iLD;AwD1iLD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;UAAA,8BAAA;EAEA,YAAA;ExD4iLD;AwDxiLD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExD0iLD;AwDxiLC;ElCrEA,YAAA;EAGA,0BAAA;EtB8mLD;AwD3iLC;ElCtEA,cAAA;EAGA,2BAAA;EtBknLD;AwD1iLD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExD4iLD;AwDziLD;EACE,kBAAA;ExD2iLD;AwDviLD;EACE,WAAA;EACA,yBAAA;ExDyiLD;AwDpiLD;EACE,oBAAA;EACA,eAAA;ExDsiLD;AwDliLD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExDoiLD;AwDviLD;EAQI,kBAAA;EACA,kBAAA;ExDkiLH;AwD3iLD;EAaI,mBAAA;ExDiiLH;AwD9iLD;EAiBI,gBAAA;ExDgiLH;AwD3hLD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExD6hLD;AwD3gLD;EAZE;IACE,cAAA;IACA,mBAAA;IxD0hLD;EwDxhLD;InDvEA,mDAAA;IACQ,2CAAA;ILkmLP;EwDvhLD;IAAY,cAAA;IxD0hLX;EACF;AwDrhLD;EAFE;IAAY,cAAA;IxD2hLX;EACF;AyD1qLD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EnCXA,YAAA;EAGA,0BAAA;EtBqrLD;AyD1qLC;EnCdA,cAAA;EAGA,2BAAA;EtByrLD;AyD7qLC;EAAW,kBAAA;EAAmB,gBAAA;EzDirL/B;AyDhrLC;EAAW,kBAAA;EAAmB,gBAAA;EzDorL/B;AyDnrLC;EAAW,iBAAA;EAAmB,gBAAA;EzDurL/B;AyDtrLC;EAAW,mBAAA;EAAmB,gBAAA;EzD0rL/B;AyDtrLD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzDwrLD;AyDprLD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzDsrLD;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,YAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,YAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;A0DlxLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;UAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErD6CA,mDAAA;EACQ,2CAAA;EqD1CR,qBAAA;E1DkxLD;A0D/wLC;EAAY,mBAAA;E1DkxLb;A0DjxLC;EAAY,mBAAA;E1DoxLb;A0DnxLC;EAAY,kBAAA;E1DsxLb;A0DrxLC;EAAY,oBAAA;E1DwxLb;A0DrxLD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1DuxLD;A0DpxLD;EACE,mBAAA;E1DsxLD;A0D9wLC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1DgxLH;A0D7wLD;EACE,oBAAA;E1D+wLD;A0D7wLD;EACE,oBAAA;EACA,aAAA;E1D+wLD;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1D8wLL;A0D3wLC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1D8wLL;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1D8wLL;A0D1wLC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D4wLH;A0D3wLG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D6wLL;A2D14LD;EACE,oBAAA;E3D44LD;A2Dz4LD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D24LD;A2D94LD;EAMI,eAAA;EACA,oBAAA;EtD6KF,2CAAA;EACK,sCAAA;EACG,mCAAA;EL+tLT;A2Dr5LD;;EAcM,gBAAA;E3D24LL;A2Dj3LC;EAAA;ItDiKA,wDAAA;IAEK,8CAAA;IACG,wCAAA;IA7JR,qCAAA;IAEQ,6BAAA;IA+GR,2BAAA;IAEQ,mBAAA;ILowLP;E2D/4LG;;ItDmHJ,4CAAA;IACQ,oCAAA;IsDjHF,SAAA;I3Dk5LL;E2Dh5LG;;ItD8GJ,6CAAA;IACQ,qCAAA;IsD5GF,SAAA;I3Dm5LL;E2Dj5LG;;;ItDyGJ,yCAAA;IACQ,iCAAA;IsDtGF,SAAA;I3Do5LL;EACF;A2D17LD;;;EA6CI,gBAAA;E3Dk5LH;A2D/7LD;EAiDI,SAAA;E3Di5LH;A2Dl8LD;;EAsDI,oBAAA;EACA,QAAA;EACA,aAAA;E3Dg5LH;A2Dx8LD;EA4DI,YAAA;E3D+4LH;A2D38LD;EA+DI,aAAA;E3D+4LH;A2D98LD;;EAmEI,SAAA;E3D+4LH;A2Dl9LD;EAuEI,aAAA;E3D84LH;A2Dr9LD;EA0EI,YAAA;E3D84LH;A2Dt4LD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErC9FA,cAAA;EAGA,2BAAA;EqC6FA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3Dy4LD;A2Dp4LC;EblGE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Cy+LH;A2Dx4LC;EACE,YAAA;EACA,UAAA;EbvGA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Ck/LH;A2D14LC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErCtHF,cAAA;EAGA,2BAAA;EtBigMD;A2D36LD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3D24LH;A2Dp7LD;;EA6CI,WAAA;EACA,oBAAA;E3D24LH;A2Dz7LD;;EAkDI,YAAA;EACA,qBAAA;E3D24LH;A2D97LD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;E3D24LH;A2Dt4LG;EACE,kBAAA;E3Dw4LL;A2Dp4LG;EACE,kBAAA;E3Ds4LL;A2D53LD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3D83LD;A2Dv4LD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAWA,2BAAA;EACA,oCAAA;E3Do3LH;A2Dn5LD;EAkCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3Do3LH;A2D72LD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+2LD;A2D92LC;EACE,mBAAA;E3Dg3LH;A2Dv0LD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3Dy2LH;E2Dj3LD;;IAYI,oBAAA;I3Dy2LH;E2Dr3LD;;IAgBI,qBAAA;I3Dy2LH;E2Dp2LD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3Ds2LD;E2Dl2LD;IACE,cAAA;I3Do2LD;EACF;A4DlmMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5DgoMH;A4D9nMC;;;;;;;;;;;;;;;EACE,aAAA;E5D8oMH;AiCtpMD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7DiqMD;AiCxpMD;EACE,yBAAA;EjC0pMD;AiCxpMD;EACE,wBAAA;EjC0pMD;AiClpMD;EACE,0BAAA;EjCopMD;AiClpMD;EACE,2BAAA;EjCopMD;AiClpMD;EACE,oBAAA;EjCopMD;AiClpMD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D8qMD;AiChpMD;EACE,0BAAA;EjCkpMD;AiC3oMD;EACE,iBAAA;EjC6oMD;A+D9qMD;EACE,qBAAA;E/DgrMD;A+D1qMD;;;;ECdE,0BAAA;EhE8rMD;A+DzqMD;;;;;;;;;;;;EAYE,0BAAA;E/D2qMD;A+DpqMD;EAAA;IChDE,2BAAA;IhEwtMC;EgEvtMD;IAAU,gBAAA;IhE0tMT;EgEztMD;IAAU,+BAAA;IhE4tMT;EgE3tMD;;IACU,gCAAA;IhE8tMT;EACF;A+D9qMD;EAAA;IAFI,2BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,4BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,kCAAA;I/DorMD;EACF;A+D7qMD;EAAA;ICrEE,2BAAA;IhEsvMC;EgErvMD;IAAU,gBAAA;IhEwvMT;EgEvvMD;IAAU,+BAAA;IhE0vMT;EgEzvMD;;IACU,gCAAA;IhE4vMT;EACF;A+DvrMD;EAAA;IAFI,2BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,4BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,kCAAA;I/D6rMD;EACF;A+DtrMD;EAAA;IC1FE,2BAAA;IhEoxMC;EgEnxMD;IAAU,gBAAA;IhEsxMT;EgErxMD;IAAU,+BAAA;IhEwxMT;EgEvxMD;;IACU,gCAAA;IhE0xMT;EACF;A+DhsMD;EAAA;IAFI,2BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,4BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,kCAAA;I/DssMD;EACF;A+D/rMD;EAAA;IC/GE,2BAAA;IhEkzMC;EgEjzMD;IAAU,gBAAA;IhEozMT;EgEnzMD;IAAU,+BAAA;IhEszMT;EgErzMD;;IACU,gCAAA;IhEwzMT;EACF;A+DzsMD;EAAA;IAFI,2BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,4BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,kCAAA;I/D+sMD;EACF;A+DxsMD;EAAA;IC5HE,0BAAA;IhEw0MC;EACF;A+DxsMD;EAAA;ICjIE,0BAAA;IhE60MC;EACF;A+DxsMD;EAAA;ICtIE,0BAAA;IhEk1MC;EACF;A+DxsMD;EAAA;IC3IE,0BAAA;IhEu1MC;EACF;A+DrsMD;ECnJE,0BAAA;EhE21MD;A+DlsMD;EAAA;ICjKE,2BAAA;IhEu2MC;EgEt2MD;IAAU,gBAAA;IhEy2MT;EgEx2MD;IAAU,+BAAA;IhE22MT;EgE12MD;;IACU,gCAAA;IhE62MT;EACF;A+DhtMD;EACE,0BAAA;E/DktMD;A+D7sMD;EAAA;IAFI,2BAAA;I/DmtMD;EACF;A+DjtMD;EACE,0BAAA;E/DmtMD;A+D9sMD;EAAA;IAFI,4BAAA;I/DotMD;EACF;A+DltMD;EACE,0BAAA;E/DotMD;A+D/sMD;EAAA;IAFI,kCAAA;I/DqtMD;EACF;A+D9sMD;EAAA;ICpLE,0BAAA;IhEs4MC;EACF","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n 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');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.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 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.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 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .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 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .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 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .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 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n }\n .form-control-static {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n min-height: (@line-height-computed + @font-size-small);\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n }\n .form-control-static {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n min-height: (@line-height-computed + @font-size-large);\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: (@grid-gutter-width / 2);\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: ((@padding-large-vertical * @line-height-large) + 1);\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n pointer-events: none; // Future-proof disabling of clicks\n .opacity(.65);\n .box-shadow(none);\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base solid;\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n border-top-right-radius: @border-radius-base;\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n border-bottom-left-radius: @border-radius-base;\n .border-top-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @border-radius-base;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding: @jumbotron-padding (@jumbotron-padding / 2);\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding: (@jumbotron-padding * 1.6) 0;\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: (@font-size-base * 4.5);\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Linked list items\n//\n// Use anchor elements instead of `li`s or `div`s to create linked list items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsable panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n min-height: (@modal-title-padding + @modal-title-line-height);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-small;\n font-weight: normal;\n line-height: 1.4;\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n text-decoration: none;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Reset font and text properties given new insertion method\n font-family: @font-family-base;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: @line-height-base;\n text-align: left;\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Overrides for proper insertion\n white-space: normal;\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: -15px;\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: -15px;\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (will be removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]} \ No newline at end of file
diff --git a/web/nms-public.gathering.org/css/bootstrap.min.css b/web/nms-public.gathering.org/css/bootstrap.min.css
new file mode 100644
index 0000000..cd1c616
--- /dev/null
+++ b/web/nms-public.gathering.org/css/bootstrap.min.css
@@ -0,0 +1,5 @@
+/*!
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */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}select{background:#fff!important}.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:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}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],input[type=time],input[type=datetime-local],input[type=month]{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}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}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}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .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}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.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{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.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.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.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.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.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.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.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.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.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.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.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.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-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 solid}.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-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{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{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}.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}.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:baseline;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:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-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-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{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.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{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.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{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:focus,a.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{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:focus,a.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{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:focus,a.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{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-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-weight:400;line-height:1.4;filter:alpha(opacity=0);opacity:0}.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;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{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-weight:400;line-height:1.42857143;text-align:left;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)}.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:1000;perspective:1000}.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}.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;margin-top:-10px;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}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}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}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}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}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/web/nms-public.gathering.org/css/jquery.datetimepicker.css b/web/nms-public.gathering.org/css/jquery.datetimepicker.css
new file mode 100644
index 0000000..beda145
--- /dev/null
+++ b/web/nms-public.gathering.org/css/jquery.datetimepicker.css
@@ -0,0 +1,568 @@
+.xdsoft_datetimepicker {
+ box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.506);
+ background: #fff;
+ border-bottom: 1px solid #bbb;
+ border-left: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ border-top: 1px solid #ccc;
+ color: #333;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ padding: 8px;
+ padding-left: 0;
+ padding-top: 2px;
+ position: absolute;
+ z-index: 9999;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: none;
+}
+.xdsoft_datetimepicker.xdsoft_rtl {
+ padding: 8px 0 8px 8px;
+}
+
+.xdsoft_datetimepicker iframe {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 75px;
+ height: 210px;
+ background: transparent;
+ border: none;
+}
+
+/*For IE8 or lower*/
+.xdsoft_datetimepicker button {
+ border: none !important;
+}
+
+.xdsoft_noselect {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none;
+}
+
+.xdsoft_noselect::selection { background: transparent }
+.xdsoft_noselect::-moz-selection { background: transparent }
+
+.xdsoft_datetimepicker.xdsoft_inline {
+ display: inline-block;
+ position: static;
+ box-shadow: none;
+}
+
+.xdsoft_datetimepicker * {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker {
+ display: none;
+}
+
+.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active {
+ display: block;
+}
+
+.xdsoft_datetimepicker .xdsoft_datepicker {
+ width: 224px;
+ float: left;
+ margin-left: 8px;
+}
+.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_datepicker {
+ float: right;
+ margin-right: 8px;
+ margin-left: 0;
+}
+
+.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker {
+ width: 256px;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker {
+ width: 58px;
+ float: left;
+ text-align: center;
+ margin-left: 8px;
+ margin-top: 0;
+}
+.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker {
+ float: right;
+ margin-right: 8px;
+ margin-left: 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker {
+ margin-top: 8px;
+ margin-bottom: 3px
+}
+
+.xdsoft_datetimepicker .xdsoft_mounthpicker {
+ position: relative;
+ text-align: center;
+}
+
+.xdsoft_datetimepicker .xdsoft_label i,
+.xdsoft_datetimepicker .xdsoft_prev,
+.xdsoft_datetimepicker .xdsoft_next,
+.xdsoft_datetimepicker .xdsoft_today_button {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC);
+}
+
+.xdsoft_datetimepicker .xdsoft_label i {
+ opacity: 0.5;
+ background-position: -92px -19px;
+ display: inline-block;
+ width: 9px;
+ height: 20px;
+ vertical-align: middle;
+}
+
+.xdsoft_datetimepicker .xdsoft_prev {
+ float: left;
+ background-position: -20px 0;
+}
+.xdsoft_datetimepicker .xdsoft_today_button {
+ float: left;
+ background-position: -70px 0;
+ margin-left: 5px;
+}
+
+.xdsoft_datetimepicker .xdsoft_next {
+ float: right;
+ background-position: 0 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_next,
+.xdsoft_datetimepicker .xdsoft_prev ,
+.xdsoft_datetimepicker .xdsoft_today_button {
+ background-color: transparent;
+ background-repeat: no-repeat;
+ border: 0 none;
+ cursor: pointer;
+ display: block;
+ height: 30px;
+ opacity: 0.5;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ outline: medium none;
+ overflow: hidden;
+ padding: 0;
+ position: relative;
+ text-indent: 100%;
+ white-space: nowrap;
+ width: 20px;
+ min-width: 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next {
+ float: none;
+ background-position: -40px -15px;
+ height: 15px;
+ width: 30px;
+ display: block;
+ margin-left: 14px;
+ margin-top: 7px;
+}
+.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_prev,
+.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_timepicker .xdsoft_next {
+ float: none;
+ margin-left: 0;
+ margin-right: 14px;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev {
+ background-position: -40px 0;
+ margin-bottom: 7px;
+ margin-top: 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box {
+ height: 151px;
+ overflow: hidden;
+ border-bottom: 1px solid #ddd;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div {
+ background: #f5f5f5;
+ border-top: 1px solid #ddd;
+ color: #666;
+ font-size: 12px;
+ text-align: center;
+ border-collapse: collapse;
+ cursor: pointer;
+ border-bottom-width: 0;
+ height: 25px;
+ line-height: 25px;
+}
+
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child {
+ border-top-width: 0;
+}
+
+.xdsoft_datetimepicker .xdsoft_today_button:hover,
+.xdsoft_datetimepicker .xdsoft_next:hover,
+.xdsoft_datetimepicker .xdsoft_prev:hover {
+ opacity: 1;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+}
+
+.xdsoft_datetimepicker .xdsoft_label {
+ display: inline;
+ position: relative;
+ z-index: 9999;
+ margin: 0;
+ padding: 5px 3px;
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: bold;
+ background-color: #fff;
+ float: left;
+ width: 182px;
+ text-align: center;
+ cursor: pointer;
+}
+
+.xdsoft_datetimepicker .xdsoft_label:hover>span {
+ text-decoration: underline;
+}
+
+.xdsoft_datetimepicker .xdsoft_label:hover i {
+ opacity: 1.0;
+}
+
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select {
+ border: 1px solid #ccc;
+ position: absolute;
+ right: 0;
+ top: 30px;
+ z-index: 101;
+ display: none;
+ background: #fff;
+ max-height: 160px;
+ overflow-y: hidden;
+}
+
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{ right: -7px }
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{ right: 2px }
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
+ color: #fff;
+ background: #ff8000;
+}
+
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option {
+ padding: 2px 10px 2px 5px;
+ text-decoration: none !important;
+}
+
+.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
+ background: #33aaff;
+ box-shadow: #178fe5 0 1px 3px 0 inset;
+ color: #fff;
+ font-weight: 700;
+}
+
+.xdsoft_datetimepicker .xdsoft_month {
+ width: 100px;
+ text-align: right;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar {
+ clear: both;
+}
+
+.xdsoft_datetimepicker .xdsoft_year{
+ width: 48px;
+ margin-left: 5px;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar table {
+ border-collapse: collapse;
+ width: 100%;
+
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td > div {
+ padding-right: 5px;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar th {
+ height: 25px;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th {
+ width: 14.2857142%;
+ background: #f5f5f5;
+ border: 1px solid #ddd;
+ color: #666;
+ font-size: 12px;
+ text-align: right;
+ vertical-align: middle;
+ padding: 0;
+ border-collapse: collapse;
+ cursor: pointer;
+ height: 25px;
+}
+.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th {
+ width: 12.5%;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar th {
+ background: #f1f1f1;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today {
+ color: #33aaff;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_default {
+ background: #ffe9d2;
+ box-shadow: #ffb871 0 1px 4px 0 inset;
+ color: #000;
+}
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_highlighted_mint {
+ background: #c1ffc9;
+ box-shadow: #00dd1c 0 1px 4px 0 inset;
+ color: #000;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
+ background: #33aaff;
+ box-shadow: #178fe5 0 1px 3px 0 inset;
+ color: #fff;
+ font-weight: 700;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
+.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled {
+ opacity: 0.5;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+ cursor: default;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled {
+ opacity: 0.2;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td:hover,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
+ color: #fff !important;
+ background: #ff8000 !important;
+ box-shadow: none !important;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current.xdsoft_disabled:hover,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box>div>div.xdsoft_current.xdsoft_disabled:hover {
+ background: #33aaff !important;
+ box-shadow: #178fe5 0 1px 3px 0 inset !important;
+ color: #fff !important;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
+.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover {
+ color: inherit !important;
+ background: inherit !important;
+ box-shadow: inherit !important;
+}
+
+.xdsoft_datetimepicker .xdsoft_calendar th {
+ font-weight: 700;
+ text-align: center;
+ color: #999;
+ cursor: default;
+}
+
+.xdsoft_datetimepicker .xdsoft_copyright {
+ color: #ccc !important;
+ font-size: 10px;
+ clear: both;
+ float: none;
+ margin-left: 8px;
+}
+
+.xdsoft_datetimepicker .xdsoft_copyright a { color: #eee !important }
+.xdsoft_datetimepicker .xdsoft_copyright a:hover { color: #aaa !important }
+
+.xdsoft_time_box {
+ position: relative;
+ border: 1px solid #ccc;
+}
+.xdsoft_scrollbar >.xdsoft_scroller {
+ background: #ccc !important;
+ height: 20px;
+ border-radius: 3px;
+}
+.xdsoft_scrollbar {
+ position: absolute;
+ width: 7px;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ cursor: pointer;
+}
+.xdsoft_datetimepicker.xdsoft_rtl .xdsoft_scrollbar {
+ left: 0;
+ right: auto;
+}
+.xdsoft_scroller_box {
+ position: relative;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark {
+ box-shadow: 0 5px 15px -5px rgba(255, 255, 255, 0.506);
+ background: #000;
+ border-bottom: 1px solid #444;
+ border-left: 1px solid #333;
+ border-right: 1px solid #333;
+ border-top: 1px solid #333;
+ color: #ccc;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box {
+ border-bottom: 1px solid #222;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div {
+ background: #0a0a0a;
+ border-top: 1px solid #222;
+ color: #999;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label {
+ background-color: #000;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select {
+ border: 1px solid #333;
+ background: #000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover {
+ color: #000;
+ background: #007fff;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current {
+ background: #cc5500;
+ box-shadow: #b03e00 0 1px 3px 0 inset;
+ color: #000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button {
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==);
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
+ background: #0a0a0a;
+ border: 1px solid #222;
+ color: #999;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
+ background: #0e0e0e;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today {
+ color: #cc5500;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_default {
+ background: #ffe9d2;
+ box-shadow: #ffb871 0 1px 4px 0 inset;
+ color:#000;
+}
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_highlighted_mint {
+ background: #c1ffc9;
+ box-shadow: #00dd1c 0 1px 4px 0 inset;
+ color:#000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current {
+ background: #cc5500;
+ box-shadow: #b03e00 0 1px 3px 0 inset;
+ color: #000;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover {
+ color: #000 !important;
+ background: #007fff !important;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th {
+ color: #666;
+}
+
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright { color: #333 !important }
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a { color: #111 !important }
+.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover { color: #555 !important }
+
+.xdsoft_dark .xdsoft_time_box {
+ border: 1px solid #333;
+}
+
+.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller {
+ background: #333 !important;
+}
+.xdsoft_datetimepicker .xdsoft_save_selected {
+ display: block;
+ border: 1px solid #dddddd !important;
+ margin-top: 5px;
+ width: 100%;
+ color: #454551;
+ font-size: 13px;
+}
+.xdsoft_datetimepicker .blue-gradient-button {
+ font-family: "museo-sans", "Book Antiqua", sans-serif;
+ font-size: 12px;
+ font-weight: 300;
+ color: #82878c;
+ height: 28px;
+ position: relative;
+ padding: 4px 17px 4px 33px;
+ border: 1px solid #d7d8da;
+ background: -moz-linear-gradient(top, #fff 0%, #f4f8fa 73%);
+ /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(73%, #f4f8fa));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #fff 0%, #f4f8fa 73%);
+ /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #fff 0%, #f4f8fa 73%);
+ /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #fff 0%, #f4f8fa 73%);
+ /* IE10+ */
+ background: linear-gradient(to bottom, #fff 0%, #f4f8fa 73%);
+ /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff', endColorstr='#f4f8fa',GradientType=0 );
+/* IE6-9 */
+}
+.xdsoft_datetimepicker .blue-gradient-button:hover, .xdsoft_datetimepicker .blue-gradient-button:focus, .xdsoft_datetimepicker .blue-gradient-button:hover span, .xdsoft_datetimepicker .blue-gradient-button:focus span {
+ color: #454551;
+ background: -moz-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
+ /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f4f8fa), color-stop(73%, #FFF));
+ /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
+ /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
+ /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #f4f8fa 0%, #FFF 73%);
+ /* IE10+ */
+ background: linear-gradient(to bottom, #f4f8fa 0%, #FFF 73%);
+ /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f8fa', endColorstr='#FFF',GradientType=0 );
+ /* IE6-9 */
+}
diff --git a/web/nms-public.gathering.org/css/navbar-static-top.css b/web/nms-public.gathering.org/css/navbar-static-top.css
new file mode 100644
index 0000000..bf6b28e
--- /dev/null
+++ b/web/nms-public.gathering.org/css/navbar-static-top.css
@@ -0,0 +1,4 @@
+
+.navbar-static-top {
+ margin-bottom: 19px;
+}
diff --git a/web/nms-public.gathering.org/dhcpkart.html b/web/nms-public.gathering.org/dhcpkart.html
deleted file mode 100644
index 77f7ad5..0000000
--- a/web/nms-public.gathering.org/dhcpkart.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
- <head>
- <title>DHCP-kart</title>
- <meta http-equiv="refresh" content="60">
- </head>
- <body>
-
- <p><img src="nettkart-dhcp.png" /></p>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..b93a495
--- /dev/null
+++ b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..1413fc6
--- /dev/null
+++ b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..9e61285
--- /dev/null
+++ b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2 b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000..64539b5
--- /dev/null
+++ b/web/nms-public.gathering.org/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png b/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png
new file mode 100644
index 0000000..8d647a3
--- /dev/null
+++ b/web/nms-public.gathering.org/img/tg15-salkart-clean-big.png
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart-full.png b/web/nms-public.gathering.org/img/tg15-salkart-full.png
new file mode 100644
index 0000000..9e22d40
--- /dev/null
+++ b/web/nms-public.gathering.org/img/tg15-salkart-full.png
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg15-salkart.png b/web/nms-public.gathering.org/img/tg15-salkart.png
new file mode 100644
index 0000000..dce49b5
--- /dev/null
+++ b/web/nms-public.gathering.org/img/tg15-salkart.png
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png b/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png
new file mode 100644
index 0000000..400cd64
--- /dev/null
+++ b/web/nms-public.gathering.org/img/tg16-salkart-clean-big.png
Binary files differ
diff --git a/web/nms-public.gathering.org/img/tg16-salkart-full.png b/web/nms-public.gathering.org/img/tg16-salkart-full.png
new file mode 100644
index 0000000..6fe9d68
--- /dev/null
+++ b/web/nms-public.gathering.org/img/tg16-salkart-full.png
Binary files differ
diff --git a/web/nms-public.gathering.org/index.html b/web/nms-public.gathering.org/index.html
index e4f0e1c..a10d1dc 100644
--- a/web/nms-public.gathering.org/index.html
+++ b/web/nms-public.gathering.org/index.html
@@ -1,17 +1,278 @@
-<html>
-<head>
-<title>NMS Public - The Gathering 2015</title>
-</head>
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
+ <meta name="description" content="">
+ <meta name="author" content="">
+ <link rel="icon" href="../../favicon.ico">
-<body>
+ <title>NMS2</title>
-<h1>NMS Public - The Gathering 2015</h1>
+ <!-- Bootstrap core CSS -->
+ <link href="css/bootstrap.min.css" rel="stylesheet">
-<h2><a href="dhcpkart.html">DHCP-kart</a></h2>
-<h2><a href="ping.html">Ping-kart</a></h2>
-<h2><a href="weathermap.html">Weathermap</a></h2>
-<h2><a href="tempkart.html">Tempkart</a></h2>
-<h2><a href="nettkart-trafikk.html">Switchtrafikk</a></h2>
-</body>
-</html>
+ <!-- Custom styles for this template -->
+ <link href="css/navbar-static-top.css" rel="stylesheet">
+
+ <!-- Date-picker styles -->
+ <link href="css/jquery.datetimepicker.css" rel="stylesheet">
+
+ <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
+ <!--[if lt IE 9]>
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+ <![endif]-->
+ <style type="text/css">
+ canvas {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ outline: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
+ }
+ tr.mgmt_v4_addr {
+ font-weight: 700;
+ }
+ </style>
+ </head>
+
+ <body id="body">
+ <nav class="navbar navbar-default navbar-static-top">
+ <div class="container-fluid">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ </div>
+ <div id="navbar" class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="dropdown">
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Menu
+ <span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu" role="menu">
+ <li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
+ <li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
+ <li><a href="#dhcp" onclick="setUpdater(handler_dhcp)">DHCP map</a></li>
+ <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
+ <li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
+ <li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
+ <li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
+ <li><a href="#snmp" onclick="setUpdater(handler_snmp)">SNMP map</a></li>
+ <li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
+ <li class="divider"> </li>
+ <li><a href="#" onclick="toggleLayer('nowPickerBox');startNowPicker();">Travel in time</a></li>
+ <li><a href="#" onclick="nms.playback.startReplay('2015-04-01T09:00:00','2015-04-05T12:00:00');" title="Replay from opening 120 minutes per second">Replay TG</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">View</li>
+ <li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
+ <li><a href="#" onclick="toggleConnect()">Toggle linknets</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">Move switches</li>
+ <li><a href="#" onclick="nmsMap.moveSet(true);">Enable switch moving</a></li>
+ <li><a href="#" onclick="nmsMap.moveSet(false);">Disable switch moving</a></li>
+ <li><a href="#" onclick="nmsInfoBox.showWindow('addSwitch')">Add switch</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">Help</li>
+ <li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
+ </ul>
+ </li>
+ <li><p id="updater_name" class="navbar-text"></p></li>
+ <div class="navbar-form navbar-left">
+ <div class="form-group">
+ <button class="btn btn-default btn-sm" id="legend-1"></button>
+ <button class="btn btn-default btn-sm" id="legend-2"></button>
+ <button class="btn btn-default btn-sm" id="legend-3"></button>
+ <button class="btn btn-default btn-sm" id="legend-4"></button>
+ <button class="btn btn-default btn-sm" id="legend-5"></button>
+ </div>
+ <div class="input-group input-group-sm">
+ <input id="searchbox" type="text" class="form-control" placeholder="Filter" oninput="nmsInfoBox._search()" />
+ <span class="input-group-btn">
+ <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button>
+ </span>
+ </div>
+ </div>
+ </li>
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ <li><p id="speed" class="navbar-text" title="Client port speed / Total port speed"></p></li>
+ </ul>
+ </div><!--/.nav-collapse -->
+ </div>
+ </nav>
+ <div class="container-fluid" id="wrap">
+
+ <div class="row-fluid">
+ <div class="span12">
+ <div id="aboutKeybindings" class="col-md-4" style="position: absolute; display:none; z-index: 130;">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Keyboard Shortcuts
+ <button type="button" class="close" aria-label="Close" onclick="document.getElementById('aboutKeybindings').style.display = 'none';" style="float: right">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <table class="table table-condensed">
+ <tr>
+ <th>Key</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>?</td>
+ <td>Toggle this help window</td>
+ </tr>
+ <tr>
+ <td>-</td>
+ <td>Toggle navigation bar</td>
+ </tr>
+ <tr>
+ <td>n</td>
+ <td>Toggle night mode</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>View Ping map</td>
+ </tr>
+ <tr>
+ <td>2</td>
+ <td>View uplink map</td>
+ </tr>
+ <tr>
+ <td>3</td>
+ <td>View DHCP map</td>
+ </tr>
+ <tr>
+ <td>4</td>
+ <td>View comment spotter map</td>
+ </tr>
+ <tr>
+ <td>5</td>
+ <td>View temperature map</td>
+ </tr>
+ <tr>
+ <td>6</td>
+ <td>View uplink traffic map</td>
+ </tr>
+ <tr>
+ <td>7</td>
+ <td>View total switch traffic map</td>
+ </tr>
+ <tr>
+ <td>8</td>
+ <td>View SNMP map</td>
+ </tr>
+ <tr>
+ <td>9</td>
+ <td>View Disco map</td>
+ </tr>
+ <tr>
+ <td>c</td>
+ <td>Toggle linknet connections</td>
+ </tr>
+ <tr>
+ <td>h</td>
+ <td>Step 1 hour back in time</td>
+ </tr>
+ <tr>
+ <td>j</td>
+ <td>Step 5 minutes back in time</td>
+ </tr>
+ <tr>
+ <td>k</td>
+ <td>Step 5 minutes forward in time</td>
+ </tr>
+ <tr>
+ <td>l</td>
+ <td>Step 1 hour forward in time</td>
+ </tr>
+ <tr>
+ <td>p</td>
+ <td>Toggle playback (1 hour per second)</td>
+ </tr>
+ <tr>
+ <td>r</td>
+ <td>Return to real time</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+ <div id="nowPickerBox" style="position: absolute; display: none; z-index: 130;" class="col-sm-6 col-md-5">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Time travel
+ <button type="button" class="close" aria-labe="Close" onclick="document.getElementById('nowPickerBox').style.display = 'none';" style="float: right;">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </h3>
+ </div>
+ <div class="panel-body row">
+ <div class="col-sm-12">
+ <div class="form-group">
+ <input type="text" class="form-control" placeholder="YYYY-MM-DDThh:mm:ss" id="nowPicker">
+ <div class="button-group">
+ <button class="btn btn-primary" onclick="nms.playback.setNow(document.getElementById('nowPicker').dataset.iso);hideLayer('nowPickerBox');">Travel</button>
+ <button class="btn btn-danger" onclick="startNowPicker(Date.now());nms.playback.setNow(false);nms.playback.play();">Back to reality</button>
+ <button class="btn btn-info" data-toggle="button" onclick="toggleLayer('nowPickerInfo');">Info</button>
+ </div>
+ </div>
+ </div>
+ <div id="nowPickerInfo" class="col-sm-12" style="display:none;">
+ <p>Some features do not have time travel support (comment
+ spotting and DHCP map at the moment). We also lack
+ compatible SNMP data for the first day or so, so you'll
+ only have ping data for the first day of TG15.</p>
+ <p>It could take some time to load a specific point in time
+ for the first time. See "About performance" under the help
+ menu for more information.</p>
+ <p>You can also step backwards and forwards in time, stop
+ and start replay and go back to real time using keyboard
+ shortcuts. See the help menu for an overview of keyboard
+ shortcuts.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div id="info-panel-container" class="col-md-5" style="display: none; position: absolute; z-index: 120;">
+ </div>
+ </div>
+
+ <canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
+ <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10; display: none;"> </canvas>
+ <canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
+ <canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
+ <canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
+ <canvas id="textInfoCanvas" width="1920" height="1032" style="position: absolute; z-index: 45;"> </canvas>
+ <canvas id="topCanvas" width="1920" height="1032" style="position: absolute; z-index: 50;"> </canvas>
+ <canvas id="inputCanvas" width="1920" height="1032" style="position: absolute; z-index: 60; cursor: pointer;" onmousedown="nmsMap.canvasClick(event)">
+ </canvas>
+ <canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
+
+ <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div>
+ </div>
+ </div><!--/.fluid-container-->
+ <script src="js/jquery.min.js" type="text/javascript"></script>
+ <script src="js/bootstrap.min.js" type="text/javascript"></script>
+ <script type="text/javascript" src="js/nms-data.js"></script>
+ <script type="text/javascript" src="js/nms-map.js"></script>
+ <script type="text/javascript" src="js/nms-info-box.js"></script>
+ <script type="text/javascript" src="js/nms.js"></script>
+ <script type="text/javascript" src="js/nms-color-util.js"></script>
+ <script type="text/javascript" src="js/nms-map-handlers.js"></script>
+ <script src="js/jquery.datetimepicker.full.js" type="text/javascript"></script>
+ <script type="text/javascript">
+initNMS();
+ </script>
+ </body>
+</html>
diff --git a/web/nms-public.gathering.org/js/bootstrap.js b/web/nms-public.gathering.org/js/bootstrap.js
new file mode 100644
index 0000000..1c88b71
--- /dev/null
+++ b/web/nms-public.gathering.org/js/bootstrap.js
@@ -0,0 +1,2317 @@
+/*!
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ 'use strict';
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
+ }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.4
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.4
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.4'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.4
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.4'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state = state + 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
+ else $parent.find('.active').removeClass('active')
+ }
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ }
+
+ if (changed) this.$element.toggleClass('active')
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ Plugin.call($btn, 'toggle')
+ e.preventDefault()
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.4
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.4'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.4
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.4'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.4
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.4'
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if ((!isActive && e.which != 27) || (isActive && e.which == 27)) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '[role="menu"]', Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '[role="listbox"]', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.4
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.4'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass('in')
+ .attr('aria-hidden', false)
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .attr('aria-hidden', true)
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.4
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.4'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $(this.options.viewport.selector || this.options.viewport)
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (self && self.$tip && self.$tip.is(':visible')) {
+ self.hoverState = 'in'
+ return
+ }
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var $container = this.options.container ? $(this.options.container) : this.$element.parent()
+ var containerDim = this.getPosition($container)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > containerDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < containerDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > containerDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < containerDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top = offset.top + marginTop
+ offset.left = offset.left + marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof ($e.attr('data-original-title')) != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var elOffset = isBody ? { top: 0, left: 0 } : $element.offset()
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.width) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ return (this.$tip = this.$tip || $(this.options.template))
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.4
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.4'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.4
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.4'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.4
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ this.element = $(element)
+ }
+
+ Tab.VERSION = '3.3.4'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && (($active.length && $active.hasClass('fade')) || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.4
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.4'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = $(document.body).height()
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/web/nms-public.gathering.org/js/bootstrap.min.js b/web/nms-public.gathering.org/js/bootstrap.min.js
new file mode 100644
index 0000000..c8f82e5
--- /dev/null
+++ b/web/nms-public.gathering.org/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.4 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){
+var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file
diff --git a/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js b/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js
new file mode 100644
index 0000000..417037c
--- /dev/null
+++ b/web/nms-public.gathering.org/js/jquery.datetimepicker.full.js
@@ -0,0 +1,3073 @@
+/*!
+ * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015
+ * @version 1.3.3
+ *
+ * Date formatter utility library that allows formatting date/time variables or Date objects using PHP DateTime format.
+ * @see http://php.net/manual/en/function.date.php
+ *
+ * For more JQuery plugins visit http://plugins.krajee.com
+ * For more Yii related demos visit http://demos.krajee.com
+ */
+var DateFormatter;
+(function () {
+ "use strict";
+
+ var _compare, _lpad, _extend, defaultSettings, DAY, HOUR;
+ DAY = 1000 * 60 * 60 * 24;
+ HOUR = 3600;
+
+ _compare = function (str1, str2) {
+ return typeof(str1) === 'string' && typeof(str2) === 'string' && str1.toLowerCase() === str2.toLowerCase();
+ };
+ _lpad = function (value, length, char) {
+ var chr = char || '0', val = value.toString();
+ return val.length < length ? _lpad(chr + val, length) : val;
+ };
+ _extend = function (out) {
+ var i, obj;
+ out = out || {};
+ for (i = 1; i < arguments.length; i++) {
+ obj = arguments[i];
+ if (!obj) {
+ continue;
+ }
+ for (var key in obj) {
+ if (obj.hasOwnProperty(key)) {
+ if (typeof obj[key] === 'object') {
+ _extend(out[key], obj[key]);
+ } else {
+ out[key] = obj[key];
+ }
+ }
+ }
+ }
+ return out;
+ };
+ defaultSettings = {
+ dateSettings: {
+ days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ months: [
+ 'January', 'February', 'March', 'April', 'May', 'June', 'July',
+ 'August', 'September', 'October', 'November', 'December'
+ ],
+ monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ meridiem: ['AM', 'PM'],
+ ordinal: function (number) {
+ var n = number % 10, suffixes = {1: 'st', 2: 'nd', 3: 'rd'};
+ return Math.floor(number % 100 / 10) === 1 || !suffixes[n] ? 'th' : suffixes[n];
+ }
+ },
+ separators: /[ \-+\/\.T:@]/g,
+ validParts: /[dDjlNSwzWFmMntLoYyaABgGhHisueTIOPZcrU]/g,
+ intParts: /[djwNzmnyYhHgGis]/g,
+ tzParts: /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
+ tzClip: /[^-+\dA-Z]/g
+ };
+
+ DateFormatter = function (options) {
+ var self = this, config = _extend(defaultSettings, options);
+ self.dateSettings = config.dateSettings;
+ self.separators = config.separators;
+ self.validParts = config.validParts;
+ self.intParts = config.intParts;
+ self.tzParts = config.tzParts;
+ self.tzClip = config.tzClip;
+ };
+
+ DateFormatter.prototype = {
+ constructor: DateFormatter,
+ parseDate: function (vDate, vFormat) {
+ var self = this, vFormatParts, vDateParts, i, vDateFlag = false, vTimeFlag = false, vDatePart, iDatePart,
+ vSettings = self.dateSettings, vMonth, vMeriIndex, vMeriOffset, len, mer,
+ out = {date: null, year: null, month: null, day: null, hour: 0, min: 0, sec: 0};
+ if (!vDate) {
+ return undefined;
+ }
+ if (vDate instanceof Date) {
+ return vDate;
+ }
+ if (typeof vDate === 'number') {
+ return new Date(vDate);
+ }
+ if (vFormat === 'U') {
+ i = parseInt(vDate);
+ return i ? new Date(i * 1000) : vDate;
+ }
+ if (typeof vDate !== 'string') {
+ return '';
+ }
+ vFormatParts = vFormat.match(self.validParts);
+ if (!vFormatParts || vFormatParts.length === 0) {
+ throw new Error("Invalid date format definition.");
+ }
+ vDateParts = vDate.replace(self.separators, '\0').split('\0');
+ for (i = 0; i < vDateParts.length; i++) {
+ vDatePart = vDateParts[i];
+ iDatePart = parseInt(vDatePart);
+ switch (vFormatParts[i]) {
+ case 'y':
+ case 'Y':
+ len = vDatePart.length;
+ if (len === 2) {
+ out.year = parseInt((iDatePart < 70 ? '20' : '19') + vDatePart);
+ } else if (len === 4) {
+ out.year = iDatePart;
+ }
+ vDateFlag = true;
+ break;
+ case 'm':
+ case 'n':
+ case 'M':
+ case 'F':
+ if (isNaN(vDatePart)) {
+ vMonth = vSettings.monthsShort.indexOf(vDatePart);
+ if (vMonth > -1) {
+ out.month = vMonth + 1;
+ }
+ vMonth = vSettings.months.indexOf(vDatePart);
+ if (vMonth > -1) {
+ out.month = vMonth + 1;
+ }
+ } else {
+ if (iDatePart >= 1 && iDatePart <= 12) {
+ out.month = iDatePart;
+ }
+ }
+ vDateFlag = true;
+ break;
+ case 'd':
+ case 'j':
+ if (iDatePart >= 1 && iDatePart <= 31) {
+ out.day = iDatePart;
+ }
+ vDateFlag = true;
+ break;
+ case 'g':
+ case 'h':
+ vMeriIndex = (vFormatParts.indexOf('a') > -1) ? vFormatParts.indexOf('a') :
+ (vFormatParts.indexOf('A') > -1) ? vFormatParts.indexOf('A') : -1;
+ mer = vDateParts[vMeriIndex];
+ if (vMeriIndex > -1) {
+ vMeriOffset = _compare(mer, vSettings.meridiem[0]) ? 0 :
+ (_compare(mer, vSettings.meridiem[1]) ? 12 : -1);
+ if (iDatePart >= 1 && iDatePart <= 12 && vMeriOffset > -1) {
+ out.hour = iDatePart + vMeriOffset - 1;
+ } else if (iDatePart >= 0 && iDatePart <= 23) {
+ out.hour = iDatePart;
+ }
+ } else if (iDatePart >= 0 && iDatePart <= 23) {
+ out.hour = iDatePart;
+ }
+ vTimeFlag = true;
+ break;
+ case 'G':
+ case 'H':
+ if (iDatePart >= 0 && iDatePart <= 23) {
+ out.hour = iDatePart;
+ }
+ vTimeFlag = true;
+ break;
+ case 'i':
+ if (iDatePart >= 0 && iDatePart <= 59) {
+ out.min = iDatePart;
+ }
+ vTimeFlag = true;
+ break;
+ case 's':
+ if (iDatePart >= 0 && iDatePart <= 59) {
+ out.sec = iDatePart;
+ }
+ vTimeFlag = true;
+ break;
+ }
+ }
+ if (vDateFlag === true && out.year && out.month && out.day) {
+ out.date = new Date(out.year, out.month - 1, out.day, out.hour, out.min, out.sec, 0);
+ } else {
+ if (vTimeFlag !== true) {
+ return false;
+ }
+ out.date = new Date(0, 0, 0, out.hour, out.min, out.sec, 0);
+ }
+ return out.date;
+ },
+ guessDate: function (vDateStr, vFormat) {
+ if (typeof vDateStr !== 'string') {
+ return vDateStr;
+ }
+ var self = this, vParts = vDateStr.replace(self.separators, '\0').split('\0'), vPattern = /^[djmn]/g,
+ vFormatParts = vFormat.match(self.validParts), vDate = new Date(), vDigit = 0, vYear, i, iPart, iSec;
+
+ if (!vPattern.test(vFormatParts[0])) {
+ return vDateStr;
+ }
+
+ for (i = 0; i < vParts.length; i++) {
+ vDigit = 2;
+ iPart = vParts[i];
+ iSec = parseInt(iPart.substr(0, 2));
+ switch (i) {
+ case 0:
+ if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
+ vDate.setMonth(iSec - 1);
+ } else {
+ vDate.setDate(iSec);
+ }
+ break;
+ case 1:
+ if (vFormatParts[0] === 'm' || vFormatParts[0] === 'n') {
+ vDate.setDate(iSec);
+ } else {
+ vDate.setMonth(iSec - 1);
+ }
+ break;
+ case 2:
+ vYear = vDate.getFullYear();
+ if (iPart.length < 4) {
+ vDate.setFullYear(parseInt(vYear.toString().substr(0, 4 - iPart.length) + iPart));
+ vDigit = iPart.length;
+ } else {
+ vDate.setFullYear = parseInt(iPart.substr(0, 4));
+ vDigit = 4;
+ }
+ break;
+ case 3:
+ vDate.setHours(iSec);
+ break;
+ case 4:
+ vDate.setMinutes(iSec);
+ break;
+ case 5:
+ vDate.setSeconds(iSec);
+ break;
+ }
+ if (iPart.substr(vDigit).length > 0) {
+ vParts.splice(i + 1, 0, iPart.substr(vDigit));
+ }
+ }
+ return vDate;
+ },
+ parseFormat: function (vChar, vDate) {
+ var self = this, vSettings = self.dateSettings, fmt, backspace = /\\?(.?)/gi, doFormat = function (t, s) {
+ return fmt[t] ? fmt[t]() : s;
+ };
+ fmt = {
+ /////////
+ // DAY //
+ /////////
+ /**
+ * Day of month with leading 0: `01..31`
+ * @return {string}
+ */
+ d: function () {
+ return _lpad(fmt.j(), 2);
+ },
+ /**
+ * Shorthand day name: `Mon...Sun`
+ * @return {string}
+ */
+ D: function () {
+ return vSettings.daysShort[fmt.w()];
+ },
+ /**
+ * Day of month: `1..31`
+ * @return {number}
+ */
+ j: function () {
+ return vDate.getDate();
+ },
+ /**
+ * Full day name: `Monday...Sunday`
+ * @return {number}
+ */
+ l: function () {
+ return vSettings.days[fmt.w()];
+ },
+ /**
+ * ISO-8601 day of week: `1[Mon]..7[Sun]`
+ * @return {number}
+ */
+ N: function () {
+ return fmt.w() || 7;
+ },
+ /**
+ * Day of week: `0[Sun]..6[Sat]`
+ * @return {number}
+ */
+ w: function () {
+ return vDate.getDay();
+ },
+ /**
+ * Day of year: `0..365`
+ * @return {number}
+ */
+ z: function () {
+ var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j()), b = new Date(fmt.Y(), 0, 1);
+ return Math.round((a - b) / DAY);
+ },
+
+ //////////
+ // WEEK //
+ //////////
+ /**
+ * ISO-8601 week number
+ * @return {number}
+ */
+ W: function () {
+ var a = new Date(fmt.Y(), fmt.n() - 1, fmt.j() - fmt.N() + 3), b = new Date(a.getFullYear(), 0, 4);
+ return _lpad(1 + Math.round((a - b) / DAY / 7), 2);
+ },
+
+ ///////////
+ // MONTH //
+ ///////////
+ /**
+ * Full month name: `January...December`
+ * @return {string}
+ */
+ F: function () {
+ return vSettings.months[vDate.getMonth()];
+ },
+ /**
+ * Month w/leading 0: `01..12`
+ * @return {string}
+ */
+ m: function () {
+ return _lpad(fmt.n(), 2);
+ },
+ /**
+ * Shorthand month name; `Jan...Dec`
+ * @return {string}
+ */
+ M: function () {
+ return vSettings.monthsShort[vDate.getMonth()];
+ },
+ /**
+ * Month: `1...12`
+ * @return {number}
+ */
+ n: function () {
+ return vDate.getMonth() + 1;
+ },
+ /**
+ * Days in month: `28...31`
+ * @return {number}
+ */
+ t: function () {
+ return (new Date(fmt.Y(), fmt.n(), 0)).getDate();
+ },
+
+ //////////
+ // YEAR //
+ //////////
+ /**
+ * Is leap year? `0 or 1`
+ * @return {number}
+ */
+ L: function () {
+ var Y = fmt.Y();
+ return (Y % 4 === 0 && Y % 100 !== 0 || Y % 400 === 0) ? 1 : 0;
+ },
+ /**
+ * ISO-8601 year
+ * @return {number}
+ */
+ o: function () {
+ var n = fmt.n(), W = fmt.W(), Y = fmt.Y();
+ return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);
+ },
+ /**
+ * Full year: `e.g. 1980...2010`
+ * @return {number}
+ */
+ Y: function () {
+ return vDate.getFullYear();
+ },
+ /**
+ * Last two digits of year: `00...99`
+ * @return {string}
+ */
+ y: function () {
+ return fmt.Y().toString().slice(-2);
+ },
+
+ //////////
+ // TIME //
+ //////////
+ /**
+ * Meridian lower: `am or pm`
+ * @return {string}
+ */
+ a: function () {
+ return fmt.A().toLowerCase();
+ },
+ /**
+ * Meridian upper: `AM or PM`
+ * @return {string}
+ */
+ A: function () {
+ var n = fmt.G() < 12 ? 0 : 1;
+ return vSettings.meridiem[n];
+ },
+ /**
+ * Swatch Internet time: `000..999`
+ * @return {string}
+ */
+ B: function () {
+ var H = vDate.getUTCHours() * HOUR, i = vDate.getUTCMinutes() * 60, s = vDate.getUTCSeconds();
+ return _lpad(Math.floor((H + i + s + HOUR) / 86.4) % 1000, 3);
+ },
+ /**
+ * 12-Hours: `1..12`
+ * @return {number}
+ */
+ g: function () {
+ return fmt.G() % 12 || 12;
+ },
+ /**
+ * 24-Hours: `0..23`
+ * @return {number}
+ */
+ G: function () {
+ return vDate.getHours();
+ },
+ /**
+ * 12-Hours with leading 0: `01..12`
+ * @return {string}
+ */
+ h: function () {
+ return _lpad(fmt.g(), 2);
+ },
+ /**
+ * 24-Hours w/leading 0: `00..23`
+ * @return {string}
+ */
+ H: function () {
+ return _lpad(fmt.G(), 2);
+ },
+ /**
+ * Minutes w/leading 0: `00..59`
+ * @return {string}
+ */
+ i: function () {
+ return _lpad(vDate.getMinutes(), 2);
+ },
+ /**
+ * Seconds w/leading 0: `00..59`
+ * @return {string}
+ */
+ s: function () {
+ return _lpad(vDate.getSeconds(), 2);
+ },
+ /**
+ * Microseconds: `000000-999000`
+ * @return {string}
+ */
+ u: function () {
+ return _lpad(vDate.getMilliseconds() * 1000, 6);
+ },
+
+ //////////////
+ // TIMEZONE //
+ //////////////
+ /**
+ * Timezone identifier: `e.g. Atlantic/Azores, ...`
+ * @return {string}
+ */
+ e: function () {
+ var str = /\((.*)\)/.exec(String(vDate))[1];
+ return str || 'Coordinated Universal Time';
+ },
+ /**
+ * Timezone abbreviation: `e.g. EST, MDT, ...`
+ * @return {string}
+ */
+ T: function () {
+ var str = (String(vDate).match(self.tzParts) || [""]).pop().replace(self.tzClip, "");
+ return str || 'UTC';
+ },
+ /**
+ * DST observed? `0 or 1`
+ * @return {number}
+ */
+ I: function () {
+ var a = new Date(fmt.Y(), 0), c = Date.UTC(fmt.Y(), 0),
+ b = new Date(fmt.Y(), 6), d = Date.UTC(fmt.Y(), 6);
+ return ((a - c) !== (b - d)) ? 1 : 0;
+ },
+ /**
+ * Difference to GMT in hour format: `e.g. +0200`
+ * @return {string}
+ */
+ O: function () {
+ var tzo = vDate.getTimezoneOffset(), a = Math.abs(tzo);
+ return (tzo > 0 ? '-' : '+') + _lpad(Math.floor(a / 60) * 100 + a % 60, 4);
+ },
+ /**
+ * Difference to GMT with colon: `e.g. +02:00`
+ * @return {string}
+ */
+ P: function () {
+ var O = fmt.O();
+ return (O.substr(0, 3) + ':' + O.substr(3, 2));
+ },
+ /**
+ * Timezone offset in seconds: `-43200...50400`
+ * @return {number}
+ */
+ Z: function () {
+ return -vDate.getTimezoneOffset() * 60;
+ },
+
+ ////////////////////
+ // FULL DATE TIME //
+ ////////////////////
+ /**
+ * ISO-8601 date
+ * @return {string}
+ */
+ c: function () {
+ return 'Y-m-d\\TH:i:s'.replace(backspace, doFormat);
+ },
+ /**
+ * RFC 2822 date
+ * @return {string}
+ */
+ r: function () {
+ return 'D, d M Y H:i:s O'.replace(backspace, doFormat);
+ },
+ /**
+ * Seconds since UNIX epoch
+ * @return {number}
+ */
+ U: function () {
+ return vDate.getTime() / 1000 || 0;
+ }
+ };
+ return doFormat(vChar, vChar);
+ },
+ formatDate: function (vDate, vFormat) {
+ var self = this, i, n, len, str, vChar, vDateStr = '';
+ if (typeof vDate === 'string') {
+ vDate = self.parseDate(vDate, vFormat);
+ if (vDate === false) {
+ return false;
+ }
+ }
+ if (vDate instanceof Date) {
+ len = vFormat.length;
+ for (i = 0; i < len; i++) {
+ vChar = vFormat.charAt(i);
+ if (vChar === 'S') {
+ continue;
+ }
+ str = self.parseFormat(vChar, vDate);
+ if (i !== (len - 1) && self.intParts.test(vChar) && vFormat.charAt(i + 1) === 'S') {
+ n = parseInt(str);
+ str += self.dateSettings.ordinal(n);
+ }
+ vDateStr += str;
+ }
+ return vDateStr;
+ }
+ return '';
+ }
+ };
+})();/**
+ * @preserve jQuery DateTimePicker plugin v2.5.1
+ * @homepage http://xdsoft.net/jqplugins/datetimepicker/
+ * @author Chupurnov Valeriy (<chupurnov@gmail.com>)
+ */
+/*global DateFormatter, document,window,jQuery,setTimeout,clearTimeout,HighlightedDate,getCurrentValue*/
+;(function (factory) {
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD. Register as an anonymous module.
+ define(['jquery', 'jquery-mousewheel'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS style for Browserify
+ module.exports = factory;
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+ 'use strict';
+ var default_options = {
+ i18n: {
+ ar: { // Arabic
+ months: [
+ "كانون الثاني", "شباط", "آذار", "نيسان", "مايو", "حزيران", "تموز", "آب", "أيلول", "تشرين الأول", "تشرين الثاني", "كانون الأول"
+ ],
+ dayOfWeekShort: [
+ "ن", "ث", "ع", "خ", "ج", "س", "ح"
+ ],
+ dayOfWeek: ["الأحد", "الاثنين", "الثلاثاء", "الأربعاء", "الخميس", "الجمعة", "السبت", "الأحد"]
+ },
+ ro: { // Romanian
+ months: [
+ "Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"
+ ],
+ dayOfWeekShort: [
+ "Du", "Lu", "Ma", "Mi", "Jo", "Vi", "Sâ"
+ ],
+ dayOfWeek: ["Duminică", "Luni", "Marţi", "Miercuri", "Joi", "Vineri", "Sâmbătă"]
+ },
+ id: { // Indonesian
+ months: [
+ "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"
+ ],
+ dayOfWeekShort: [
+ "Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"
+ ],
+ dayOfWeek: ["Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"]
+ },
+ is: { // Icelandic
+ months: [
+ "Janúar", "Febrúar", "Mars", "Apríl", "Maí", "Júní", "Júlí", "Ágúst", "September", "Október", "Nóvember", "Desember"
+ ],
+ dayOfWeekShort: [
+ "Sun", "Mán", "Þrið", "Mið", "Fim", "Fös", "Lau"
+ ],
+ dayOfWeek: ["Sunnudagur", "Mánudagur", "Þriðjudagur", "Miðvikudagur", "Fimmtudagur", "Föstudagur", "Laugardagur"]
+ },
+ bg: { // Bulgarian
+ months: [
+ "Януари", "Февруари", "Март", "Април", "Май", "Юни", "Юли", "Август", "Септември", "Октомври", "Ноември", "Декември"
+ ],
+ dayOfWeekShort: [
+ "Нд", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
+ ],
+ dayOfWeek: ["Неделя", "Понеделник", "Вторник", "Сряда", "Четвъртък", "Петък", "Събота"]
+ },
+ fa: { // Persian/Farsi
+ months: [
+ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'
+ ],
+ dayOfWeekShort: [
+ 'یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'
+ ],
+ dayOfWeek: ["یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه", "شنبه", "یک‌شنبه"]
+ },
+ ru: { // Russian
+ months: [
+ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'
+ ],
+ dayOfWeekShort: [
+ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"
+ ],
+ dayOfWeek: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"]
+ },
+ uk: { // Ukrainian
+ months: [
+ 'Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень'
+ ],
+ dayOfWeekShort: [
+ "Ндл", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Сбт"
+ ],
+ dayOfWeek: ["Неділя", "Понеділок", "Вівторок", "Середа", "Четвер", "П'ятниця", "Субота"]
+ },
+ en: { // English
+ months: [
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ ],
+ dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
+ },
+ el: { // Ελληνικά
+ months: [
+ "Ιανουάριος", "Φεβρουάριος", "Μάρτιος", "Απρίλιος", "Μάιος", "Ιούνιος", "Ιούλιος", "Αύγουστος", "Σεπτέμβριος", "Οκτώβριος", "Νοέμβριος", "Δεκέμβριος"
+ ],
+ dayOfWeekShort: [
+ "Κυρ", "Δευ", "Τρι", "Τετ", "Πεμ", "Παρ", "Σαβ"
+ ],
+ dayOfWeek: ["Κυριακή", "Δευτέρα", "Τρίτη", "Τετάρτη", "Πέμπτη", "Παρασκευή", "Σάββατο"]
+ },
+ de: { // German
+ months: [
+ 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'
+ ],
+ dayOfWeekShort: [
+ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
+ ],
+ dayOfWeek: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]
+ },
+ nl: { // Dutch
+ months: [
+ "januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"
+ ],
+ dayOfWeekShort: [
+ "zo", "ma", "di", "wo", "do", "vr", "za"
+ ],
+ dayOfWeek: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"]
+ },
+ tr: { // Turkish
+ months: [
+ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"
+ ],
+ dayOfWeekShort: [
+ "Paz", "Pts", "Sal", "Çar", "Per", "Cum", "Cts"
+ ],
+ dayOfWeek: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"]
+ },
+ fr: { //French
+ months: [
+ "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
+ ],
+ dayOfWeekShort: [
+ "Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"
+ ],
+ dayOfWeek: ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"]
+ },
+ es: { // Spanish
+ months: [
+ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"
+ ],
+ dayOfWeekShort: [
+ "Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"
+ ],
+ dayOfWeek: ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]
+ },
+ th: { // Thai
+ months: [
+ 'มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'
+ ],
+ dayOfWeekShort: [
+ 'อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'
+ ],
+ dayOfWeek: ["อาทิตย์", "จันทร์", "อังคาร", "พุธ", "พฤหัส", "ศุกร์", "เสาร์", "อาทิตย์"]
+ },
+ pl: { // Polish
+ months: [
+ "styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"
+ ],
+ dayOfWeekShort: [
+ "nd", "pn", "wt", "śr", "cz", "pt", "sb"
+ ],
+ dayOfWeek: ["niedziela", "poniedziałek", "wtorek", "środa", "czwartek", "piątek", "sobota"]
+ },
+ pt: { // Portuguese
+ months: [
+ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
+ ],
+ dayOfWeekShort: [
+ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab"
+ ],
+ dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
+ },
+ ch: { // Simplified Chinese
+ months: [
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
+ ],
+ dayOfWeekShort: [
+ "日", "一", "二", "三", "四", "五", "六"
+ ]
+ },
+ se: { // Swedish
+ months: [
+ "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
+ ]
+ },
+ kr: { // Korean
+ months: [
+ "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
+ ],
+ dayOfWeekShort: [
+ "일", "월", "화", "수", "목", "금", "토"
+ ],
+ dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
+ },
+ it: { // Italian
+ months: [
+ "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"
+ ],
+ dayOfWeekShort: [
+ "Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"
+ ],
+ dayOfWeek: ["Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"]
+ },
+ da: { // Dansk
+ months: [
+ "January", "Februar", "Marts", "April", "Maj", "Juni", "July", "August", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
+ ],
+ dayOfWeek: ["søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag"]
+ },
+ no: { // Norwegian
+ months: [
+ "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"
+ ],
+ dayOfWeekShort: [
+ "Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør"
+ ],
+ dayOfWeek: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag']
+ },
+ ja: { // Japanese
+ months: [
+ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"
+ ],
+ dayOfWeekShort: [
+ "日", "月", "火", "水", "木", "金", "土"
+ ],
+ dayOfWeek: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"]
+ },
+ vi: { // Vietnamese
+ months: [
+ "Tháng 1", "Tháng 2", "Tháng 3", "Tháng 4", "Tháng 5", "Tháng 6", "Tháng 7", "Tháng 8", "Tháng 9", "Tháng 10", "Tháng 11", "Tháng 12"
+ ],
+ dayOfWeekShort: [
+ "CN", "T2", "T3", "T4", "T5", "T6", "T7"
+ ],
+ dayOfWeek: ["Chủ nhật", "Thứ hai", "Thứ ba", "Thứ tư", "Thứ năm", "Thứ sáu", "Thứ bảy"]
+ },
+ sl: { // Slovenščina
+ months: [
+ "Januar", "Februar", "Marec", "April", "Maj", "Junij", "Julij", "Avgust", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Ned", "Pon", "Tor", "Sre", "Čet", "Pet", "Sob"
+ ],
+ dayOfWeek: ["Nedelja", "Ponedeljek", "Torek", "Sreda", "Četrtek", "Petek", "Sobota"]
+ },
+ cs: { // Čeština
+ months: [
+ "Leden", "Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec"
+ ],
+ dayOfWeekShort: [
+ "Ne", "Po", "Út", "St", "Čt", "Pá", "So"
+ ]
+ },
+ hu: { // Hungarian
+ months: [
+ "Január", "Február", "Március", "Április", "Május", "Június", "Július", "Augusztus", "Szeptember", "Október", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Va", "Hé", "Ke", "Sze", "Cs", "Pé", "Szo"
+ ],
+ dayOfWeek: ["vasárnap", "hétfő", "kedd", "szerda", "csütörtök", "péntek", "szombat"]
+ },
+ az: { //Azerbaijanian (Azeri)
+ months: [
+ "Yanvar", "Fevral", "Mart", "Aprel", "May", "Iyun", "Iyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"
+ ],
+ dayOfWeekShort: [
+ "B", "Be", "Ça", "Ç", "Ca", "C", "Ş"
+ ],
+ dayOfWeek: ["Bazar", "Bazar ertəsi", "Çərşənbə axşamı", "Çərşənbə", "Cümə axşamı", "Cümə", "Şənbə"]
+ },
+ bs: { //Bosanski
+ months: [
+ "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
+ ],
+ dayOfWeekShort: [
+ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
+ ],
+ dayOfWeek: ["Nedjelja","Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
+ },
+ ca: { //Català
+ months: [
+ "Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"
+ ],
+ dayOfWeekShort: [
+ "Dg", "Dl", "Dt", "Dc", "Dj", "Dv", "Ds"
+ ],
+ dayOfWeek: ["Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte"]
+ },
+ 'en-GB': { //English (British)
+ months: [
+ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+ ],
+ dayOfWeek: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
+ },
+ et: { //"Eesti"
+ months: [
+ "Jaanuar", "Veebruar", "Märts", "Aprill", "Mai", "Juuni", "Juuli", "August", "September", "Oktoober", "November", "Detsember"
+ ],
+ dayOfWeekShort: [
+ "P", "E", "T", "K", "N", "R", "L"
+ ],
+ dayOfWeek: ["Pühapäev", "Esmaspäev", "Teisipäev", "Kolmapäev", "Neljapäev", "Reede", "Laupäev"]
+ },
+ eu: { //Euskara
+ months: [
+ "Urtarrila", "Otsaila", "Martxoa", "Apirila", "Maiatza", "Ekaina", "Uztaila", "Abuztua", "Iraila", "Urria", "Azaroa", "Abendua"
+ ],
+ dayOfWeekShort: [
+ "Ig.", "Al.", "Ar.", "Az.", "Og.", "Or.", "La."
+ ],
+ dayOfWeek: ['Igandea', 'Astelehena', 'Asteartea', 'Asteazkena', 'Osteguna', 'Ostirala', 'Larunbata']
+ },
+ fi: { //Finnish (Suomi)
+ months: [
+ "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu", "Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu"
+ ],
+ dayOfWeekShort: [
+ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La"
+ ],
+ dayOfWeek: ["sunnuntai", "maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai"]
+ },
+ gl: { //Galego
+ months: [
+ "Xan", "Feb", "Maz", "Abr", "Mai", "Xun", "Xul", "Ago", "Set", "Out", "Nov", "Dec"
+ ],
+ dayOfWeekShort: [
+ "Dom", "Lun", "Mar", "Mer", "Xov", "Ven", "Sab"
+ ],
+ dayOfWeek: ["Domingo", "Luns", "Martes", "Mércores", "Xoves", "Venres", "Sábado"]
+ },
+ hr: { //Hrvatski
+ months: [
+ "Siječanj", "Veljača", "Ožujak", "Travanj", "Svibanj", "Lipanj", "Srpanj", "Kolovoz", "Rujan", "Listopad", "Studeni", "Prosinac"
+ ],
+ dayOfWeekShort: [
+ "Ned", "Pon", "Uto", "Sri", "Čet", "Pet", "Sub"
+ ],
+ dayOfWeek: ["Nedjelja", "Ponedjeljak", "Utorak", "Srijeda", "Četvrtak", "Petak", "Subota"]
+ },
+ ko: { //Korean (한국어)
+ months: [
+ "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"
+ ],
+ dayOfWeekShort: [
+ "일", "월", "화", "수", "목", "금", "토"
+ ],
+ dayOfWeek: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]
+ },
+ lt: { //Lithuanian (lietuvių)
+ months: [
+ "Sausio", "Vasario", "Kovo", "Balandžio", "Gegužės", "Birželio", "Liepos", "Rugpjūčio", "Rugsėjo", "Spalio", "Lapkričio", "Gruodžio"
+ ],
+ dayOfWeekShort: [
+ "Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Šeš"
+ ],
+ dayOfWeek: ["Sekmadienis", "Pirmadienis", "Antradienis", "Trečiadienis", "Ketvirtadienis", "Penktadienis", "Šeštadienis"]
+ },
+ lv: { //Latvian (Latviešu)
+ months: [
+ "Janvāris", "Februāris", "Marts", "Aprīlis ", "Maijs", "Jūnijs", "Jūlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"
+ ],
+ dayOfWeekShort: [
+ "Sv", "Pr", "Ot", "Tr", "Ct", "Pk", "St"
+ ],
+ dayOfWeek: ["Svētdiena", "Pirmdiena", "Otrdiena", "Trešdiena", "Ceturtdiena", "Piektdiena", "Sestdiena"]
+ },
+ mk: { //Macedonian (Македонски)
+ months: [
+ "јануари", "февруари", "март", "април", "мај", "јуни", "јули", "август", "септември", "октомври", "ноември", "декември"
+ ],
+ dayOfWeekShort: [
+ "нед", "пон", "вто", "сре", "чет", "пет", "саб"
+ ],
+ dayOfWeek: ["Недела", "Понеделник", "Вторник", "Среда", "Четврток", "Петок", "Сабота"]
+ },
+ mn: { //Mongolian (Монгол)
+ months: [
+ "1-р сар", "2-р сар", "3-р сар", "4-р сар", "5-р сар", "6-р сар", "7-р сар", "8-р сар", "9-р сар", "10-р сар", "11-р сар", "12-р сар"
+ ],
+ dayOfWeekShort: [
+ "Дав", "Мяг", "Лха", "Пүр", "Бсн", "Бям", "Ням"
+ ],
+ dayOfWeek: ["Даваа", "Мягмар", "Лхагва", "Пүрэв", "Баасан", "Бямба", "Ням"]
+ },
+ 'pt-BR': { //Português(Brasil)
+ months: [
+ "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"
+ ],
+ dayOfWeekShort: [
+ "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"
+ ],
+ dayOfWeek: ["Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"]
+ },
+ sk: { //Slovenčina
+ months: [
+ "Január", "Február", "Marec", "Apríl", "Máj", "Jún", "Júl", "August", "September", "Október", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Ne", "Po", "Ut", "St", "Št", "Pi", "So"
+ ],
+ dayOfWeek: ["Nedeľa", "Pondelok", "Utorok", "Streda", "Štvrtok", "Piatok", "Sobota"]
+ },
+ sq: { //Albanian (Shqip)
+ months: [
+ "Janar", "Shkurt", "Mars", "Prill", "Maj", "Qershor", "Korrik", "Gusht", "Shtator", "Tetor", "Nëntor", "Dhjetor"
+ ],
+ dayOfWeekShort: [
+ "Die", "Hën", "Mar", "Mër", "Enj", "Pre", "Shtu"
+ ],
+ dayOfWeek: ["E Diel", "E Hënë", "E Martē", "E Mërkurë", "E Enjte", "E Premte", "E Shtunë"]
+ },
+ 'sr-YU': { //Serbian (Srpski)
+ months: [
+ "Januar", "Februar", "Mart", "April", "Maj", "Jun", "Jul", "Avgust", "Septembar", "Oktobar", "Novembar", "Decembar"
+ ],
+ dayOfWeekShort: [
+ "Ned", "Pon", "Uto", "Sre", "čet", "Pet", "Sub"
+ ],
+ dayOfWeek: ["Nedelja","Ponedeljak", "Utorak", "Sreda", "Četvrtak", "Petak", "Subota"]
+ },
+ sr: { //Serbian Cyrillic (Српски)
+ months: [
+ "јануар", "фебруар", "март", "април", "мај", "јун", "јул", "август", "септембар", "октобар", "новембар", "децембар"
+ ],
+ dayOfWeekShort: [
+ "нед", "пон", "уто", "сре", "чет", "пет", "суб"
+ ],
+ dayOfWeek: ["Недеља","Понедељак", "Уторак", "Среда", "Четвртак", "Петак", "Субота"]
+ },
+ sv: { //Svenska
+ months: [
+ "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör"
+ ],
+ dayOfWeek: ["Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"]
+ },
+ 'zh-TW': { //Traditional Chinese (繁體中文)
+ months: [
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
+ ],
+ dayOfWeekShort: [
+ "日", "一", "二", "三", "四", "五", "六"
+ ],
+ dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
+ },
+ zh: { //Simplified Chinese (简体中文)
+ months: [
+ "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"
+ ],
+ dayOfWeekShort: [
+ "日", "一", "二", "三", "四", "五", "六"
+ ],
+ dayOfWeek: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
+ },
+ he: { //Hebrew (עברית)
+ months: [
+ 'ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'
+ ],
+ dayOfWeekShort: [
+ 'א\'', 'ב\'', 'ג\'', 'ד\'', 'ה\'', 'ו\'', 'שבת'
+ ],
+ dayOfWeek: ["ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת", "ראשון"]
+ },
+ hy: { // Armenian
+ months: [
+ "Հունվար", "Փետրվար", "Մարտ", "Ապրիլ", "Մայիս", "Հունիս", "Հուլիս", "Օգոստոս", "Սեպտեմբեր", "Հոկտեմբեր", "Նոյեմբեր", "Դեկտեմբեր"
+ ],
+ dayOfWeekShort: [
+ "Կի", "Երկ", "Երք", "Չոր", "Հնգ", "Ուրբ", "Շբթ"
+ ],
+ dayOfWeek: ["Կիրակի", "Երկուշաբթի", "Երեքշաբթի", "Չորեքշաբթի", "Հինգշաբթի", "Ուրբաթ", "Շաբաթ"]
+ },
+ kg: { // Kyrgyz
+ months: [
+ 'Үчтүн айы', 'Бирдин айы', 'Жалган Куран', 'Чын Куран', 'Бугу', 'Кулжа', 'Теке', 'Баш Оона', 'Аяк Оона', 'Тогуздун айы', 'Жетинин айы', 'Бештин айы'
+ ],
+ dayOfWeekShort: [
+ "Жек", "Дүй", "Шей", "Шар", "Бей", "Жум", "Ише"
+ ],
+ dayOfWeek: [
+ "Жекшемб", "Дүйшөмб", "Шейшемб", "Шаршемб", "Бейшемби", "Жума", "Ишенб"
+ ]
+ },
+ rm: { // Romansh
+ months: [
+ "Schaner", "Favrer", "Mars", "Avrigl", "Matg", "Zercladur", "Fanadur", "Avust", "Settember", "October", "November", "December"
+ ],
+ dayOfWeekShort: [
+ "Du", "Gli", "Ma", "Me", "Gie", "Ve", "So"
+ ],
+ dayOfWeek: [
+ "Dumengia", "Glindesdi", "Mardi", "Mesemna", "Gievgia", "Venderdi", "Sonda"
+ ]
+ },
+ },
+ value: '',
+ rtl: false,
+
+ format: 'Y/m/d H:i',
+ formatTime: 'H:i',
+ formatDate: 'Y/m/d',
+
+ startDate: false, // new Date(), '1986/12/08', '-1970/01/05','-1970/01/05',
+ step: 60,
+ monthChangeSpinner: true,
+
+ closeOnDateSelect: false,
+ closeOnTimeSelect: true,
+ closeOnWithoutClick: true,
+ closeOnInputClick: true,
+
+ timepicker: true,
+ datepicker: true,
+ weeks: false,
+
+ defaultTime: false, // use formatTime format (ex. '10:00' for formatTime: 'H:i')
+ defaultDate: false, // use formatDate format (ex new Date() or '1986/12/08' or '-1970/01/05' or '-1970/01/05')
+
+ minDate: false,
+ maxDate: false,
+ minTime: false,
+ maxTime: false,
+ disabledMinTime: false,
+ disabledMaxTime: false,
+
+ allowTimes: [],
+ opened: false,
+ initTime: true,
+ inline: false,
+ theme: '',
+
+ onSelectDate: function () {},
+ onSelectTime: function () {},
+ onChangeMonth: function () {},
+ onGetWeekOfYear: function () {},
+ onChangeYear: function () {},
+ onChangeDateTime: function () {},
+ onShow: function () {},
+ onClose: function () {},
+ onGenerate: function () {},
+
+ withoutCopyright: true,
+ inverseButton: false,
+ hours12: false,
+ next: 'xdsoft_next',
+ prev : 'xdsoft_prev',
+ dayOfWeekStart: 0,
+ parentID: 'body',
+ timeHeightInTimePicker: 25,
+ timepickerScrollbar: true,
+ todayButton: true,
+ prevButton: true,
+ nextButton: true,
+ defaultSelect: true,
+
+ scrollMonth: true,
+ scrollTime: true,
+ scrollInput: true,
+
+ lazyInit: false,
+ mask: false,
+ validateOnBlur: true,
+ allowBlank: true,
+ yearStart: 1950,
+ yearEnd: 2050,
+ monthStart: 0,
+ monthEnd: 11,
+ style: '',
+ id: '',
+ fixed: false,
+ roundTime: 'round', // ceil, floor
+ className: '',
+ weekends: [],
+ highlightedDates: [],
+ highlightedPeriods: [],
+ allowDates : [],
+ allowDateRe : null,
+ disabledDates : [],
+ disabledWeekDays: [],
+ yearOffset: 0,
+ beforeShowDay: null,
+
+ enterLikeTab: true,
+ showApplyButton: false
+ };
+
+ var dateHelper = null,
+ globalLocaleDefault = 'en',
+ globalLocale = 'en';
+
+ var dateFormatterOptionsDefault = {
+ meridiem: ['AM', 'PM']
+ };
+
+ var initDateFormatter = function(){
+ var locale = default_options.i18n[globalLocale],
+ opts = {
+ days: locale.dayOfWeek,
+ daysShort: locale.dayOfWeekShort,
+ months: locale.months,
+ monthsShort: $.map(locale.months, function(n){ return n.substring(0, 3) }),
+ };
+
+ dateHelper = new DateFormatter({
+ dateSettings: $.extend({}, dateFormatterOptionsDefault, opts)
+ });
+ };
+
+ // for locale settings
+ $.datetimepicker = {
+ setLocale: function(locale){
+ var newLocale = default_options.i18n[locale]?locale:globalLocaleDefault;
+ if(globalLocale != newLocale){
+ globalLocale = newLocale;
+ // reinit date formatter
+ initDateFormatter();
+ }
+ },
+ RFC_2822: 'D, d M Y H:i:s O',
+ ATOM: 'Y-m-d\TH:i:sP',
+ ISO_8601: 'Y-m-d\TH:i:sO',
+ RFC_822: 'D, d M y H:i:s O',
+ RFC_850: 'l, d-M-y H:i:s T',
+ RFC_1036: 'D, d M y H:i:s O',
+ RFC_1123: 'D, d M Y H:i:s O',
+ RSS: 'D, d M Y H:i:s O',
+ W3C: 'Y-m-d\TH:i:sP'
+ };
+
+ // first init date formatter
+ initDateFormatter();
+
+ // fix for ie8
+ if (!window.getComputedStyle) {
+ window.getComputedStyle = function (el, pseudo) {
+ this.el = el;
+ this.getPropertyValue = function (prop) {
+ var re = /(\-([a-z]){1})/g;
+ if (prop === 'float') {
+ prop = 'styleFloat';
+ }
+ if (re.test(prop)) {
+ prop = prop.replace(re, function (a, b, c) {
+ return c.toUpperCase();
+ });
+ }
+ return el.currentStyle[prop] || null;
+ };
+ return this;
+ };
+ }
+ if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function (obj, start) {
+ var i, j;
+ for (i = (start || 0), j = this.length; i < j; i += 1) {
+ if (this[i] === obj) { return i; }
+ }
+ return -1;
+ };
+ }
+ Date.prototype.countDaysInMonth = function () {
+ return new Date(this.getFullYear(), this.getMonth() + 1, 0).getDate();
+ };
+ $.fn.xdsoftScroller = function (percent) {
+ return this.each(function () {
+ var timeboxparent = $(this),
+ pointerEventToXY = function (e) {
+ var out = {x: 0, y: 0},
+ touch;
+ if (e.type === 'touchstart' || e.type === 'touchmove' || e.type === 'touchend' || e.type === 'touchcancel') {
+ touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+ out.x = touch.clientX;
+ out.y = touch.clientY;
+ } else if (e.type === 'mousedown' || e.type === 'mouseup' || e.type === 'mousemove' || e.type === 'mouseover' || e.type === 'mouseout' || e.type === 'mouseenter' || e.type === 'mouseleave') {
+ out.x = e.clientX;
+ out.y = e.clientY;
+ }
+ return out;
+ },
+ move = 0,
+ timebox,
+ parentHeight,
+ height,
+ scrollbar,
+ scroller,
+ maximumOffset = 100,
+ start = false,
+ startY = 0,
+ startTop = 0,
+ h1 = 0,
+ touchStart = false,
+ startTopScroll = 0,
+ calcOffset = function () {};
+ if (percent === 'hide') {
+ timeboxparent.find('.xdsoft_scrollbar').hide();
+ return;
+ }
+ if (!$(this).hasClass('xdsoft_scroller_box')) {
+ timebox = timeboxparent.children().eq(0);
+ parentHeight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ scrollbar = $('<div class="xdsoft_scrollbar"></div>');
+ scroller = $('<div class="xdsoft_scroller"></div>');
+ scrollbar.append(scroller);
+
+ timeboxparent.addClass('xdsoft_scroller_box').append(scrollbar);
+ calcOffset = function calcOffset(event) {
+ var offset = pointerEventToXY(event).y - startY + startTopScroll;
+ if (offset < 0) {
+ offset = 0;
+ }
+ if (offset + scroller[0].offsetHeight > h1) {
+ offset = h1 - scroller[0].offsetHeight;
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [maximumOffset ? offset / maximumOffset : 0]);
+ };
+
+ scroller
+ .on('touchstart.xdsoft_scroller mousedown.xdsoft_scroller', function (event) {
+ if (!parentHeight) {
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
+ }
+
+ startY = pointerEventToXY(event).y;
+ startTopScroll = parseInt(scroller.css('margin-top'), 10);
+ h1 = scrollbar[0].offsetHeight;
+
+ if (event.type === 'mousedown' || event.type === 'touchstart') {
+ if (document) {
+ $(document.body).addClass('xdsoft_noselect');
+ }
+ $([document.body, window]).on('touchend mouseup.xdsoft_scroller', function arguments_callee() {
+ $([document.body, window]).off('touchend mouseup.xdsoft_scroller', arguments_callee)
+ .off('mousemove.xdsoft_scroller', calcOffset)
+ .removeClass('xdsoft_noselect');
+ });
+ $(document.body).on('mousemove.xdsoft_scroller', calcOffset);
+ } else {
+ touchStart = true;
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ })
+ .on('touchmove', function (event) {
+ if (touchStart) {
+ event.preventDefault();
+ calcOffset(event);
+ }
+ })
+ .on('touchend touchcancel', function (event) {
+ touchStart = false;
+ startTopScroll = 0;
+ });
+
+ timeboxparent
+ .on('scroll_element.xdsoft_scroller', function (event, percentage) {
+ if (!parentHeight) {
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percentage, true]);
+ }
+ percentage = percentage > 1 ? 1 : (percentage < 0 || isNaN(percentage)) ? 0 : percentage;
+
+ scroller.css('margin-top', maximumOffset * percentage);
+
+ setTimeout(function () {
+ timebox.css('marginTop', -parseInt((timebox[0].offsetHeight - parentHeight) * percentage, 10));
+ }, 10);
+ })
+ .on('resize_scroll.xdsoft_scroller', function (event, percentage, noTriggerScroll) {
+ var percent, sh;
+ parentHeight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ percent = parentHeight / height;
+ sh = percent * scrollbar[0].offsetHeight;
+ if (percent > 1) {
+ scroller.hide();
+ } else {
+ scroller.show();
+ scroller.css('height', parseInt(sh > 10 ? sh : 10, 10));
+ maximumOffset = scrollbar[0].offsetHeight - scroller[0].offsetHeight;
+ if (noTriggerScroll !== true) {
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [percentage || Math.abs(parseInt(timebox.css('marginTop'), 10)) / (height - parentHeight)]);
+ }
+ }
+ });
+
+ timeboxparent.on('mousewheel', function (event) {
+ var top = Math.abs(parseInt(timebox.css('marginTop'), 10));
+
+ top = top - (event.deltaY * 20);
+ if (top < 0) {
+ top = 0;
+ }
+
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [top / (height - parentHeight)]);
+ event.stopPropagation();
+ return false;
+ });
+
+ timeboxparent.on('touchstart', function (event) {
+ start = pointerEventToXY(event);
+ startTop = Math.abs(parseInt(timebox.css('marginTop'), 10));
+ });
+
+ timeboxparent.on('touchmove', function (event) {
+ if (start) {
+ event.preventDefault();
+ var coord = pointerEventToXY(event);
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [(startTop - (coord.y - start.y)) / (height - parentHeight)]);
+ }
+ });
+
+ timeboxparent.on('touchend touchcancel', function (event) {
+ start = false;
+ startTop = 0;
+ });
+ }
+ timeboxparent.trigger('resize_scroll.xdsoft_scroller', [percent]);
+ });
+ };
+
+ $.fn.datetimepicker = function (opt, opt2) {
+ var result = this,
+ KEY0 = 48,
+ KEY9 = 57,
+ _KEY0 = 96,
+ _KEY9 = 105,
+ CTRLKEY = 17,
+ DEL = 46,
+ ENTER = 13,
+ ESC = 27,
+ BACKSPACE = 8,
+ ARROWLEFT = 37,
+ ARROWUP = 38,
+ ARROWRIGHT = 39,
+ ARROWDOWN = 40,
+ TAB = 9,
+ F5 = 116,
+ AKEY = 65,
+ CKEY = 67,
+ VKEY = 86,
+ ZKEY = 90,
+ YKEY = 89,
+ ctrlDown = false,
+ options = ($.isPlainObject(opt) || !opt) ? $.extend(true, {}, default_options, opt) : $.extend(true, {}, default_options),
+
+ lazyInitTimer = 0,
+ createDateTimePicker,
+ destroyDateTimePicker,
+
+ lazyInit = function (input) {
+ input
+ .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function initOnActionCallback(event) {
+ if (input.is(':disabled') || input.data('xdsoft_datetimepicker')) {
+ return;
+ }
+ clearTimeout(lazyInitTimer);
+ lazyInitTimer = setTimeout(function () {
+
+ if (!input.data('xdsoft_datetimepicker')) {
+ createDateTimePicker(input);
+ }
+ input
+ .off('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', initOnActionCallback)
+ .trigger('open.xdsoft');
+ }, 100);
+ });
+ };
+
+ createDateTimePicker = function (input) {
+ var datetimepicker = $('<div class="xdsoft_datetimepicker xdsoft_noselect"></div>'),
+ xdsoft_copyright = $('<div class="xdsoft_copyright"><a target="_blank" href="http://xdsoft.net/jqplugins/datetimepicker/">xdsoft.net</a></div>'),
+ datepicker = $('<div class="xdsoft_datepicker active"></div>'),
+ mounth_picker = $('<div class="xdsoft_mounthpicker"><button type="button" class="xdsoft_prev"></button><button type="button" class="xdsoft_today_button"></button>' +
+ '<div class="xdsoft_label xdsoft_month"><span></span><i></i></div>' +
+ '<div class="xdsoft_label xdsoft_year"><span></span><i></i></div>' +
+ '<button type="button" class="xdsoft_next"></button></div>'),
+ calendar = $('<div class="xdsoft_calendar"></div>'),
+ timepicker = $('<div class="xdsoft_timepicker active"><button type="button" class="xdsoft_prev"></button><div class="xdsoft_time_box"></div><button type="button" class="xdsoft_next"></button></div>'),
+ timeboxparent = timepicker.find('.xdsoft_time_box').eq(0),
+ timebox = $('<div class="xdsoft_time_variant"></div>'),
+ applyButton = $('<button type="button" class="xdsoft_save_selected blue-gradient-button">Save Selected</button>'),
+
+ monthselect = $('<div class="xdsoft_select xdsoft_monthselect"><div></div></div>'),
+ yearselect = $('<div class="xdsoft_select xdsoft_yearselect"><div></div></div>'),
+ triggerAfterOpen = false,
+ XDSoft_datetime,
+
+ xchangeTimer,
+ timerclick,
+ current_time_index,
+ setPos,
+ timer = 0,
+ timer1 = 0,
+ _xdsoft_datetime;
+
+ if (options.id) {
+ datetimepicker.attr('id', options.id);
+ }
+ if (options.style) {
+ datetimepicker.attr('style', options.style);
+ }
+ if (options.weeks) {
+ datetimepicker.addClass('xdsoft_showweeks');
+ }
+ if (options.rtl) {
+ datetimepicker.addClass('xdsoft_rtl');
+ }
+
+ datetimepicker.addClass('xdsoft_' + options.theme);
+ datetimepicker.addClass(options.className);
+
+ mounth_picker
+ .find('.xdsoft_month span')
+ .after(monthselect);
+ mounth_picker
+ .find('.xdsoft_year span')
+ .after(yearselect);
+
+ mounth_picker
+ .find('.xdsoft_month,.xdsoft_year')
+ .on('touchstart mousedown.xdsoft', function (event) {
+ var select = $(this).find('.xdsoft_select').eq(0),
+ val = 0,
+ top = 0,
+ visible = select.is(':visible'),
+ items,
+ i;
+
+ mounth_picker
+ .find('.xdsoft_select')
+ .hide();
+ if (_xdsoft_datetime.currentTime) {
+ val = _xdsoft_datetime.currentTime[$(this).hasClass('xdsoft_month') ? 'getMonth' : 'getFullYear']();
+ }
+
+ select[visible ? 'hide' : 'show']();
+ for (items = select.find('div.xdsoft_option'), i = 0; i < items.length; i += 1) {
+ if (items.eq(i).data('value') === val) {
+ break;
+ } else {
+ top += items[0].offsetHeight;
+ }
+ }
+
+ select.xdsoftScroller(top / (select.children()[0].offsetHeight - (select[0].clientHeight)));
+ event.stopPropagation();
+ return false;
+ });
+
+ mounth_picker
+ .find('.xdsoft_select')
+ .xdsoftScroller()
+ .on('touchstart mousedown.xdsoft', function (event) {
+ event.stopPropagation();
+ event.preventDefault();
+ })
+ .on('touchstart mousedown.xdsoft', '.xdsoft_option', function (event) {
+ if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ }
+
+ var year = _xdsoft_datetime.currentTime.getFullYear();
+ if (_xdsoft_datetime && _xdsoft_datetime.currentTime) {
+ _xdsoft_datetime.currentTime[$(this).parent().parent().hasClass('xdsoft_monthselect') ? 'setMonth' : 'setFullYear']($(this).data('value'));
+ }
+
+ $(this).parent().parent().hide();
+
+ datetimepicker.trigger('xchange.xdsoft');
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ if (year !== _xdsoft_datetime.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
+ options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ });
+
+ datetimepicker.getValue = function () {
+ return _xdsoft_datetime.getCurrentTime();
+ };
+
+ datetimepicker.setOptions = function (_options) {
+ var highlightedDates = {};
+
+
+ options = $.extend(true, {}, options, _options);
+
+ if (_options.allowTimes && $.isArray(_options.allowTimes) && _options.allowTimes.length) {
+ options.allowTimes = $.extend(true, [], _options.allowTimes);
+ }
+
+ if (_options.weekends && $.isArray(_options.weekends) && _options.weekends.length) {
+ options.weekends = $.extend(true, [], _options.weekends);
+ }
+
+ if (_options.allowDates && $.isArray(_options.allowDates) && _options.allowDates.length) {
+ options.allowDates = $.extend(true, [], _options.allowDates);
+ }
+
+ if (_options.allowDateRe && Object.prototype.toString.call(_options.allowDateRe)==="[object String]") {
+ options.allowDateRe = new RegExp(_options.allowDateRe);
+ }
+
+ if (_options.highlightedDates && $.isArray(_options.highlightedDates) && _options.highlightedDates.length) {
+ $.each(_options.highlightedDates, function (index, value) {
+ var splitData = $.map(value.split(','), $.trim),
+ exDesc,
+ hDate = new HighlightedDate(dateHelper.parseDate(splitData[0], options.formatDate), splitData[1], splitData[2]), // date, desc, style
+ keyDate = dateHelper.formatDate(hDate.date, options.formatDate);
+ if (highlightedDates[keyDate] !== undefined) {
+ exDesc = highlightedDates[keyDate].desc;
+ if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
+ highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
+ }
+ } else {
+ highlightedDates[keyDate] = hDate;
+ }
+ });
+
+ options.highlightedDates = $.extend(true, [], highlightedDates);
+ }
+
+ if (_options.highlightedPeriods && $.isArray(_options.highlightedPeriods) && _options.highlightedPeriods.length) {
+ highlightedDates = $.extend(true, [], options.highlightedDates);
+ $.each(_options.highlightedPeriods, function (index, value) {
+ var dateTest, // start date
+ dateEnd,
+ desc,
+ hDate,
+ keyDate,
+ exDesc,
+ style;
+ if ($.isArray(value)) {
+ dateTest = value[0];
+ dateEnd = value[1];
+ desc = value[2];
+ style = value[3];
+ }
+ else {
+ var splitData = $.map(value.split(','), $.trim);
+ dateTest = dateHelper.parseDate(splitData[0], options.formatDate);
+ dateEnd = dateHelper.parseDate(splitData[1], options.formatDate);
+ desc = splitData[2];
+ style = splitData[3];
+ }
+
+ while (dateTest <= dateEnd) {
+ hDate = new HighlightedDate(dateTest, desc, style);
+ keyDate = dateHelper.formatDate(dateTest, options.formatDate);
+ dateTest.setDate(dateTest.getDate() + 1);
+ if (highlightedDates[keyDate] !== undefined) {
+ exDesc = highlightedDates[keyDate].desc;
+ if (exDesc && exDesc.length && hDate.desc && hDate.desc.length) {
+ highlightedDates[keyDate].desc = exDesc + "\n" + hDate.desc;
+ }
+ } else {
+ highlightedDates[keyDate] = hDate;
+ }
+ }
+ });
+
+ options.highlightedDates = $.extend(true, [], highlightedDates);
+ }
+
+ if (_options.disabledDates && $.isArray(_options.disabledDates) && _options.disabledDates.length) {
+ options.disabledDates = $.extend(true, [], _options.disabledDates);
+ }
+
+ if (_options.disabledWeekDays && $.isArray(_options.disabledWeekDays) && _options.disabledWeekDays.length) {
+ options.disabledWeekDays = $.extend(true, [], _options.disabledWeekDays);
+ }
+
+ if ((options.open || options.opened) && (!options.inline)) {
+ input.trigger('open.xdsoft');
+ }
+
+ if (options.inline) {
+ triggerAfterOpen = true;
+ datetimepicker.addClass('xdsoft_inline');
+ input.after(datetimepicker).hide();
+ }
+
+ if (options.inverseButton) {
+ options.next = 'xdsoft_prev';
+ options.prev = 'xdsoft_next';
+ }
+
+ if (options.datepicker) {
+ datepicker.addClass('active');
+ } else {
+ datepicker.removeClass('active');
+ }
+
+ if (options.timepicker) {
+ timepicker.addClass('active');
+ } else {
+ timepicker.removeClass('active');
+ }
+
+ if (options.value) {
+ _xdsoft_datetime.setCurrentTime(options.value);
+ if (input && input.val) {
+ input.val(_xdsoft_datetime.str);
+ }
+ }
+
+ if (isNaN(options.dayOfWeekStart)) {
+ options.dayOfWeekStart = 0;
+ } else {
+ options.dayOfWeekStart = parseInt(options.dayOfWeekStart, 10) % 7;
+ }
+
+ if (!options.timepickerScrollbar) {
+ timeboxparent.xdsoftScroller('hide');
+ }
+
+ if (options.minDate && /^[\+\-](.*)$/.test(options.minDate)) {
+ options.minDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.minDate), options.formatDate);
+ }
+
+ if (options.maxDate && /^[\+\-](.*)$/.test(options.maxDate)) {
+ options.maxDate = dateHelper.formatDate(_xdsoft_datetime.strToDateTime(options.maxDate), options.formatDate);
+ }
+
+ applyButton.toggle(options.showApplyButton);
+
+ mounth_picker
+ .find('.xdsoft_today_button')
+ .css('visibility', !options.todayButton ? 'hidden' : 'visible');
+
+ mounth_picker
+ .find('.' + options.prev)
+ .css('visibility', !options.prevButton ? 'hidden' : 'visible');
+
+ mounth_picker
+ .find('.' + options.next)
+ .css('visibility', !options.nextButton ? 'hidden' : 'visible');
+
+ setMask(options);
+
+ if (options.validateOnBlur) {
+ input
+ .off('blur.xdsoft')
+ .on('blur.xdsoft', function () {
+ if (options.allowBlank && (!$.trim($(this).val()).length || $.trim($(this).val()) === options.mask.replace(/[0-9]/g, '_'))) {
+ $(this).val(null);
+ datetimepicker.data('xdsoft_datetime').empty();
+ } else if (!dateHelper.parseDate($(this).val(), options.format)) {
+ var splittedHours = +([$(this).val()[0], $(this).val()[1]].join('')),
+ splittedMinutes = +([$(this).val()[2], $(this).val()[3]].join(''));
+
+ // parse the numbers as 0312 => 03:12
+ if (!options.datepicker && options.timepicker && splittedHours >= 0 && splittedHours < 24 && splittedMinutes >= 0 && splittedMinutes < 60) {
+ $(this).val([splittedHours, splittedMinutes].map(function (item) {
+ return item > 9 ? item : '0' + item;
+ }).join(':'));
+ } else {
+ $(this).val(dateHelper.formatDate(_xdsoft_datetime.now(), options.format));
+ }
+
+ datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
+ } else {
+ datetimepicker.data('xdsoft_datetime').setCurrentTime($(this).val());
+ }
+
+ datetimepicker.trigger('changedatetime.xdsoft');
+ datetimepicker.trigger('close.xdsoft');
+ });
+ }
+ options.dayOfWeekStartPrev = (options.dayOfWeekStart === 0) ? 6 : options.dayOfWeekStart - 1;
+
+ datetimepicker
+ .trigger('xchange.xdsoft')
+ .trigger('afterOpen.xdsoft');
+ };
+
+ datetimepicker
+ .data('options', options)
+ .on('touchstart mousedown.xdsoft', function (event) {
+ event.stopPropagation();
+ event.preventDefault();
+ yearselect.hide();
+ monthselect.hide();
+ return false;
+ });
+
+ //scroll_element = timepicker.find('.xdsoft_time_box');
+ timeboxparent.append(timebox);
+ timeboxparent.xdsoftScroller();
+
+ datetimepicker.on('afterOpen.xdsoft', function () {
+ timeboxparent.xdsoftScroller();
+ });
+
+ datetimepicker
+ .append(datepicker)
+ .append(timepicker);
+
+ if (options.withoutCopyright !== true) {
+ datetimepicker
+ .append(xdsoft_copyright);
+ }
+
+ datepicker
+ .append(mounth_picker)
+ .append(calendar)
+ .append(applyButton);
+
+ $(options.parentID)
+ .append(datetimepicker);
+
+ XDSoft_datetime = function () {
+ var _this = this;
+ _this.now = function (norecursion) {
+ var d = new Date(),
+ date,
+ time;
+
+ if (!norecursion && options.defaultDate) {
+ date = _this.strToDateTime(options.defaultDate);
+ d.setFullYear(date.getFullYear());
+ d.setMonth(date.getMonth());
+ d.setDate(date.getDate());
+ }
+
+ if (options.yearOffset) {
+ d.setFullYear(d.getFullYear() + options.yearOffset);
+ }
+
+ if (!norecursion && options.defaultTime) {
+ time = _this.strtotime(options.defaultTime);
+ d.setHours(time.getHours());
+ d.setMinutes(time.getMinutes());
+ }
+ return d;
+ };
+
+ _this.isValidDate = function (d) {
+ if (Object.prototype.toString.call(d) !== "[object Date]") {
+ return false;
+ }
+ return !isNaN(d.getTime());
+ };
+
+ _this.setCurrentTime = function (dTime) {
+ _this.currentTime = (typeof dTime === 'string') ? _this.strToDateTime(dTime) : _this.isValidDate(dTime) ? dTime : _this.now();
+ datetimepicker.trigger('xchange.xdsoft');
+ };
+
+ _this.empty = function () {
+ _this.currentTime = null;
+ };
+
+ _this.getCurrentTime = function (dTime) {
+ return _this.currentTime;
+ };
+
+ _this.nextMonth = function () {
+
+ if (_this.currentTime === undefined || _this.currentTime === null) {
+ _this.currentTime = _this.now();
+ }
+
+ var month = _this.currentTime.getMonth() + 1,
+ year;
+ if (month === 12) {
+ _this.currentTime.setFullYear(_this.currentTime.getFullYear() + 1);
+ month = 0;
+ }
+
+ year = _this.currentTime.getFullYear();
+
+ _this.currentTime.setDate(
+ Math.min(
+ new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
+ _this.currentTime.getDate()
+ )
+ );
+ _this.currentTime.setMonth(month);
+
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ if (year !== _this.currentTime.getFullYear() && $.isFunction(options.onChangeYear)) {
+ options.onChangeYear.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+
+ datetimepicker.trigger('xchange.xdsoft');
+ return month;
+ };
+
+ _this.prevMonth = function () {
+
+ if (_this.currentTime === undefined || _this.currentTime === null) {
+ _this.currentTime = _this.now();
+ }
+
+ var month = _this.currentTime.getMonth() - 1;
+ if (month === -1) {
+ _this.currentTime.setFullYear(_this.currentTime.getFullYear() - 1);
+ month = 11;
+ }
+ _this.currentTime.setDate(
+ Math.min(
+ new Date(_this.currentTime.getFullYear(), month + 1, 0).getDate(),
+ _this.currentTime.getDate()
+ )
+ );
+ _this.currentTime.setMonth(month);
+ if (options.onChangeMonth && $.isFunction(options.onChangeMonth)) {
+ options.onChangeMonth.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ datetimepicker.trigger('xchange.xdsoft');
+ return month;
+ };
+
+ _this.getWeekOfYear = function (datetime) {
+ if (options.onGetWeekOfYear && $.isFunction(options.onGetWeekOfYear)) {
+ var week = options.onGetWeekOfYear.call(datetimepicker, datetime);
+ if (typeof week !== 'undefined') {
+ return week;
+ }
+ }
+ var onejan = new Date(datetime.getFullYear(), 0, 1);
+ //First week of the year is th one with the first Thursday according to ISO8601
+ if(onejan.getDay()!=4)
+ onejan.setMonth(0, 1 + ((4 - onejan.getDay()+ 7) % 7));
+ return Math.ceil((((datetime - onejan) / 86400000) + onejan.getDay() + 1) / 7);
+ };
+
+ _this.strToDateTime = function (sDateTime) {
+ var tmpDate = [], timeOffset, currentTime;
+
+ if (sDateTime && sDateTime instanceof Date && _this.isValidDate(sDateTime)) {
+ return sDateTime;
+ }
+
+ tmpDate = /^(\+|\-)(.*)$/.exec(sDateTime);
+ if (tmpDate) {
+ tmpDate[2] = dateHelper.parseDate(tmpDate[2], options.formatDate);
+ }
+ if (tmpDate && tmpDate[2]) {
+ timeOffset = tmpDate[2].getTime() - (tmpDate[2].getTimezoneOffset()) * 60000;
+ currentTime = new Date((_this.now(true)).getTime() + parseInt(tmpDate[1] + '1', 10) * timeOffset);
+ } else {
+ currentTime = sDateTime ? dateHelper.parseDate(sDateTime, options.format) : _this.now();
+ }
+
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now();
+ }
+
+ return currentTime;
+ };
+
+ _this.strToDate = function (sDate) {
+ if (sDate && sDate instanceof Date && _this.isValidDate(sDate)) {
+ return sDate;
+ }
+
+ var currentTime = sDate ? dateHelper.parseDate(sDate, options.formatDate) : _this.now(true);
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now(true);
+ }
+ return currentTime;
+ };
+
+ _this.strtotime = function (sTime) {
+ if (sTime && sTime instanceof Date && _this.isValidDate(sTime)) {
+ return sTime;
+ }
+ var currentTime = sTime ? dateHelper.parseDate(sTime, options.formatTime) : _this.now(true);
+ if (!_this.isValidDate(currentTime)) {
+ currentTime = _this.now(true);
+ }
+ return currentTime;
+ };
+
+ _this.str = function () {
+ return dateHelper.formatDate(_this.currentTime, options.format);
+ };
+ _this.currentTime = this.now();
+ };
+
+ _xdsoft_datetime = new XDSoft_datetime();
+
+ applyButton.on('touchend click', function (e) {//pathbrite
+ e.preventDefault();
+ datetimepicker.data('changed', true);
+ _xdsoft_datetime.setCurrentTime(getCurrentValue());
+ input.val(_xdsoft_datetime.str());
+ datetimepicker.trigger('close.xdsoft');
+ });
+ mounth_picker
+ .find('.xdsoft_today_button')
+ .on('touchend mousedown.xdsoft', function () {
+ datetimepicker.data('changed', true);
+ _xdsoft_datetime.setCurrentTime(0);
+ datetimepicker.trigger('afterOpen.xdsoft');
+ }).on('dblclick.xdsoft', function () {
+ var currentDate = _xdsoft_datetime.getCurrentTime(), minDate, maxDate;
+ currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate());
+ minDate = _xdsoft_datetime.strToDate(options.minDate);
+ minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
+ if (currentDate < minDate) {
+ return;
+ }
+ maxDate = _xdsoft_datetime.strToDate(options.maxDate);
+ maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate());
+ if (currentDate > maxDate) {
+ return;
+ }
+ input.val(_xdsoft_datetime.str());
+ input.trigger('change');
+ datetimepicker.trigger('close.xdsoft');
+ });
+ mounth_picker
+ .find('.xdsoft_prev,.xdsoft_next')
+ .on('touchend mousedown.xdsoft', function () {
+ var $this = $(this),
+ timer = 0,
+ stop = false;
+
+ (function arguments_callee1(v) {
+ if ($this.hasClass(options.next)) {
+ _xdsoft_datetime.nextMonth();
+ } else if ($this.hasClass(options.prev)) {
+ _xdsoft_datetime.prevMonth();
+ }
+ if (options.monthChangeSpinner) {
+ if (!stop) {
+ timer = setTimeout(arguments_callee1, v || 100);
+ }
+ }
+ }(500));
+
+ $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee2() {
+ clearTimeout(timer);
+ stop = true;
+ $([document.body, window]).off('touchend mouseup.xdsoft', arguments_callee2);
+ });
+ });
+
+ timepicker
+ .find('.xdsoft_prev,.xdsoft_next')
+ .on('touchend mousedown.xdsoft', function () {
+ var $this = $(this),
+ timer = 0,
+ stop = false,
+ period = 110;
+ (function arguments_callee4(v) {
+ var pheight = timeboxparent[0].clientHeight,
+ height = timebox[0].offsetHeight,
+ top = Math.abs(parseInt(timebox.css('marginTop'), 10));
+ if ($this.hasClass(options.next) && (height - pheight) - options.timeHeightInTimePicker >= top) {
+ timebox.css('marginTop', '-' + (top + options.timeHeightInTimePicker) + 'px');
+ } else if ($this.hasClass(options.prev) && top - options.timeHeightInTimePicker >= 0) {
+ timebox.css('marginTop', '-' + (top - options.timeHeightInTimePicker) + 'px');
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [Math.abs(parseInt(timebox.css('marginTop'), 10) / (height - pheight))]);
+ period = (period > 10) ? 10 : period - 10;
+ if (!stop) {
+ timer = setTimeout(arguments_callee4, v || period);
+ }
+ }(500));
+ $([document.body, window]).on('touchend mouseup.xdsoft', function arguments_callee5() {
+ clearTimeout(timer);
+ stop = true;
+ $([document.body, window])
+ .off('touchend mouseup.xdsoft', arguments_callee5);
+ });
+ });
+
+ xchangeTimer = 0;
+ // base handler - generating a calendar and timepicker
+ datetimepicker
+ .on('xchange.xdsoft', function (event) {
+ clearTimeout(xchangeTimer);
+ xchangeTimer = setTimeout(function () {
+
+ if (_xdsoft_datetime.currentTime === undefined || _xdsoft_datetime.currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ }
+
+ var table = '',
+ start = new Date(_xdsoft_datetime.currentTime.getFullYear(), _xdsoft_datetime.currentTime.getMonth(), 1, 12, 0, 0),
+ i = 0,
+ j,
+ today = _xdsoft_datetime.now(),
+ maxDate = false,
+ minDate = false,
+ hDate,
+ day,
+ d,
+ y,
+ m,
+ w,
+ classes = [],
+ customDateSettings,
+ newRow = true,
+ time = '',
+ h = '',
+ line_time,
+ description;
+
+ while (start.getDay() !== options.dayOfWeekStart) {
+ start.setDate(start.getDate() - 1);
+ }
+
+ table += '<table><thead><tr>';
+
+ if (options.weeks) {
+ table += '<th></th>';
+ }
+
+ for (j = 0; j < 7; j += 1) {
+ table += '<th>' + options.i18n[globalLocale].dayOfWeekShort[(j + options.dayOfWeekStart) % 7] + '</th>';
+ }
+
+ table += '</tr></thead>';
+ table += '<tbody>';
+
+ if (options.maxDate !== false) {
+ maxDate = _xdsoft_datetime.strToDate(options.maxDate);
+ maxDate = new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate(), 23, 59, 59, 999);
+ }
+
+ if (options.minDate !== false) {
+ minDate = _xdsoft_datetime.strToDate(options.minDate);
+ minDate = new Date(minDate.getFullYear(), minDate.getMonth(), minDate.getDate());
+ }
+
+ while (i < _xdsoft_datetime.currentTime.countDaysInMonth() || start.getDay() !== options.dayOfWeekStart || _xdsoft_datetime.currentTime.getMonth() === start.getMonth()) {
+ classes = [];
+ i += 1;
+
+ day = start.getDay();
+ d = start.getDate();
+ y = start.getFullYear();
+ m = start.getMonth();
+ w = _xdsoft_datetime.getWeekOfYear(start);
+ description = '';
+
+ classes.push('xdsoft_date');
+
+ if (options.beforeShowDay && $.isFunction(options.beforeShowDay.call)) {
+ customDateSettings = options.beforeShowDay.call(datetimepicker, start);
+ } else {
+ customDateSettings = null;
+ }
+
+ if(options.allowDateRe && Object.prototype.toString.call(options.allowDateRe) === "[object RegExp]"){
+ if(!options.allowDateRe.test(dateHelper.formatDate(start, options.formatDate))){
+ classes.push('xdsoft_disabled');
+ }
+ } else if(options.allowDates && options.allowDates.length>0){
+ if(options.allowDates.indexOf(dateHelper.formatDate(start, options.formatDate)) === -1){
+ classes.push('xdsoft_disabled');
+ }
+ } else if ((maxDate !== false && start > maxDate) || (minDate !== false && start < minDate) || (customDateSettings && customDateSettings[0] === false)) {
+ classes.push('xdsoft_disabled');
+ } else if (options.disabledDates.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
+ classes.push('xdsoft_disabled');
+ } else if (options.disabledWeekDays.indexOf(day) !== -1) {
+ classes.push('xdsoft_disabled');
+ }
+
+ if (customDateSettings && customDateSettings[1] !== "") {
+ classes.push(customDateSettings[1]);
+ }
+
+ if (_xdsoft_datetime.currentTime.getMonth() !== m) {
+ classes.push('xdsoft_other_month');
+ }
+
+ if ((options.defaultSelect || datetimepicker.data('changed')) && dateHelper.formatDate(_xdsoft_datetime.currentTime, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
+ classes.push('xdsoft_current');
+ }
+
+ if (dateHelper.formatDate(today, options.formatDate) === dateHelper.formatDate(start, options.formatDate)) {
+ classes.push('xdsoft_today');
+ }
+
+ if (start.getDay() === 0 || start.getDay() === 6 || options.weekends.indexOf(dateHelper.formatDate(start, options.formatDate)) !== -1) {
+ classes.push('xdsoft_weekend');
+ }
+
+ if (options.highlightedDates[dateHelper.formatDate(start, options.formatDate)] !== undefined) {
+ hDate = options.highlightedDates[dateHelper.formatDate(start, options.formatDate)];
+ classes.push(hDate.style === undefined ? 'xdsoft_highlighted_default' : hDate.style);
+ description = hDate.desc === undefined ? '' : hDate.desc;
+ }
+
+ if (options.beforeShowDay && $.isFunction(options.beforeShowDay)) {
+ classes.push(options.beforeShowDay(start));
+ }
+
+ if (newRow) {
+ table += '<tr>';
+ newRow = false;
+ if (options.weeks) {
+ table += '<th>' + w + '</th>';
+ }
+ }
+
+ table += '<td data-date="' + d + '" data-month="' + m + '" data-year="' + y + '"' + ' class="xdsoft_date xdsoft_day_of_week' + start.getDay() + ' ' + classes.join(' ') + '" title="' + description + '">' +
+ '<div>' + d + '</div>' +
+ '</td>';
+
+ if (start.getDay() === options.dayOfWeekStartPrev) {
+ table += '</tr>';
+ newRow = true;
+ }
+
+ start.setDate(d + 1);
+ }
+ table += '</tbody></table>';
+
+ calendar.html(table);
+
+ mounth_picker.find('.xdsoft_label span').eq(0).text(options.i18n[globalLocale].months[_xdsoft_datetime.currentTime.getMonth()]);
+ mounth_picker.find('.xdsoft_label span').eq(1).text(_xdsoft_datetime.currentTime.getFullYear());
+
+ // generate timebox
+ time = '';
+ h = '';
+ m = '';
+
+ line_time = function line_time(h, m) {
+ var now = _xdsoft_datetime.now(), optionDateTime, current_time,
+ isALlowTimesInit = options.allowTimes && $.isArray(options.allowTimes) && options.allowTimes.length;
+ now.setHours(h);
+ h = parseInt(now.getHours(), 10);
+ now.setMinutes(m);
+ m = parseInt(now.getMinutes(), 10);
+ optionDateTime = new Date(_xdsoft_datetime.currentTime);
+ optionDateTime.setHours(h);
+ optionDateTime.setMinutes(m);
+ classes = [];
+ if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || (options.maxTime !== false && _xdsoft_datetime.strtotime(options.maxTime).getTime() < now.getTime()) || (options.minTime !== false && _xdsoft_datetime.strtotime(options.minTime).getTime() > now.getTime())) {
+ classes.push('xdsoft_disabled');
+ }
+ if ((options.minDateTime !== false && options.minDateTime > optionDateTime) || ((options.disabledMinTime !== false && now.getTime() > _xdsoft_datetime.strtotime(options.disabledMinTime).getTime()) && (options.disabledMaxTime !== false && now.getTime() < _xdsoft_datetime.strtotime(options.disabledMaxTime).getTime()))) {
+ classes.push('xdsoft_disabled');
+ }
+
+ current_time = new Date(_xdsoft_datetime.currentTime);
+ current_time.setHours(parseInt(_xdsoft_datetime.currentTime.getHours(), 10));
+
+ if (!isALlowTimesInit) {
+ current_time.setMinutes(Math[options.roundTime](_xdsoft_datetime.currentTime.getMinutes() / options.step) * options.step);
+ }
+
+ if ((options.initTime || options.defaultSelect || datetimepicker.data('changed')) && current_time.getHours() === parseInt(h, 10) && ((!isALlowTimesInit && options.step > 59) || current_time.getMinutes() === parseInt(m, 10))) {
+ if (options.defaultSelect || datetimepicker.data('changed')) {
+ classes.push('xdsoft_current');
+ } else if (options.initTime) {
+ classes.push('xdsoft_init_time');
+ }
+ }
+ if (parseInt(today.getHours(), 10) === parseInt(h, 10) && parseInt(today.getMinutes(), 10) === parseInt(m, 10)) {
+ classes.push('xdsoft_today');
+ }
+ time += '<div class="xdsoft_time ' + classes.join(' ') + '" data-hour="' + h + '" data-minute="' + m + '">' + dateHelper.formatDate(now, options.formatTime) + '</div>';
+ };
+
+ if (!options.allowTimes || !$.isArray(options.allowTimes) || !options.allowTimes.length) {
+ for (i = 0, j = 0; i < (options.hours12 ? 12 : 24); i += 1) {
+ for (j = 0; j < 60; j += options.step) {
+ h = (i < 10 ? '0' : '') + i;
+ m = (j < 10 ? '0' : '') + j;
+ line_time(h, m);
+ }
+ }
+ } else {
+ for (i = 0; i < options.allowTimes.length; i += 1) {
+ h = _xdsoft_datetime.strtotime(options.allowTimes[i]).getHours();
+ m = _xdsoft_datetime.strtotime(options.allowTimes[i]).getMinutes();
+ line_time(h, m);
+ }
+ }
+
+ timebox.html(time);
+
+ opt = '';
+ i = 0;
+
+ for (i = parseInt(options.yearStart, 10) + options.yearOffset; i <= parseInt(options.yearEnd, 10) + options.yearOffset; i += 1) {
+ opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getFullYear() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + i + '</div>';
+ }
+ yearselect.children().eq(0)
+ .html(opt);
+
+ for (i = parseInt(options.monthStart, 10), opt = ''; i <= parseInt(options.monthEnd, 10); i += 1) {
+ opt += '<div class="xdsoft_option ' + (_xdsoft_datetime.currentTime.getMonth() === i ? 'xdsoft_current' : '') + '" data-value="' + i + '">' + options.i18n[globalLocale].months[i] + '</div>';
+ }
+ monthselect.children().eq(0).html(opt);
+ $(datetimepicker)
+ .trigger('generate.xdsoft');
+ }, 10);
+ event.stopPropagation();
+ })
+ .on('afterOpen.xdsoft', function () {
+ if (options.timepicker) {
+ var classType, pheight, height, top;
+ if (timebox.find('.xdsoft_current').length) {
+ classType = '.xdsoft_current';
+ } else if (timebox.find('.xdsoft_init_time').length) {
+ classType = '.xdsoft_init_time';
+ }
+ if (classType) {
+ pheight = timeboxparent[0].clientHeight;
+ height = timebox[0].offsetHeight;
+ top = timebox.find(classType).index() * options.timeHeightInTimePicker + 1;
+ if ((height - pheight) < top) {
+ top = height - pheight;
+ }
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [parseInt(top, 10) / (height - pheight)]);
+ } else {
+ timeboxparent.trigger('scroll_element.xdsoft_scroller', [0]);
+ }
+ }
+ });
+
+ timerclick = 0;
+ calendar
+ .on('touchend click.xdsoft', 'td', function (xdevent) {
+ xdevent.stopPropagation(); // Prevents closing of Pop-ups, Modals and Flyouts in Bootstrap
+ timerclick += 1;
+ var $this = $(this),
+ currentTime = _xdsoft_datetime.currentTime;
+
+ if (currentTime === undefined || currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ currentTime = _xdsoft_datetime.currentTime;
+ }
+
+ if ($this.hasClass('xdsoft_disabled')) {
+ return false;
+ }
+
+ currentTime.setDate(1);
+ currentTime.setFullYear($this.data('year'));
+ currentTime.setMonth($this.data('month'));
+ currentTime.setDate($this.data('date'));
+
+ datetimepicker.trigger('select.xdsoft', [currentTime]);
+
+ input.val(_xdsoft_datetime.str());
+
+ if (options.onSelectDate && $.isFunction(options.onSelectDate)) {
+ options.onSelectDate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
+ }
+
+ datetimepicker.data('changed', true);
+ datetimepicker.trigger('xchange.xdsoft');
+ datetimepicker.trigger('changedatetime.xdsoft');
+ if ((timerclick > 1 || (options.closeOnDateSelect === true || (options.closeOnDateSelect === false && !options.timepicker))) && !options.inline) {
+ datetimepicker.trigger('close.xdsoft');
+ }
+ setTimeout(function () {
+ timerclick = 0;
+ }, 200);
+ });
+
+ timebox
+ .on('touchend click.xdsoft', 'div', function (xdevent) {
+ xdevent.stopPropagation();
+ var $this = $(this),
+ currentTime = _xdsoft_datetime.currentTime;
+
+ if (currentTime === undefined || currentTime === null) {
+ _xdsoft_datetime.currentTime = _xdsoft_datetime.now();
+ currentTime = _xdsoft_datetime.currentTime;
+ }
+
+ if ($this.hasClass('xdsoft_disabled')) {
+ return false;
+ }
+ currentTime.setHours($this.data('hour'));
+ currentTime.setMinutes($this.data('minute'));
+ datetimepicker.trigger('select.xdsoft', [currentTime]);
+
+ datetimepicker.data('input').val(_xdsoft_datetime.str());
+
+ if (options.onSelectTime && $.isFunction(options.onSelectTime)) {
+ options.onSelectTime.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), xdevent);
+ }
+ datetimepicker.data('changed', true);
+ datetimepicker.trigger('xchange.xdsoft');
+ datetimepicker.trigger('changedatetime.xdsoft');
+ if (options.inline !== true && options.closeOnTimeSelect === true) {
+ datetimepicker.trigger('close.xdsoft');
+ }
+ });
+
+
+ datepicker
+ .on('mousewheel.xdsoft', function (event) {
+ if (!options.scrollMonth) {
+ return true;
+ }
+ if (event.deltaY < 0) {
+ _xdsoft_datetime.nextMonth();
+ } else {
+ _xdsoft_datetime.prevMonth();
+ }
+ return false;
+ });
+
+ input
+ .on('mousewheel.xdsoft', function (event) {
+ if (!options.scrollInput) {
+ return true;
+ }
+ if (!options.datepicker && options.timepicker) {
+ current_time_index = timebox.find('.xdsoft_current').length ? timebox.find('.xdsoft_current').eq(0).index() : 0;
+ if (current_time_index + event.deltaY >= 0 && current_time_index + event.deltaY < timebox.children().length) {
+ current_time_index += event.deltaY;
+ }
+ if (timebox.children().eq(current_time_index).length) {
+ timebox.children().eq(current_time_index).trigger('mousedown');
+ }
+ return false;
+ }
+ if (options.datepicker && !options.timepicker) {
+ datepicker.trigger(event, [event.deltaY, event.deltaX, event.deltaY]);
+ if (input.val) {
+ input.val(_xdsoft_datetime.str());
+ }
+ datetimepicker.trigger('changedatetime.xdsoft');
+ return false;
+ }
+ });
+
+ datetimepicker
+ .on('changedatetime.xdsoft', function (event) {
+ if (options.onChangeDateTime && $.isFunction(options.onChangeDateTime)) {
+ var $input = datetimepicker.data('input');
+ options.onChangeDateTime.call(datetimepicker, _xdsoft_datetime.currentTime, $input, event);
+ delete options.value;
+ $input.trigger('change');
+ }
+ })
+ .on('generate.xdsoft', function () {
+ if (options.onGenerate && $.isFunction(options.onGenerate)) {
+ options.onGenerate.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'));
+ }
+ if (triggerAfterOpen) {
+ datetimepicker.trigger('afterOpen.xdsoft');
+ triggerAfterOpen = false;
+ }
+ })
+ .on('click.xdsoft', function (xdevent) {
+ xdevent.stopPropagation();
+ });
+
+ current_time_index = 0;
+
+ setPos = function () {
+ /**
+ * 修复输入框在window最右边,且输入框的宽度小于日期控件宽度情况下,日期控件显示不全的bug。
+ * Bug fixed - The datetimepicker will overflow-y when the width of the date input less than its, which
+ * could causes part of the datetimepicker being hidden.
+ * by Soon start
+ */
+ var offset = datetimepicker.data('input').offset(),
+ datetimepickerelement = datetimepicker.data('input')[0],
+ top = offset.top + datetimepickerelement.offsetHeight - 1,
+ left = offset.left,
+ position = "absolute",
+ node;
+
+ if ((document.documentElement.clientWidth - offset.left) < datepicker.parent().outerWidth(true)) {
+ var diff = datepicker.parent().outerWidth(true) - datetimepickerelement.offsetWidth;
+ left = left - diff;
+ }
+ /**
+ * by Soon end
+ */
+ if (datetimepicker.data('input').parent().css('direction') == 'rtl')
+ left -= (datetimepicker.outerWidth() - datetimepicker.data('input').outerWidth());
+ if (options.fixed) {
+ top -= $(window).scrollTop();
+ left -= $(window).scrollLeft();
+ position = "fixed";
+ } else {
+ if (top + datetimepickerelement.offsetHeight > $(window).height() + $(window).scrollTop()) {
+ top = offset.top - datetimepickerelement.offsetHeight + 1;
+ }
+ if (top < 0) {
+ top = 0;
+ }
+ if (left + datetimepickerelement.offsetWidth > $(window).width()) {
+ left = $(window).width() - datetimepickerelement.offsetWidth;
+ }
+ }
+
+ node = datetimepicker[0];
+ do {
+ node = node.parentNode;
+ if (window.getComputedStyle(node).getPropertyValue('position') === 'relative' && $(window).width() >= node.offsetWidth) {
+ left = left - (($(window).width() - node.offsetWidth) / 2);
+ break;
+ }
+ } while (node.nodeName !== 'HTML');
+ datetimepicker.css({
+ left: left,
+ top: top,
+ position: position
+ });
+ };
+ datetimepicker
+ .on('open.xdsoft', function (event) {
+ var onShow = true;
+ if (options.onShow && $.isFunction(options.onShow)) {
+ onShow = options.onShow.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
+ }
+ if (onShow !== false) {
+ datetimepicker.show();
+ setPos();
+ $(window)
+ .off('resize.xdsoft', setPos)
+ .on('resize.xdsoft', setPos);
+
+ if (options.closeOnWithoutClick) {
+ $([document.body, window]).on('touchstart mousedown.xdsoft', function arguments_callee6() {
+ datetimepicker.trigger('close.xdsoft');
+ $([document.body, window]).off('touchstart mousedown.xdsoft', arguments_callee6);
+ });
+ }
+ }
+ })
+ .on('close.xdsoft', function (event) {
+ var onClose = true;
+ mounth_picker
+ .find('.xdsoft_month,.xdsoft_year')
+ .find('.xdsoft_select')
+ .hide();
+ if (options.onClose && $.isFunction(options.onClose)) {
+ onClose = options.onClose.call(datetimepicker, _xdsoft_datetime.currentTime, datetimepicker.data('input'), event);
+ }
+ if (onClose !== false && !options.opened && !options.inline) {
+ datetimepicker.hide();
+ }
+ event.stopPropagation();
+ })
+ .on('toggle.xdsoft', function (event) {
+ if (datetimepicker.is(':visible')) {
+ datetimepicker.trigger('close.xdsoft');
+ } else {
+ datetimepicker.trigger('open.xdsoft');
+ }
+ })
+ .data('input', input);
+
+ timer = 0;
+ timer1 = 0;
+
+ datetimepicker.data('xdsoft_datetime', _xdsoft_datetime);
+ datetimepicker.setOptions(options);
+
+ function getCurrentValue() {
+ var ct = false, time;
+
+ if (options.startDate) {
+ ct = _xdsoft_datetime.strToDate(options.startDate);
+ } else {
+ ct = options.value || ((input && input.val && input.val()) ? input.val() : '');
+ if (ct) {
+ ct = _xdsoft_datetime.strToDateTime(ct);
+ } else if (options.defaultDate) {
+ ct = _xdsoft_datetime.strToDateTime(options.defaultDate);
+ if (options.defaultTime) {
+ time = _xdsoft_datetime.strtotime(options.defaultTime);
+ ct.setHours(time.getHours());
+ ct.setMinutes(time.getMinutes());
+ }
+ }
+ }
+
+ if (ct && _xdsoft_datetime.isValidDate(ct)) {
+ datetimepicker.data('changed', true);
+ } else {
+ ct = '';
+ }
+
+ return ct || 0;
+ }
+
+ function setMask(options) {
+
+ var isValidValue = function (mask, value) {
+ var reg = mask
+ .replace(/([\[\]\/\{\}\(\)\-\.\+]{1})/g, '\\$1')
+ .replace(/_/g, '{digit+}')
+ .replace(/([0-9]{1})/g, '{digit$1}')
+ .replace(/\{digit([0-9]{1})\}/g, '[0-$1_]{1}')
+ .replace(/\{digit[\+]\}/g, '[0-9_]{1}');
+ return (new RegExp(reg)).test(value);
+ },
+ getCaretPos = function (input) {
+ try {
+ if (document.selection && document.selection.createRange) {
+ var range = document.selection.createRange();
+ return range.getBookmark().charCodeAt(2) - 2;
+ }
+ if (input.setSelectionRange) {
+ return input.selectionStart;
+ }
+ } catch (e) {
+ return 0;
+ }
+ },
+ setCaretPos = function (node, pos) {
+ node = (typeof node === "string" || node instanceof String) ? document.getElementById(node) : node;
+ if (!node) {
+ return false;
+ }
+ if (node.createTextRange) {
+ var textRange = node.createTextRange();
+ textRange.collapse(true);
+ textRange.moveEnd('character', pos);
+ textRange.moveStart('character', pos);
+ textRange.select();
+ return true;
+ }
+ if (node.setSelectionRange) {
+ node.setSelectionRange(pos, pos);
+ return true;
+ }
+ return false;
+ };
+ if(options.mask) {
+ input.off('keydown.xdsoft');
+ }
+ if (options.mask === true) {
+ if (typeof moment != 'undefined') {
+ options.mask = options.format
+ .replace(/Y{4}/g, '9999')
+ .replace(/Y{2}/g, '99')
+ .replace(/M{2}/g, '19')
+ .replace(/D{2}/g, '39')
+ .replace(/H{2}/g, '29')
+ .replace(/m{2}/g, '59')
+ .replace(/s{2}/g, '59');
+ } else {
+ options.mask = options.format
+ .replace(/Y/g, '9999')
+ .replace(/F/g, '9999')
+ .replace(/m/g, '19')
+ .replace(/d/g, '39')
+ .replace(/H/g, '29')
+ .replace(/i/g, '59')
+ .replace(/s/g, '59');
+ }
+ }
+
+ if ($.type(options.mask) === 'string') {
+ if (!isValidValue(options.mask, input.val())) {
+ input.val(options.mask.replace(/[0-9]/g, '_'));
+ setCaretPos(input[0], 0);
+ }
+
+ input.on('keydown.xdsoft', function (event) {
+ var val = this.value,
+ key = event.which,
+ pos,
+ digit;
+
+ if (((key >= KEY0 && key <= KEY9) || (key >= _KEY0 && key <= _KEY9)) || (key === BACKSPACE || key === DEL)) {
+ pos = getCaretPos(this);
+ digit = (key !== BACKSPACE && key !== DEL) ? String.fromCharCode((_KEY0 <= key && key <= _KEY9) ? key - KEY0 : key) : '_';
+
+ if ((key === BACKSPACE || key === DEL) && pos) {
+ pos -= 1;
+ digit = '_';
+ }
+
+ while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
+ pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
+ }
+
+ val = val.substr(0, pos) + digit + val.substr(pos + 1);
+ if ($.trim(val) === '') {
+ val = options.mask.replace(/[0-9]/g, '_');
+ } else {
+ if (pos === options.mask.length) {
+ event.preventDefault();
+ return false;
+ }
+ }
+
+ pos += (key === BACKSPACE || key === DEL) ? 0 : 1;
+ while (/[^0-9_]/.test(options.mask.substr(pos, 1)) && pos < options.mask.length && pos > 0) {
+ pos += (key === BACKSPACE || key === DEL) ? -1 : 1;
+ }
+
+ if (isValidValue(options.mask, val)) {
+ this.value = val;
+ setCaretPos(this, pos);
+ } else if ($.trim(val) === '') {
+ this.value = options.mask.replace(/[0-9]/g, '_');
+ } else {
+ input.trigger('error_input.xdsoft');
+ }
+ } else {
+ if (([AKEY, CKEY, VKEY, ZKEY, YKEY].indexOf(key) !== -1 && ctrlDown) || [ESC, ARROWUP, ARROWDOWN, ARROWLEFT, ARROWRIGHT, F5, CTRLKEY, TAB, ENTER].indexOf(key) !== -1) {
+ return true;
+ }
+ }
+
+ event.preventDefault();
+ return false;
+ });
+ }
+ }
+
+ _xdsoft_datetime.setCurrentTime(getCurrentValue());
+
+ input
+ .data('xdsoft_datetimepicker', datetimepicker)
+ .on('open.xdsoft focusin.xdsoft mousedown.xdsoft touchstart', function (event) {
+ if (input.is(':disabled') || (input.data('xdsoft_datetimepicker').is(':visible') && options.closeOnInputClick)) {
+ return;
+ }
+ clearTimeout(timer);
+ timer = setTimeout(function () {
+ if (input.is(':disabled')) {
+ return;
+ }
+
+ triggerAfterOpen = true;
+ _xdsoft_datetime.setCurrentTime(getCurrentValue());
+ if(options.mask) {
+ setMask(options);
+ }
+ datetimepicker.trigger('open.xdsoft');
+ }, 100);
+ })
+ .on('keydown.xdsoft', function (event) {
+ var val = this.value, elementSelector,
+ key = event.which;
+ if ([ENTER].indexOf(key) !== -1 && options.enterLikeTab) {
+ elementSelector = $("input:visible,textarea:visible,button:visible,a:visible");
+ datetimepicker.trigger('close.xdsoft');
+ elementSelector.eq(elementSelector.index(this) + 1).focus();
+ return false;
+ }
+ if ([TAB].indexOf(key) !== -1) {
+ datetimepicker.trigger('close.xdsoft');
+ return true;
+ }
+ })
+ .on('blur.xdsoft', function () {
+ datetimepicker.trigger('close.xdsoft');
+ });
+ };
+ destroyDateTimePicker = function (input) {
+ var datetimepicker = input.data('xdsoft_datetimepicker');
+ if (datetimepicker) {
+ datetimepicker.data('xdsoft_datetime', null);
+ datetimepicker.remove();
+ input
+ .data('xdsoft_datetimepicker', null)
+ .off('.xdsoft');
+ $(window).off('resize.xdsoft');
+ $([window, document.body]).off('mousedown.xdsoft touchstart');
+ if (input.unmousewheel) {
+ input.unmousewheel();
+ }
+ }
+ };
+ $(document)
+ .off('keydown.xdsoftctrl keyup.xdsoftctrl')
+ .on('keydown.xdsoftctrl', function (e) {
+ if (e.keyCode === CTRLKEY) {
+ ctrlDown = true;
+ }
+ })
+ .on('keyup.xdsoftctrl', function (e) {
+ if (e.keyCode === CTRLKEY) {
+ ctrlDown = false;
+ }
+ });
+
+ this.each(function () {
+ var datetimepicker = $(this).data('xdsoft_datetimepicker'), $input;
+ if (datetimepicker) {
+ if ($.type(opt) === 'string') {
+ switch (opt) {
+ case 'show':
+ $(this).select().focus();
+ datetimepicker.trigger('open.xdsoft');
+ break;
+ case 'hide':
+ datetimepicker.trigger('close.xdsoft');
+ break;
+ case 'toggle':
+ datetimepicker.trigger('toggle.xdsoft');
+ break;
+ case 'destroy':
+ destroyDateTimePicker($(this));
+ break;
+ case 'reset':
+ this.value = this.defaultValue;
+ if (!this.value || !datetimepicker.data('xdsoft_datetime').isValidDate(dateHelper.parseDate(this.value, options.format))) {
+ datetimepicker.data('changed', false);
+ }
+ datetimepicker.data('xdsoft_datetime').setCurrentTime(this.value);
+ break;
+ case 'validate':
+ $input = datetimepicker.data('input');
+ $input.trigger('blur.xdsoft');
+ break;
+ default:
+ if (datetimepicker[opt] && $.isFunction(datetimepicker[opt])) {
+ result = datetimepicker[opt](opt2);
+ }
+ }
+ } else {
+ datetimepicker
+ .setOptions(opt);
+ }
+ return 0;
+ }
+ if ($.type(opt) !== 'string') {
+ if (!options.lazyInit || options.open || options.inline) {
+ createDateTimePicker($(this));
+ } else {
+ lazyInit($(this));
+ }
+ }
+ });
+
+ return result;
+ };
+ $.fn.datetimepicker.defaults = default_options;
+
+ function HighlightedDate(date, desc, style) {
+ "use strict";
+ this.date = date;
+ this.desc = desc;
+ this.style = style;
+ }
+
+}));
+/*!
+ * jQuery Mousewheel 3.1.13
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ */
+
+(function (factory) {
+ if ( typeof define === 'function' && define.amd ) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof exports === 'object') {
+ // Node/CommonJS style for Browserify
+ module.exports = factory;
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+
+ var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
+ toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
+ ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
+ slice = Array.prototype.slice,
+ nullLowestDeltaTimeout, lowestDelta;
+
+ if ( $.event.fixHooks ) {
+ for ( var i = toFix.length; i; ) {
+ $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
+ }
+ }
+
+ var special = $.event.special.mousewheel = {
+ version: '3.1.12',
+
+ setup: function() {
+ if ( this.addEventListener ) {
+ for ( var i = toBind.length; i; ) {
+ this.addEventListener( toBind[--i], handler, false );
+ }
+ } else {
+ this.onmousewheel = handler;
+ }
+ // Store the line height and page height for this particular element
+ $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
+ $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
+ },
+
+ teardown: function() {
+ if ( this.removeEventListener ) {
+ for ( var i = toBind.length; i; ) {
+ this.removeEventListener( toBind[--i], handler, false );
+ }
+ } else {
+ this.onmousewheel = null;
+ }
+ // Clean up the data we added to the element
+ $.removeData(this, 'mousewheel-line-height');
+ $.removeData(this, 'mousewheel-page-height');
+ },
+
+ getLineHeight: function(elem) {
+ var $elem = $(elem),
+ $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
+ if (!$parent.length) {
+ $parent = $('body');
+ }
+ return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
+ },
+
+ getPageHeight: function(elem) {
+ return $(elem).height();
+ },
+
+ settings: {
+ adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
+ normalizeOffset: true // calls getBoundingClientRect for each event
+ }
+ };
+
+ $.fn.extend({
+ mousewheel: function(fn) {
+ return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
+ },
+
+ unmousewheel: function(fn) {
+ return this.unbind('mousewheel', fn);
+ }
+ });
+
+
+ function handler(event) {
+ var orgEvent = event || window.event,
+ args = slice.call(arguments, 1),
+ delta = 0,
+ deltaX = 0,
+ deltaY = 0,
+ absDelta = 0,
+ offsetX = 0,
+ offsetY = 0;
+ event = $.event.fix(orgEvent);
+ event.type = 'mousewheel';
+
+ // Old school scrollwheel delta
+ if ( 'detail' in orgEvent ) { deltaY = orgEvent.detail * -1; }
+ if ( 'wheelDelta' in orgEvent ) { deltaY = orgEvent.wheelDelta; }
+ if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY; }
+ if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
+
+ // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
+ if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+ deltaX = deltaY * -1;
+ deltaY = 0;
+ }
+
+ // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
+ delta = deltaY === 0 ? deltaX : deltaY;
+
+ // New school wheel delta (wheel event)
+ if ( 'deltaY' in orgEvent ) {
+ deltaY = orgEvent.deltaY * -1;
+ delta = deltaY;
+ }
+ if ( 'deltaX' in orgEvent ) {
+ deltaX = orgEvent.deltaX;
+ if ( deltaY === 0 ) { delta = deltaX * -1; }
+ }
+
+ // No change actually happened, no reason to go any further
+ if ( deltaY === 0 && deltaX === 0 ) { return; }
+
+ // Need to convert lines and pages to pixels if we aren't already in pixels
+ // There are three delta modes:
+ // * deltaMode 0 is by pixels, nothing to do
+ // * deltaMode 1 is by lines
+ // * deltaMode 2 is by pages
+ if ( orgEvent.deltaMode === 1 ) {
+ var lineHeight = $.data(this, 'mousewheel-line-height');
+ delta *= lineHeight;
+ deltaY *= lineHeight;
+ deltaX *= lineHeight;
+ } else if ( orgEvent.deltaMode === 2 ) {
+ var pageHeight = $.data(this, 'mousewheel-page-height');
+ delta *= pageHeight;
+ deltaY *= pageHeight;
+ deltaX *= pageHeight;
+ }
+
+ // Store lowest absolute delta to normalize the delta values
+ absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
+
+ if ( !lowestDelta || absDelta < lowestDelta ) {
+ lowestDelta = absDelta;
+
+ // Adjust older deltas if necessary
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+ lowestDelta /= 40;
+ }
+ }
+
+ // Adjust older deltas if necessary
+ if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+ // Divide all the things by 40!
+ delta /= 40;
+ deltaX /= 40;
+ deltaY /= 40;
+ }
+
+ // Get a whole, normalized value for the deltas
+ delta = Math[ delta >= 1 ? 'floor' : 'ceil' ](delta / lowestDelta);
+ deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
+ deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
+
+ // Normalise offsetX and offsetY properties
+ if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
+ var boundingRect = this.getBoundingClientRect();
+ offsetX = event.clientX - boundingRect.left;
+ offsetY = event.clientY - boundingRect.top;
+ }
+
+ // Add information to the event object
+ event.deltaX = deltaX;
+ event.deltaY = deltaY;
+ event.deltaFactor = lowestDelta;
+ event.offsetX = offsetX;
+ event.offsetY = offsetY;
+ // Go ahead and set deltaMode to 0 since we converted to pixels
+ // Although this is a little odd since we overwrite the deltaX/Y
+ // properties with normalized deltas.
+ event.deltaMode = 0;
+
+ // Add event and delta to the front of the arguments
+ args.unshift(event, delta, deltaX, deltaY);
+
+ // Clearout lowestDelta after sometime to better
+ // handle multiple device types that give different
+ // a different lowestDelta
+ // Ex: trackpad = 3 and mouse wheel = 120
+ if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
+ nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
+
+ return ($.event.dispatch || $.event.handle).apply(this, args);
+ }
+
+ function nullLowestDelta() {
+ lowestDelta = null;
+ }
+
+ function shouldAdjustOldDeltas(orgEvent, absDelta) {
+ // If this is an older event and the delta is divisable by 120,
+ // then we are assuming that the browser is treating this as an
+ // older mouse wheel event and that we should divide the deltas
+ // by 40 to try and get a more usable deltaFactor.
+ // Side note, this actually impacts the reported scroll distance
+ // in older browsers and can cause scrolling to be slower than native.
+ // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
+ return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
+ }
+
+}));
+
+$(document).ready(function(){
+ $.datetimepicker.setLocale('en');
+});
diff --git a/web/nms-public.gathering.org/js/jquery.min.js b/web/nms-public.gathering.org/js/jquery.min.js
new file mode 100644
index 0000000..e6a051d
--- /dev/null
+++ b/web/nms-public.gathering.org/js/jquery.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.2",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b=a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
+return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function ab(){return!0}function bb(){return!1}function cb(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?ab:bb):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=bb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=bb),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Lb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fb(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ub(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ib(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Vb(this,!0)},hide:function(){return Vb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)
+}m.Tween=Zb,Zb.prototype={constructor:Zb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Zb.propHooks.scrollTop=Zb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fb(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hc(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jc(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||fc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kc,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kc(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lc=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lc,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nc:mc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},oc.id=oc.name=oc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sc.test(a.nodeName)||tc.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var uc=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(uc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(uc," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mc(a,b,c,d){var e={},f=a===Ic;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nc(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Oc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mc(Ic,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Oc(k,v,c)),u=Pc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Uc.test(this.nodeName)&&!Tc.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xc[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_c.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dd(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dd(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/web/nms-public.gathering.org/js/nms-color-util.js b/web/nms-public.gathering.org/js/nms-color-util.js
new file mode 100644
index 0000000..6b5a4b5
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms-color-util.js
@@ -0,0 +1,93 @@
+
+/*
+ * Some stolen colors that look OK.
+ *
+ * PS: Stolen from boostrap, because we use bootstrap and these look good
+ * and match.
+ */
+var lightblue = "#d9edf7";
+var lightgreen = "#dff0d8";
+var lightred = "#f2dede";
+var lightorange = "#fcf8e3";
+var blue = "#337ab7";
+var green = "#5cb85c";
+var teal = "#5bc0de"; // Or whatever the hell that is
+var orange = "#f0ad4e";
+var red = "#d9534f";
+var white = "#ffffff";
+
+function gradient_from_latency(latency_ms, latency_secondary_ms)
+{
+ if (latency_ms == undefined)
+ return blue;
+ return getColorStop(parseInt(latency_ms) * 10);
+}
+
+/*
+ * Return a random-ish color (for testing)
+ */
+function getRandomColor()
+{
+ var colors = [ "white", red, teal, orange, green, blue ];
+ var i = Math.round(Math.random() * (colors.length-1));
+ return colors[i];
+}
+
+/*
+ * Set up the hidden gradient canvas, using an array as input.
+ *
+ * This gives us a flexible way to get gradients between any number of
+ * colors (green to red, or blue to green to orange to red to white to pink
+ * to black and so on).
+ *
+ * Typically called when setting up a map handler. Currently "single
+ * tenant", since there's just one canvas.
+ *
+ * XXX: We have to store the gradients in nms.* and restore this when we
+ * resize for the moment, because this canvas is also re-sized (which isn't
+ * really necessary, but avoids special handling).
+ */
+function drawGradient(gradients)
+{
+ var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
+ var gradient = ctx.createLinearGradient(0,0,1000,0);
+ var stops = gradients.length - 1;
+ nms.gradients = gradients;
+ for (var color in gradients) {
+ var i = color / stops;
+ gradient.addColorStop(i, gradients[color]);
+ }
+ ctx.beginPath();
+ ctx.strokeStyle = gradient;
+ ctx.moveTo(0,0);
+ ctx.lineTo(1000,0);
+ ctx.lineWidth = 10;
+ ctx.closePath();
+ ctx.stroke();
+ ctx.moveTo(0,0);
+}
+
+/*
+ * Get the color of a gradient, range is from 0 to 999 (inclusive).
+ */
+function getColorStop(x) {
+ x = parseInt(x);
+ if (x > 999)
+ x = 999;
+ if (x < 0)
+ x = 0;
+ return getColor(x,0);
+}
+
+/*
+ * Get the color on the hidden canvas at a specific point. Could easily be
+ * made generic.
+ */
+function getColor(x,y) {
+ var ctx = nmsMap._c.hidden.ctx; // FIXME: Move it away...
+ var imageData = ctx.getImageData(x, y, 1, 1);
+ var data = imageData.data;
+ if (data.length < 4)
+ return false;
+ return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')';
+}
diff --git a/web/nms-public.gathering.org/js/nms-data.js b/web/nms-public.gathering.org/js/nms-data.js
new file mode 100644
index 0000000..14e5fed
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms-data.js
@@ -0,0 +1,259 @@
+"use strict";
+
+/*
+ * This file/module/whatever is an attempt to gather all data collection in
+ * one place.
+ *
+ * The basic idea is to have all periodic data updates unified here, with
+ * stats, tracking of "ajax overflows" and general-purpose error handling
+ * and callbacks and whatnot, instead of all the custom stuff that we
+ * started out with.
+ *
+ * Sources are identified by a name, which is then available in
+ * nmsData[name] in full. A copy of the previous data set is kept in
+ * nmsData.old[name]. You can use getNow / setNow() to append a 'now='
+ * string.
+ *
+ * nmsData[name] - actual data
+ * nmsData.old[name] - previous copy of data
+ * nmsData.registerSource() - add a source, will be polled periodicall
+ * nmsData.addHandler()
+ * nmsData.updateSource() - issue a one-off update, outside of whatever
+ * periodic polling might take place
+ * nmsData.invalidate() - Invalidate browser-cache.
+ */
+
+
+var nmsData = nmsData || {
+ old: {}, // Single copy of previous data. Automatically populated.
+ stats: {
+ identicalFetches:0,
+ outstandingAjaxRequests:0,
+ ajaxOverflow:0,
+ pollClearsEmpty:0,
+ pollClears:0,
+ pollSets:0,
+ newSource:0,
+ oldSource:0
+ },
+ /*
+ * The last time stamp of any data received, regardless of source.
+ *
+ * Used as a fallback for blank now, but can also be used to check
+ * "freshness", I suppose.
+ */
+ _last: undefined,
+ _now: undefined,
+
+ /*
+ * These are provided so we can introduce error checking when we
+ * have time.
+ *
+ * now() represents the data, not the intent. That means that if
+ * you want to check if we are traveling in time you should not
+ * check nmsData.now. That will always return a value as long as
+ * we've had a single piece of data.
+ */
+ get now() { return this._now || this._last; },
+ set now(val) {
+ if (val == undefined || !val) {
+ nmsData._now = undefined;
+ } else {
+ // FIXME: Check if now is valid syntax.
+ nmsData._now = val;
+ }
+ },
+ /*
+ * List of sources, name, handler, etc
+ */
+ _sources: {},
+
+ /*
+ * Maximum number of AJAX requests in transit before we start
+ * skipping updates.
+ *
+ * A problem right now is that it will typically always hit the
+ * same thing since everything starts at the same time...
+ */
+ _ajaxThreshold: 10
+};
+
+
+nmsData._dropData = function (name) {
+ delete this[name];
+ delete this.old[name];
+};
+
+nmsData.removeSource = function (name) {
+ if (this._sources[name] == undefined) {
+ this.stats.pollClearsEmpty++;
+ return true;
+ }
+ if (this._sources[name]['handle']) {
+ this.stats.pollClears++;
+ clearInterval(this._sources[name]['handle']);
+ }
+ delete this._sources[name];
+};
+
+/*
+ * Register a source.
+ *
+ * name: "Local" name. Maps to nmsData[name]
+ * target: URL of the source
+ *
+ * This can be called multiple times to add multiple handlers. There's no
+ * guarantee that they will be run in order, but right now they do.
+ *
+ * Update frequency _might_ be adaptive eventually, but since we only
+ * execute callbacks on change and backend sends cache headers, the browser
+ * will not issue actual HTTP requests.
+ *
+ * FIXME: Should be unified with nmsTimers() somehow.
+ */
+nmsData.registerSource = function(name, target) {
+ if (this._sources[name] == undefined) {
+ this._sources[name] = { target: target, cbs: {}, fresh: true };
+ this._sources[name]['handle'] = setInterval(function(){nmsData.updateSource(name)}, 1000);
+ this.stats.newSource++;
+ } else {
+ this.stats.oldSource++;
+ }
+
+ this.stats.pollSets++;
+};
+
+/*
+ * Add a handler (callback) for a source, using an id.
+ *
+ * This is idempotent: if the id is the same, it will just overwrite the
+ * old id, not add a copy.
+ */
+nmsData.addHandler = function(name, id, cb, cbdata) {
+ var cbob = {
+ id: id,
+ name: name,
+ cb: cb,
+ fresh: true,
+ cbdata: cbdata
+ };
+ if (id == undefined) {
+ return;
+ }
+ this._sources[name].cbs[id] = cbob;
+ this.updateSource(name);
+};
+
+/*
+ * Unregister all handlers with the "id" for all sources.
+ *
+ * Mainly used to avoid fini() functions in the map handlers. E.g.: just
+ * reuse "mapHandler" as id.
+ */
+nmsData.unregisterHandlerWildcard = function(id) {
+ for (var v in nmsData._sources) {
+ this.unregisterHandler(v, id);
+ }
+};
+
+nmsData.unregisterHandler = function(name, id) {
+ delete this._sources[name].cbs[id];
+};
+
+/*
+ * Updates a source.
+ *
+ * Called on interval, but can also be used to update a source after a
+ * known action that updates the underlying data (e.g: update comments
+ * after a comment is posted).
+ */
+nmsData.updateSource = function(name) {
+ /*
+ * See comment in nms.js nmsINIT();
+ */
+ if (name == "ticker" ) {
+ for (var i in nmsData._sources[name].cbs) {
+ var tmp = nmsData._sources[name].cbs[i];
+ if (tmp.cb != undefined) {
+ tmp.cb(tmp.cbdata);
+ }
+ }
+ return;
+ }
+ this._genericUpdater(name, true);
+};
+
+nmsData.invalidate = function(name) {
+ this._genericUpdater(name, false);
+};
+/*
+ * Reset a source, deleting all data, including old.
+ *
+ * Useful if traveling in time, for example.
+ */
+nmsData.resetSource = function(name) {
+ this[name] = {};
+ this.old[name] = {};
+ this.updateSource(name);
+};
+
+/*
+ * Updates nmsData[name] and nmsData.old[name], issuing any callbacks where
+ * relevant.
+ *
+ * Do not use this directly. Use updateSource().
+ *
+ */
+nmsData._genericUpdater = function(name, cacheok) {
+ if (this.stats.outstandingAjaxRequests++ > this._ajaxThreshold) {
+ this.stats.outstandingAjaxRequests--;
+ this.stats.ajaxOverflow++;
+ return;
+ }
+ var now = "";
+ if (this._now != undefined)
+ now = "now=" + this._now;
+ if (now != "") {
+ if (this._sources[name].target.match("\\?"))
+ now = "&" + now;
+ else
+ now = "?" + now;
+ }
+ var heads = {};
+ if (cacheok == false) {
+ heads['Cache-Control'] = "max-age=0, no-cache, stale-while-revalidate=0";
+ }
+
+ $.ajax({
+ type: "GET",
+ headers: heads,
+ url: this._sources[name].target + now,
+ dataType: "json",
+ success: function (data, textStatus, jqXHR) {
+ if (nmsData[name] == undefined || nmsData[name]['hash'] != data['hash']) {
+ nmsData._last = data['time'];
+ nmsData.old[name] = nmsData[name];
+ nmsData[name] = data;
+ nmsMap.drawNow();
+ for (var i in nmsData._sources[name].cbs) {
+ var tmp2 = nmsData._sources[name].cbs[i];
+ if (tmp2.cb != undefined) {
+ tmp2.cb(tmp2.cbdata);
+ }
+ }
+ } else {
+ for (var j in nmsData._sources[name].cbs) {
+ var tmp = nmsData._sources[name].cbs[j];
+ if (tmp.cb != undefined && tmp.fresh) {
+ nmsData._sources[name].cbs[j].fresh = false;
+ tmp.cb(tmp.cbdata);
+ }
+ }
+ nmsData.stats.identicalFetches++;
+ }
+ },
+ complete: function(jqXHR, textStatus) {
+ nmsData.stats.outstandingAjaxRequests--;
+ }
+ });
+};
diff --git a/web/nms-public.gathering.org/js/nms-info-box.js b/web/nms-public.gathering.org/js/nms-info-box.js
new file mode 100644
index 0000000..a718f78
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms-info-box.js
@@ -0,0 +1,713 @@
+"use strict";
+
+/*
+ * NMS info window controller
+ *
+ * Interface: nmsInfoBox.showWindow(windowType,optionalParameter), nmsInfoBox.hide(), nmsInfoBox.refresh()
+ *
+ * Any windowTypes should at a minimum implement load, update, unload, getTitle, getContent, getChildContent
+ *
+ */
+
+var nmsInfoBox = nmsInfoBox || {
+ stats: {},
+ _container: false, //Container window
+ _window: false, //Active window (reference to _windowTypes object or false)
+ _windowTypes: [] //List of all avaliable window types
+};
+
+/*
+ * Shows a window from the _windowTypes list
+ */
+nmsInfoBox.showWindow = function (windowName,argument) {
+ if(windowName == "switchInfo" && argument != '' && argument == this._window.sw) {
+ nmsInfoBox.hide();
+ return;
+ }
+ nmsInfoBox.hide();
+ for(var win in this._windowTypes) {
+ if(windowName == win) {
+ this._window = this._windowTypes[win];
+ this._show(argument);
+ return;
+ }
+ }
+};
+
+/*
+ * Refresh the active window
+ */
+nmsInfoBox.refresh = function(argument) {
+ if(!nmsInfoBox._window)
+ return;
+ nmsInfoBox._show(argument);
+};
+nmsInfoBox.update = function(argument) {
+ if(!nmsInfoBox._window)
+ return;
+ nmsInfoBox._window.update(argument);
+}
+
+/*
+ * Internal function to show the active _window and pass along any arguments
+ */
+nmsInfoBox._show = function(argument) {
+ nmsData.addHandler("comments","switchshower",nmsInfoBox.update,'comments');
+ nmsData.addHandler("switches","switchshower",nmsInfoBox.update,'switches');
+ nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,'smanagement');
+ nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,'snmp');
+
+ if(argument != "soft")
+ this._window.load(argument);
+
+ this._container = document.getElementById("info-panel-container");
+ var panel = document.createElement("div");
+ panel.classList.add("panel", "panel-default");
+ var title = document.createElement("div");
+ title.classList.add("panel-heading");
+ var body = document.createElement("div");
+ body.classList.add("panel-body");
+
+ title.innerHTML = this._window.getTitle() + '<button type="button" class="close" aria-label="Close" onclick="nmsInfoBox.hide();" style="float: right;"><span aria-hidden="true">&times;</span></button>';
+ var content = this._window.getContent();
+ if(!content.nodeName) {
+ body.innerHTML = this._window.content;
+ } else {
+ body.appendChild(content);
+ }
+ var childContent = this._window.getChildContent();
+ if(childContent != false) {
+ body.appendChild(childContent);
+ }
+
+ panel.appendChild(title);
+ panel.appendChild(body);
+ while(this._container.firstChild) {
+ this._container.removeChild(this._container.firstChild);
+ }
+ this._container.appendChild(panel);
+ this._container.style.display = "block";
+ $('[data-toggle="popover"]').popover({placement:"top",container:'body'});
+};
+
+/*
+ * Hide the active window and tell it to unload
+ */
+nmsInfoBox.hide = function() {
+ if(!this._container || !this._window)
+ return;
+ this._container.style.display = "none";
+ this._window.unload();
+ this._window = false;
+ nmsData.unregisterHandler("comments","switchshower");
+ nmsData.unregisterHandler("switches","switchshower");
+ nmsData.unregisterHandler("smanagement","switchshower");
+ nmsData.unregisterHandler("snmp","switchshower");
+};
+
+/*
+ * Window type: Add Switch
+ *
+ * Basic window that lets you create a new switch
+ *
+ */
+nmsInfoBox._windowTypes.addSwitch = {
+ title: 'Add new switch',
+ content: '<input type="text" class="form-control" id="create-sysname" placeholder="Sysname id"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.addSwitch.save();">Add switch</button>',
+ childContent: false,
+ getTitle: function() {
+ return this.title;
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ load: function(argument) {
+ },
+ update: function(type) {
+ },
+ unload: function() {
+ },
+ save: function() {
+ var sysname = document.getElementById('create-sysname').value;
+ var myData = JSON.stringify([{'sysname':sysname}]);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/switch-add",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ var result = JSON.parse(data);
+ if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded
+ nmsInfoBox.hide();
+ }
+ nmsData.invalidate("switches");
+ nmsData.invalidate("smanagement");
+ }
+ });
+ }
+};
+
+/*
+ * Window type: Switch info
+ *
+ * Advanced window with information about a specific switch, and basic editing options
+ *
+ * Custom interfaces: showComments, showSNMP, showEdit, save
+ *
+ */
+nmsInfoBox._windowTypes.switchInfo = {
+ title: '',
+ content: '',
+ childContent: false,
+ sw: '',
+ swi: '',
+ swm: '',
+ commentsHash: false,
+ activeView: '',
+ load: function(sw) {
+ if(sw) {
+ this.sw = sw;
+ }
+ this.swi = nmsData.switches["switches"][this.sw];
+ try {
+ this.swm = nmsData.smanagement.switches[this.sw];
+ } catch(e) {
+ this.swm = [];
+ }
+
+ var content = [];
+
+ for (var v in this.swi) {
+ if (v == "placement") {
+ var place = JSON.stringify(this.swi[v]);
+ content.push([v,place]);
+ continue;
+ }
+ content.push([v, this.swi[v]]);
+ }
+
+ for (var v in this.swm) {
+ content.push([v, this.swm[v]]);
+ }
+ content.sort();
+
+ var infotable = nmsInfoBox._makeTable(content);
+ infotable.id = "info-switch-table";
+
+ this.content = infotable;
+
+ },
+ update: function(type) {
+ switch (type) {
+ case 'comments':
+ if(this.activeView == "comments" && this.commentsHash != nmsData.comments.hash) {
+ nmsInfoBox._windowTypes.switchInfo.showComments();
+ }
+ break;
+ }
+ },
+ getTitle: function() {
+ var sshButton = '';
+ try {
+ var mgmt = nmsInfoBox._window.swm.mgmt_v4_addr;
+ sshButton = mgmt.split("/")[0];
+ } catch(e) {
+ console.log(e);
+ }
+ if(sshButton != null && sshButton != undefined && sshButton != '') {
+ sshButton = ' <button type="button" class="ssh btn btn-xs btn-default"><a href="ssh://' + sshButton + '">SSH</a></button>';
+ }
+ return '<h4>' + this.sw + '</h4><button type="button" class="edit btn btn-xs btn-warning" onclick="nmsInfoBox._windowTypes.switchInfo.showEdit(\'' + this.sw + '\');">Edit</button> <button type="button" class="comments btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showComments(\'' + this.sw + '\');">Comments</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'ports\');">Ports</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'misc\');">Misc</button>' + sshButton;
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ showComments: function() {
+ var oldView = this.activeView;
+ this.activeView = "comments";
+ var domObj = document.createElement("div");
+ var comments = [];
+
+ var commentbox = document.createElement("div");
+ commentbox.id = "commentbox";
+ commentbox.className = "panel-body";
+ commentbox.style.width = "100%";
+ commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>';
+
+ // If we have no switch data, so just show comment form
+ if(!nmsData.comments || !nmsData.comments.comments) {
+ this.commentsHash = false;
+
+ // We have data, refresh
+ } else if(nmsData.comments.comments[this.sw]) {
+ this.commentsHash = nmsData.comments.hash;
+ for (var c in nmsData.comments.comments[this.sw]["comments"]) {
+ var comment = nmsData.comments.comments[this.sw]["comments"][c];
+ if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") {
+ comments.push(comment);
+ }
+ }
+
+ if (comments.length > 0) {
+ var commenttable = nmsInfoBox._makeCommentTable(comments);
+ commenttable.id = "info-switch-comments-table";
+ domObj.appendChild(commenttable);
+ }
+
+ // We have no data for this switch, but its still correct
+ } else {
+ this.commentsHash = nmsData.comments.hash;
+ }
+
+ domObj.appendChild(commentbox);
+ this.childContent = domObj;
+ nmsInfoBox.refresh();
+ },
+ showEdit: function() {
+ this.activeView = "edit";
+ var domObj = document.createElement("div");
+ var template = {};
+
+ nmsInfoBox._editValues = {};
+ var place;
+ for (var v in this.swi) {
+ if (v == "placement") {
+ place = JSON.stringify(this.swi[v]);
+ template[v] = place;
+ continue;
+ }
+ template[v] = nmsInfoBox._nullBlank(this.swi[v]);
+ }
+ for (var v in this.swm) {
+ template[v] = nmsInfoBox._nullBlank(this.swm[v]);
+ }
+ var content = [];
+ for (v in template) {
+ var tmpsw = '\'' + this.sw + '\'';
+ var tmpv = '\'' + v + '\'';
+ var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"';
+ var html = "<input type=\"text\" class=\"form-control\" value='" + template[v] + "' id=\"edit-"+ this.sw + "-" + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '/>';
+ content.push([v, html]);
+ }
+
+ content.sort();
+
+ var table = nmsInfoBox._makeTable(content, "edit");
+ domObj.appendChild(table);
+
+ var submit = document.createElement("button");
+ submit.innerHTML = "Save changes";
+ submit.classList.add("btn", "btn-primary");
+ submit.id = "edit-submit-" + this.sw;
+ submit.onclick = function(e) { nmsInfoBox._windowTypes.switchInfo.save(); };
+ domObj.appendChild(submit);
+
+ var output = document.createElement("output");
+ output.id = "edit-output";
+ domObj.appendChild(output);
+
+ if (place) {
+ var pval = document.getElementById("edit-" + this.sw + "-placement");
+ if (pval) {
+ pval.value = place;
+ }
+ }
+
+ this.childContent = domObj;
+ nmsInfoBox.refresh();
+ },
+ showSNMP: function(tree) {
+ this.activeView = "snmp";
+ var domObj = document.createElement("div");
+
+ var output = document.createElement("output");
+ output.id = "edit-output";
+ output.style = "white-space: pre;";
+ try {
+ output.value = JSON.stringify(nmsData.snmp.snmp[this.sw][tree],null,4);
+ } catch(e) {
+ output.value = "(no recent data (yet)?)";
+ }
+ domObj.appendChild(output);
+
+ this.childContent = domObj;
+ nmsInfoBox.refresh();
+ },
+ unload: function() {
+ this.title = '';
+ this.content = '';
+ this.childContent = false;
+ this.sw = '';
+ this.swi = '';
+ this.swm = '';
+ this.commentsHash = false;
+ this.activeView = '';
+ },
+ save: function() {
+ var myData = nmsInfoBox._editStringify(this.sw);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/switch-update",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ var result = JSON.parse(data);
+ if(result.switches_updated.length > 0) { // FIXME unresolved variable switches_addded
+ nmsInfoBox.hide();
+ }
+ nmsData.invalidate("switches");
+ nmsData.invalidate("smanagement");
+ }
+ });
+ }
+};
+
+/*
+ * Window type: Show inventory listing
+ *
+ * Basic window that displays a list of all devices with simple summary information
+ *
+ * TODO: Set up more complex views with more columns, sorting, etc.
+ *
+ */
+nmsInfoBox._windowTypes.inventoryListing = {
+ content: '',
+ childContent: false,
+ activeView: '',
+ activeFilter: '',
+ getTitle: function() {
+ return '<h4>Inventory listing</h4><button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'distro_name\');">Distro name</button> <button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'sysDescr\');">System Description</button>';
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ setFilter: function(filter) {
+ this.activeFilter = filter.toLowerCase();
+ nmsInfoBox._windowTypes.inventoryListing.load("refresh");
+ },
+ getFilter: function() {
+ return this.activeFilter;
+ },
+ load: function(list) {
+ var hasSnmp = false;
+ var targetArray = [];
+ var listTitle = '';
+ var needRefresh = false;
+ var needSnmp = false;
+ var contentObj = document.createElement("div");
+ var inputObj = document.createElement("div");
+ inputObj.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Filter" id="inventorylisting-filter" value="' + this.activeFilter + '" onkeyup="if (event.keyCode == 13) {nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);}"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);">Filtrer</button></span></div>';
+ contentObj.appendChild(inputObj);
+
+
+ if(!nmsData.switches || !nmsData.switches.switches)
+ return;
+ if(!(!nmsData.snmp || !nmsData.snmp.snmp)) {
+ hasSnmp = true;
+ }
+ if(list == "refresh") {
+ list = this.activeView;
+ needRefresh = true;
+ }
+
+ switch (list) {
+ case 'distro_name':
+ listTitle = 'Distro names';
+ break;
+ case 'sysDescr':
+ if(hasSnmp)
+ listTitle = 'System description';
+ needSnmp = true;
+ break;
+ default:
+ listTitle = 'Distro names';
+ list = 'distro_name';
+ }
+ this.activeView = list;
+
+ if(needSnmp && !hasSnmp) {
+ this.content = "No SNMP data loaded. Reloading shortly.";
+ nmsData.addHandler("snmp","inventoryListing",nmsInfoBox._windowTypes.inventoryListing.update,"snmp-request");
+ return;
+ }
+
+ var resultArray = [];
+ for(var sw in nmsData.switches.switches) {
+ var value = '';
+ if(this.activeFilter != '') {
+ if(sw.toLowerCase().indexOf(this.activeFilter) == -1 && !nmsInfoBox._searchSmart(this.activeFilter,sw))
+ continue;
+ }
+ try {
+ switch (list) {
+ case 'distro_name':
+ value = nmsData.switches.switches[sw]["distro_name"];
+ break;
+ case 'sysDescr':
+ value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
+ break;
+ }
+ } catch (e) {
+ //console.log(e);
+ }
+ resultArray.push([sw, value]);
+ }
+
+ resultArray.sort();
+
+ var infotable = nmsInfoBox._makeTable(resultArray,listTitle);
+ infotable.id = "inventory-table";
+
+ contentObj.appendChild(infotable);
+ this.content = contentObj;
+ if(needRefresh)
+ nmsInfoBox.refresh("soft");
+ },
+ update: function(type) {
+ if(type == "snmp-request") {
+ nmsData.unregisterHandler("snmp","inventoryListing");
+ nmsInfoBox._windowTypes.inventoryListing.load("refresh");
+ }
+ },
+ unload: function() {
+ nmsData.unregisterHandler("snmp","inventoryListing");
+ this.content = '';
+ this.activeView = '';
+ this.activeFilter = '';
+ },
+ save: function() {
+ }
+};
+
+/*
+ * Click a switch and display it
+ * it.
+ */
+nmsInfoBox.click = function(sw)
+{
+ this.showWindow("switchInfo",sw);
+ this._windowTypes.switchInfo.showComments();
+};
+
+/*
+ * General-purpose table-maker?
+ *
+ * Takes an array of arrays as input, and an optional caption.
+ *
+ * E.g.: _makeTable([["name","Kjell"],["Age","five"]], "Age list");
+ */
+nmsInfoBox._makeTable = function(content, caption) {
+ var table = document.createElement("table");
+ var tr;
+ var td1;
+ var td2;
+ table.className = "table";
+ table.classList.add("table");
+ table.classList.add("table-condensed");
+ if (caption != undefined) {
+ var cap = document.createElement("caption");
+ cap.textContent = caption;
+ table.appendChild(cap);
+ }
+ for (var v in content) {
+ tr = table.insertRow(-1);
+ tr.className = content[v][0].toLowerCase();
+ td1 = tr.insertCell(0);
+ td2 = tr.insertCell(1);
+ td1.innerHTML = content[v][0];
+ td2.innerHTML = content[v][1];
+ }
+ return table;
+};
+
+/*
+ * Create and return a table for comments.
+ *
+ * Input is an array of comments.
+ */
+nmsInfoBox._makeCommentTable = function(content) {
+ var table = document.createElement("table");
+ table.className = "table";
+ table.classList.add("table");
+ table.classList.add("table-condensed");
+ var cap = document.createElement("caption");
+ cap.textContent = "Comments"
+ table.appendChild(cap);
+ for (var commentid in content) {
+ var tr;
+ var td1;
+ var td2;
+ var comment = content[commentid];
+ var col;
+ if (comment["state"] == "active")
+ col = "danger";
+ else if (comment["state"] == "inactive")
+ col = false;
+ else
+ col = "info";
+ tr = table.insertRow(-1);
+ tr.id = "commentRow" + comment["id"];
+ tr.className = col;
+
+ td1 = tr.insertCell(0);
+ td1.style.whiteSpace = "nowrap";
+ td1.style.width = "8em";
+ td2 = tr.insertCell(1);
+ var txt = '<div class="btn-group" role="group" aria-label="..."><button type="button" class="btn btn-xs btn-default" data-trigger="focus" data-toggle="popover" title="Info" data-content="Comment added ' + comment["time"] + " by user " + comment["username"] + ' and listed as ' + comment["state"] + '"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></button>';
+ txt += '<button type="button" class="btn btn-xs btn-danger" data-trigger="focus" data-toggle="tooltip" title="Mark as deleted" onclick="commentDelete(' + comment["id"] + ');"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span></button>';
+ txt += '<button type="button" class="btn btn-xs btn-success" data-trigger="focus" data-toggle="tooltip" title="Mark as inactive/fixed" onclick="commentInactive(' + comment["id"] + ');"><span class="glyphicon glyphicon-ok" aria-hidden="true"></span></button>';
+ txt += '<button type="button" class="btn btn-xs btn-info" data-trigger="focus" data-toggle="tooltip" title="Mark as persistent" onclick="commentPersist(' + comment["id"] + ');"><span class="glyphicon glyphicon-star" aria-hidden="true"></span></button></div>';
+ td1.innerHTML = txt;
+ td2.innerHTML = comment["comment"];
+ }
+ return table;
+};
+
+nmsInfoBox._searchSmart = function(id, sw) {
+ try {
+ try {
+ if (nmsData.switches.switches[sw].distro_name.toLowerCase() == id) {
+ return true;
+ }
+ } catch (e) {}
+ if (id.match("active")) {
+ var limit = id;
+ limit = limit.replace("active>","");
+ limit = limit.replace("active<","");
+ limit = limit.replace("active=","");
+ var operator = id.replace("active","")[0];
+ if (limit == parseInt(limit)) {
+ if (operator == ">" ) {
+ if (nmsData.switchstate.switches[sw]['totals'].live > limit) {
+ return true;
+ }
+ } else if (operator == "<") {
+ if (nmsData.switchstate.switches[sw]['totals'].live < limit) {
+ return true;
+ }
+ } else if (operator == "=") {
+ if (nmsData.switchstate.switches[sw]['totals'].live == limit) {
+ return true;
+ }
+ }
+ }
+ }
+ try {
+ if (nmsData.smanagement.switches[sw].mgmt_v4_addr.match(id)) {
+ return true;
+ }
+ if (nmsData.smanagement.switches[sw].mgmt_v6_addr.match(id)) {
+ return true;
+ }
+ } catch (e) {}
+ try {
+ if (nmsData.smanagement.switches[sw].subnet4.match(id)) {
+ return true;
+ }
+ if (nmsData.smanagement.switches[sw].subnet6.match(id)) {
+ return true;
+ }
+ } catch (e) {}
+ if (nmsData.snmp.snmp[sw].misc.sysDescr[0].toLowerCase().match(id)) {
+ return true;
+ }
+ } catch (e) {
+ return false;
+ }
+ return false;
+};
+
+/*
+ * FIXME: Not sure this belongs here, it's really part of the "Core" ui,
+ * not just the infobox.
+ */
+nmsInfoBox._search = function() {
+ var el = document.getElementById("searchbox");
+ var id = false;
+ var matches = [];
+ if (el) {
+ id = el.value.toLowerCase();
+ }
+ if(id) {
+ nmsMap.enableHighlights();
+ for(var sw in nmsData.switches.switches) {
+ if(sw.toLowerCase().indexOf(id) > -1) {
+ matches.push(sw);
+ nmsMap.setSwitchHighlight(sw,true);
+ } else if (nmsInfoBox._searchSmart(id,sw)) {
+ matches.push(sw);
+ nmsMap.setSwitchHighlight(sw,true);
+ } else {
+ nmsMap.setSwitchHighlight(sw,false);
+ }
+ }
+ } else {
+ nmsMap.disableHighlights();
+ }
+ if(matches.length == 1) {
+ document.getElementById("searchbox-submit").classList.add("btn-primary");
+ document.getElementById("searchbox").dataset.match = matches[0];
+ } else {
+ document.getElementById("searchbox-submit").classList.remove("btn-primary");
+ document.getElementById("searchbox").dataset.match = '';
+ }
+};
+
+nmsInfoBox._searchKeyListener = function(e) {
+ switch (e.keyCode) {
+ case 13:
+ var sw = document.getElementById("searchbox").dataset.match;
+ if(sw != '') {
+ nmsInfoBox.showWindow("switchInfo",sw);
+ this._windowTypes.switchInfo.showComments();
+ }
+ break;
+ case 27:
+ document.getElementById("searchbox").dataset.match = '';
+ document.getElementById("searchbox").value = '';
+ nmsInfoBox._search();
+ nmsInfoBox.hide();
+ break;
+ }
+};
+
+nmsInfoBox._nullBlank = function(x) {
+ if (x == null || x == false || x == undefined)
+ return "";
+ return x;
+};
+
+
+nmsInfoBox._editChange = function(sw, v) {
+ var el = document.getElementById("edit-" + sw + "-" + v);
+ var val = el.value;
+ if (v == "placement") {
+ try {
+ val = JSON.parse(val);
+ el.parentElement.classList.remove("has-error");
+ el.parentElement.classList.add("has-success");
+ } catch (e) {
+ el.parentElement.classList.add("has-error");
+ return;
+ }
+ }
+ nmsInfoBox._editValues[v] = val;
+ el.classList.add("has-warning");
+ var myData = nmsInfoBox._editStringify(sw);
+ var out = document.getElementById("edit-output");
+ out.value = myData;
+};
+
+nmsInfoBox._editStringify = function(sw) {
+ nmsInfoBox._editValues['sysname'] = sw;
+ return JSON.stringify([nmsInfoBox._editValues]);
+};
diff --git a/web/nms-public.gathering.org/js/nms-map-handlers.js b/web/nms-public.gathering.org/js/nms-map-handlers.js
new file mode 100644
index 0000000..868d26d
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms-map-handlers.js
@@ -0,0 +1,491 @@
+/*
+ * Map handlers/updaters for NMS.
+ *
+ * These are functions used to determine how the map should look in NMS.
+ * They represent vastly different information, but in a uniform way.
+ *
+ * The idea is that these updaters only parse information that's fetched by
+ * NMS - they do not request additional information. E.g., ping data is
+ * always present, but until the ping-handler is active, it isn't
+ * displayed. This might seem redundant, but it means any handler can
+ * utilize information from any aspect of NMS, and thus opens NMS up to the
+ * world of intelligent maps base don multiple data sources.
+ *
+ * Warning: This paradigm will change. Handlers will be expected to
+ * register their own callbacks for nmsData. Work in progress.
+ *
+ */
+
+/*
+ */
+
+var handler_uplinks = {
+ init:uplinkInit,
+ tag:"uplink",
+ name:"Uplink map"
+};
+
+var handler_temp = {
+ init:tempInit,
+ tag:"temp",
+ name:"Temperature map"
+};
+
+var handler_ping = {
+ init:pingInit,
+ tag:"ping",
+ name:"IPv4 Ping map"
+};
+
+var handler_traffic = {
+ init:trafficInit,
+ tag:"traffic",
+ name:"Uplink traffic map"
+};
+
+var handler_traffic_tot = {
+ init:trafficTotInit,
+ tag:"traffictot",
+ name:"Switch traffic map"
+};
+
+var handler_dhcp = {
+ init:dhcpInit,
+ tag:"dhcp",
+ name:"DHCP map"
+};
+
+var handler_disco = {
+ init:discoInit,
+ tag:"disco",
+ name:"Disco fever"
+};
+
+var handler_comment = {
+ init:commentInit,
+ tag:"comment",
+ name:"Fresh comment spotter"
+};
+
+var handler_snmp = {
+ init:snmpInit,
+ tag:"snmp",
+ name:"SNMP state"
+};
+
+var handler_cpu = {
+ init:cpuInit,
+ tag:"cpu",
+ name:"CPU utilization"
+};
+
+var handlers = [
+ handler_uplinks,
+ handler_temp,
+ handler_ping,
+ handler_traffic,
+ handler_disco,
+ handler_comment,
+ handler_traffic_tot,
+ handler_dhcp,
+ handler_snmp,
+ handler_cpu
+ ];
+
+/*
+ * Update function for uplink map
+ */
+function uplinkUpdater()
+{
+ if (!nmsData.switches)
+ return;
+ if (!nmsData.switches.switches)
+ return;
+ if (!nmsData.switchstate)
+ return;
+ if (!nmsData.switchstate.switches)
+ return;
+ for (var sw in nmsData.switches.switches) {
+ var uplinks=0;
+ if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) {
+ uplinks=0;
+ } else {
+ uplinks = nmsData.switchstate.switches[sw].uplinks.live;
+ nuplinks = nmsData.switchstate.switches[sw].uplinks.total;
+ }
+
+ if (uplinks == 0) {
+ nmsMap.setSwitchColor(sw,"white");
+ } else if (uplinks == 1) {
+ nmsMap. setSwitchColor(sw, red);
+ } else if (uplinks == 2) {
+ nmsMap.setSwitchColor(sw, orange);
+ } else if (uplinks == 3) {
+ nmsMap.setSwitchColor(sw,green);
+ } else if (uplinks > 3) {
+ nmsMap.setSwitchColor(sw, blue);
+ }
+ }
+}
+
+/*
+ * Init-function for uplink map
+ */
+function uplinkInit()
+{
+ nmsData.addHandler("switches","mapHandler",uplinkUpdater);
+ nmsData.addHandler("switchstate","mapHandler",uplinkUpdater);
+ setLegend(1,"white","0 uplinks");
+ setLegend(2,red,"1 uplink");
+ setLegend(3,orange,"2 uplinks");
+ setLegend(4,green,"3 uplinks");
+ setLegend(5,blue,"4 uplinks");
+}
+
+/*
+ * Init-function for uplink map
+ */
+function trafficInit()
+{
+ nmsData.addHandler("switches","mapHandler",trafficUpdater);
+ nmsData.addHandler("switchstate","mapHandler",trafficUpdater);
+ var m = 1024 * 1024 / 8;
+ drawGradient([lightgreen,green,orange,red]);
+ setLegend(1,colorFromSpeed(0),"0 (N/A)");
+ setLegend(5,colorFromSpeed(1100 * m) , "1100Mb/s");
+ setLegend(4,colorFromSpeed(600 * m),"600Mb/s");
+ setLegend(3,colorFromSpeed(300 * m),"300Mb/s");
+ setLegend(2,colorFromSpeed(10 * m),"10Mb/s");
+}
+
+function trafficUpdater()
+{
+ if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
+ return;
+ for (var sw in nmsData.switchstate.switches) {
+ var speed = 0;
+ try {
+ var t = parseInt(nmsData.switchstate.then[sw].uplinks.ifHCOutOctets);
+ var n = parseInt(nmsData.switchstate.switches[sw].uplinks.ifHCOutOctets);
+ var tt = parseInt(nmsData.switchstate.then[sw].time);
+ var nt = parseInt(nmsData.switchstate.switches[sw].time);
+ } catch (e) { continue;};
+ var tdiff = nt - tt;
+ var diff = n - t;
+ speed = diff / tdiff;
+ if(!isNaN(speed)) {
+ nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
+ nmsMap.setSwitchInfo(sw,byteCount(speed*8,0));
+ }
+ }
+}
+
+function trafficTotInit()
+{
+ nmsData.addHandler("switches","mapHandler",trafficTotUpdater);
+ nmsData.addHandler("switchstate","mapHandler",trafficTotUpdater);
+ var m = 1024 * 1024 / 8;
+ drawGradient([lightgreen,green,orange,red]);
+ setLegend(1,colorFromSpeed(0),"0 (N/A)");
+ setLegend(5,colorFromSpeed(5000 * m,5) , "5000Mb/s");
+ setLegend(4,colorFromSpeed(3000 * m,5),"3000Mb/s");
+ setLegend(3,colorFromSpeed(1000 * m,5),"1000Mb/s");
+ setLegend(2,colorFromSpeed(100 * m,5),"100Mb/s");
+}
+
+function trafficTotUpdater()
+{
+ if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
+ return;
+ for (var sw in nmsData.switchstate.switches) {
+ var speed = 0;
+ try {
+ var t = parseInt(nmsData.switchstate.then[sw].totals.ifHCOutOctets);
+ var n = parseInt(nmsData.switchstate.switches[sw].totals.ifHCOutOctets);
+ var tt = parseInt(nmsData.switchstate.then[sw].time);
+ var nt = parseInt(nmsData.switchstate.switches[sw].time);
+ } catch (e) { continue;};
+ var tdiff = nt - tt;
+ var diff = n - t;
+ speed = diff / tdiff;
+ if(!isNaN(speed))
+ nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
+ }
+}
+
+function colorFromSpeed(speed,factor)
+{
+ var m = 1024 * 1024 / 8;
+ if (factor == undefined)
+ factor = 1.1;
+ if (speed == 0)
+ return blue;
+ speed = speed < 0 ? 0 : speed;
+ return getColorStop( 1000 * (speed / (factor * (1000 * m))));
+}
+
+/*
+ * Tweaked this to scale from roughly 20C to 35C. Hence the -20 and /15
+ * thing (e.g., "0" is 20 and "15" is 35 by the time we pass it to
+ * rgb_from_max());
+ */
+function temp_color(t)
+{
+ if (t == undefined) {
+ console.log("Temp_color, but temp is undefined");
+ return blue;
+ }
+ t = parseInt(t) - 12;
+ t = Math.floor((t / 23) * 1000);
+ return getColorStop(t);
+}
+
+function tempUpdater()
+{
+ if(!nmsData.switches)
+ return;
+
+ for ( var sw in nmsData.switches["switches"]) {
+ var t = "white";
+ var temp = "";
+
+ if(!nmsData.switchstate || !nmsData.switchstate.switches || !nmsData.switchstate.switches[sw] || !nmsData.switchstate.switches[sw].temp)
+ continue;
+
+ var t = nmsData.switchstate.switches[sw].temp;
+ temp = t + "°C";
+ t = temp_color(temp);
+ nmsMap.setSwitchColor(sw, t);
+ nmsMap.setSwitchInfo(sw, temp);
+
+ }
+}
+
+function tempInit()
+{
+ //Padded the gradient with extra colors for the upper unused values
+ drawGradient(["black",blue,lightblue,lightgreen,green,orange,red]);
+ setLegend(1,temp_color(15),"15 °C");
+ setLegend(2,temp_color(20),"20 °C");
+ setLegend(3,temp_color(25),"25 °C");
+ setLegend(4,temp_color(30),"30 °C");
+ setLegend(5,temp_color(35),"35 °C");
+ nmsData.addHandler("switchstate","mapHandler",tempUpdater);
+}
+
+function pingUpdater()
+{
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
+ return;
+ }
+ for (var sw in nmsData.switches.switches) {
+ try {
+ var c;
+ if (nmsData.ping.switches[sw].age > 0) {
+ c = red;
+ } else {
+ c = gradient_from_latency(nmsData.ping.switches[sw].latency);
+ }
+ nmsMap.setSwitchColor(sw, c);
+ } catch (e) {
+ nmsMap.setSwitchColor(sw, blue);
+ }
+ }
+}
+
+function pingInit()
+{
+ drawGradient([green,lightgreen,orange,red]);
+ setLegend(1,gradient_from_latency(1),"1ms");
+ setLegend(2,gradient_from_latency(30),"30ms");
+ setLegend(3,gradient_from_latency(60),"60ms");
+ setLegend(4,gradient_from_latency(100),"100ms");
+ setLegend(5,gradient_from_latency(undefined) ,"No response");
+ nmsData.addHandler("ping","mapHandler",pingUpdater);
+ nmsData.addHandler("switches","mapHandler",pingUpdater);
+ nmsData.addHandler("ticker", "mapHandler", pingUpdater);
+}
+
+function commentUpdater()
+{
+ var realnow = Date.now();
+ var now = Math.floor(realnow / 1000);
+ if (nmsData.comments == undefined || nmsData.comments.comments == undefined) {
+ return
+ }
+ if(!nmsData.switches)
+ return;
+ for (var sw in nmsData.switches.switches) {
+ var c = "white";
+ if (nmsData.comments.comments[sw] == undefined) {
+ nmsMap.setSwitchColor(sw,c);
+ continue;
+ }
+ var s = nmsData.comments.comments[sw];
+ var then = 0;
+ var active = 0;
+ var persist = 0;
+ c = "yellow";
+ for (var v in s["comments"]) {
+ var then_test = parseInt(s["comments"][v]["time"]);
+ if (then_test > then && s["comments"][v]["state"] != "inactive")
+ then = then_test;
+ if (s["comments"][v]["state"] == "active") {
+ active++;
+ }
+ if (s["comments"][v]["state"] == "persist")
+ persist++;
+ }
+ if (then > (now - (60*15))) {
+ c = red;
+ } else if (active > 0) {
+ c = orange;
+ } else if (persist > 0) {
+ c = blue;
+ } else {
+ c = green;
+ }
+ nmsMap.setSwitchColor(sw, c);
+ }
+}
+
+
+function commentInit()
+{
+ nmsData.addHandler("comments","mapHandler",commentUpdater);
+ setLegend(1,"white","0 comments");
+ setLegend(2,blue,"Persistent");
+ setLegend(3,red, "New");
+ setLegend(4,orange,"Active");
+ setLegend(5,green ,"Old/inactive only");
+}
+
+function getDhcpColor(stop)
+{
+ stop = parseInt(stop);
+ stop = stop * 0.85;
+ if (stop < 0)
+ stop = 1000;
+ if (stop > 1000)
+ stop = 1000;
+ return getColorStop(stop);
+}
+
+function dhcpUpdater()
+{
+ var realnow = Date.now();
+ var now = Math.floor(realnow / 1000);
+ if (nmsData.dhcp == undefined || nmsData.dhcp.dhcp == undefined) {
+ return
+ }
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
+ return;
+ }
+ try {
+ for (var sw in nmsData.switches.switches) {
+ var c = "white";
+ if (nmsData.dhcp.dhcp[sw] == undefined) {
+ nmsMap.setSwitchColor(sw,c);
+ continue;
+ }
+ var s = nmsData.dhcp.dhcp[sw];
+ var then = parseInt(s);
+ c = getDhcpColor(now - then);
+ nmsMap.setSwitchColor(sw, c);
+ }
+ } catch(e) {
+ console.log(e);
+ }
+}
+
+function dhcpInit()
+{
+ drawGradient([green,lightgreen,orange,red]);
+ nmsData.addHandler("dhcp","mapHandler",dhcpUpdater);
+ setLegend(1,"white","Undefined");
+ setLegend(2,getDhcpColor(1),"1 Second old");
+ setLegend(3,getDhcpColor(300),"300 Seconds old");
+ setLegend(4,getDhcpColor(900),"900 Seconds old");
+ setLegend(5,getDhcpColor(1200),"1200 Seconds old");
+}
+
+/*
+ * Testing-function to randomize colors of linknets and switches
+ */
+function randomizeColors()
+{
+/* for (var i in nms.switches_now.linknets) {
+ setLinknetColors(i, getRandomColor(), getRandomColor());
+ }
+*/
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
+ return;
+ }
+ for (var sw in nmsData.switches.switches) {
+ nmsMap.setSwitchColor(sw, getRandomColor());
+ }
+}
+
+function discoDo() {
+ randomizeColors();
+ setTimeout(randomizeColors,500);
+}
+function discoInit()
+{
+ nmsData.addHandler("ticker", "mapHandler", discoDo);
+
+ setNightMode(true);
+ setLegend(1,blue,"Y");
+ setLegend(2,red, "M");
+ setLegend(3,orange,"C");
+ setLegend(4,green, "A");
+ setLegend(5,"white","!");
+}
+
+function snmpUpdater() {
+ for (var sw in nmsData.switches.switches) {
+ if (nmsData.snmp.snmp[sw] == undefined || nmsData.snmp.snmp[sw].misc == undefined) {
+ nmsMap.setSwitchColor(sw, red);
+ } else if (nmsData.snmp.snmp[sw].misc.sysName[0] != sw) {
+ nmsMap.setSwitchColor(sw, orange);
+ } else {
+ nmsMap.setSwitchColor(sw, green);
+ }
+ }
+}
+function snmpInit() {
+ nmsData.addHandler("snmp", "mapHandler", snmpUpdater);
+
+ setLegend(1,green,"OK");
+ setLegend(2,orange, "Sysname mismatch");
+ setLegend(3,red,"No SNMP data");
+ setLegend(4,green, "");
+ setLegend(5,green,"");
+
+}
+function cpuUpdater() {
+ for (var sw in nmsData.switches.switches) {
+ try {
+ var cpu = 0;
+ for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingCPU) {
+ var local = nmsData.snmp.snmp[sw].misc['jnxOperatingCPU'][u];
+ cpu = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingCPU[u],cpu);
+ }
+ nmsMap.setSwitchColor(sw, getColorStop(cpu * 10));
+ nmsMap.setSwitchInfo(sw, cpu + " % ");
+ } catch (e) {
+ nmsMap.setSwitchColor(sw, "white");
+ nmsMap.setSwitchInfo(sw, "N/A");
+ }
+ }
+}
+
+function cpuInit() {
+ nmsData.addHandler("snmp", "mapHandler", cpuUpdater);
+ drawGradient([green,orange,red]);
+ setLegend(1,getColorStop(0),"0 %");
+ setLegend(2,getColorStop(250),"25 %");
+ setLegend(3,getColorStop(600),"60 %");
+ setLegend(4,getColorStop(1000),"100 %");
+ setLegend(5,"white","N/A");
+}
diff --git a/web/nms-public.gathering.org/js/nms-map.js b/web/nms-public.gathering.org/js/nms-map.js
new file mode 100644
index 0000000..ada6886
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms-map.js
@@ -0,0 +1,580 @@
+"use strict";
+
+/* WORK
+ * IN
+ * PROGRESS
+ *
+ * Interface:
+ *
+ * nmsMap.init() - start things up
+ * nmsMap.setSwitchColor(switch,color)
+ * nmsMap.setSwitchInfo(switch,info)
+ * nmsMap.setSwitchHighlight(switch,true/false)
+ * nmsMap.enableHighlights()
+ * nmsMap.disableHighlights()
+ */
+
+
+var nmsMap = nmsMap || {
+ _moveInProgress: false,
+ stats: {
+ colorChange:0,
+ colorSame:0,
+ earlyDrawAll:0,
+ nowDups:0,
+ nows:0,
+ resizeEvents:0,
+ switchInfoSame:0,
+ switchInfoUpdate:0,
+ highlightChange:0
+ },
+ contexts: ["bg","link","blur","switch","text","textInfo","top","input","hidden"],
+ _info: {},
+ _settings: {
+ fontLineFactor: 2,
+ textMargin: 3,
+ xMargin: 10,
+ yMargin: 20,
+ fontSize: 15,
+ fontFace: "sans-serif"
+ },
+ scale: 1,
+ _init: true,
+ _orig: { width:1920, height:1032 },
+ _canvas: {
+ get width() { return nmsMap.scale * nmsMap._orig.width; },
+ get height() { return nmsMap.scale * nmsMap._orig.height; }
+ },
+
+ _color: { },
+ _linknets: {} ,
+ _highlight: { },
+ _highlightActive: false,
+ _c: {}
+};
+
+nmsMap._loadEvent = function(e) {
+ nmsMap._init = false;
+ nmsMap._drawAllSwitches();
+};
+
+nmsMap.init = function() {
+ this._initContexts();
+ this._init = true;
+ nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();});
+ window.addEventListener('resize',nmsMap._resizeEvent,true);
+ window.addEventListener('load',nmsMap._loadEvent,true);
+};
+
+nmsMap.setSwitchColor = function(sw, color) {
+ if (this._color[sw] != color) {
+ this._color[sw] = color;
+ this._drawSwitch(sw);
+ this.stats.colorChange++;
+ } else {
+ this.stats.colorSame++;
+ }
+};
+
+
+nmsMap.setSwitchHighlight = function(sw, highlight) {
+ if( highlight )
+ highlight = true;
+ if ( this._highlight[sw] != highlight ) {
+ this.stats.highlightChange++;
+ this._highlight[sw] = highlight;
+ }
+ this._drawSwitch(sw);
+};
+
+
+nmsMap.enableHighlights = function() {
+ this._highlightActive = true;
+};
+
+
+nmsMap.disableHighlights = function() {
+ this._highlightActive = false;
+ this._drawAllSwitches();
+};
+
+
+nmsMap.reset = function() {
+ for (var sw in this._color) {
+ nmsMap.setSwitchColor(sw, undefined);
+ }
+ for (var sw in this._info) {
+ nmsMap.setSwitchInfo(sw, undefined);
+ }
+};
+
+nmsMap.setSwitchInfo = function(sw,info) {
+ if (this._info[sw] != info) {
+ this._info[sw] = info;
+ this._drawSwitchInfo(sw);
+ this.stats.switchInfoUpdate++;
+ } else {
+ this.stats.switchInfoSame++;
+ }
+};
+
+nmsMap._initContext = function(name) {
+ this._c[name] = {};
+ this._c[name].c = document.getElementById(name + "Canvas");
+ this._c[name].ctx = this._c[name].c.getContext('2d');
+};
+
+nmsMap._initContexts = function() {
+ for (var context in this.contexts) {
+ this._initContext(this.contexts[context]);
+ }
+};
+
+nmsMap._resizeEvent = function() {
+ var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft;
+ var height = window.innerHeight - nmsMap._c.bg.c.offsetTop;
+
+ var xScale = (width / (nmsMap._orig.width + nmsMap._settings.xMargin));
+ var yScale = (height / (nmsMap._orig.height + nmsMap._settings.yMargin));
+
+ if (xScale > yScale) {
+ nmsMap.scale = yScale;
+ } else {
+ nmsMap.scale = xScale;
+ }
+ for (var a in nmsMap._c) {
+ /*
+ * Resizing this to a too small size breaks gradients on smaller screens.
+ */
+ if (a == 'hidden' && a != 'blur')
+ continue;
+ nmsMap._c[a].c.height = nmsMap._canvas.height;
+ nmsMap._c[a].c.width = nmsMap._canvas.width;
+ if(a == 'bg') {
+ nmsMap._drawBG();
+ }
+ }
+ if (nmsMap._init != true) {
+ nmsMap._blurDrawn = false;
+ nmsMap._drawBG();
+ nmsMap._drawAllSwitches();
+ nmsMap._drawAllLinknets();
+ nmsMap.drawNow();
+ nmsMap.stats.resizeEvents++;
+ }
+};
+
+/*
+ * Draw current time-window
+ *
+ * FIXME: The math here is just wild approximation and guesswork because
+ * I'm lazy.
+ *
+ * FIXME: 2: Should really just use _drawText() instead somehow. Font size
+ * being an issue.
+ */
+nmsMap.drawNow = function ()
+{
+ var now = nmsData.now;
+ if (nmsMap._lastNow == now) {
+ nmsMap.stats.nowDups++;
+ return;
+ }
+ nmsMap.stats.nows++;
+
+ var ctx = nmsMap._c.top.ctx;
+ ctx.save();
+ ctx.scale(this.scale, this.scale);
+ ctx.font = (2 * this._settings.fontSize) + "px " + this._settings.fontFace;
+ ctx.clearRect(0,0,800,100);
+ ctx.fillStyle = "white";
+ ctx.strokeStyle = "black";
+ ctx.lineWidth = nms.fontLineFactor;
+ ctx.strokeText(now, this._settings.textMargin, 25);
+ ctx.fillText(now, this._settings.textMargin, 25);
+ ctx.restore();
+};
+
+nmsMap.setNightMode = function(toggle) {
+ if (this._nightmode == toggle)
+ return;
+ this._nightmode = toggle;
+ if (this._init == true) {
+ return;
+ }
+ if (!toggle)
+ this._c.blur.c.style.display = "none";
+ else {
+ this._drawAllBlur();
+ this._c.blur.c.style.display = "";
+ }
+ nmsMap._drawBG();
+};
+
+nmsMap._drawBG = function() {
+ var imageObj = document.getElementById('source');
+ this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
+ if(this._nightmode)
+ nmsMap._invertBG();
+};
+
+nmsMap._invertBG = function() {
+ var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
+ var data = imageData.data;
+
+ for(var i = 0; i < data.length; i += 4) {
+ data[i] = 255 - data[i];
+ data[i + 1] = 255 - data[i + 1];
+ data[i + 2] = 255 - data[i + 2];
+ }
+ this._c.bg.ctx.putImageData(imageData, 0, 0);
+};
+
+nmsMap._getBox = function(sw) {
+ var box = nmsData.switches.switches[sw]['placement'];
+ box.x = parseInt(box.x);
+ box.y = parseInt(box.y);
+ box.width = parseInt(box.width);
+ box.height = parseInt(box.height);
+ return box;
+};
+
+nmsMap._drawSwitchBlur = function(sw)
+{
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
+ return;
+ var box = this._getBox(sw);
+ this._c.blur.ctx.save();
+ this._c.blur.ctx.fillStyle = "red";
+ this._c.blur.ctx.shadowBlur = 30;
+ this._c.blur.ctx.shadowColor = "white";
+ this._c.blur.ctx.scale(this.scale, this.scale); // FIXME <- fix what?!
+ this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']);
+ this._c.blur.ctx.restore();
+};
+
+nmsMap._drawSwitch = function(sw)
+{
+ // XXX: If a handler sets a color before switches are loaded... The
+ // color will get set fine so this isn't a problem.
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined)
+ return;
+ var box = this._getBox(sw);
+ var color = nmsMap._color[sw];
+ if(this._highlightActive) {
+ if(nmsMap._highlight[sw]) {
+ color = green;
+ } else {
+ color = white;
+ }
+ }
+ if (color == undefined) {
+ color = blue;
+ }
+ this._c.switch.ctx.fillStyle = color;
+ this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']);
+ this._c.switch.ctx.shadowBlur = 0;
+ this._drawText(this._c.text.ctx, sw,box);
+
+ if(this._info[sw])
+ this._drawSwitchInfo(sw);
+};
+
+nmsMap._drawSwitchInfo = function(sw) {
+ var box = this._getBox(sw);
+ if (this._info[sw] == undefined) {
+ this._clearBox(this._c.textInfo.ctx, box);
+ } else {
+ this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right");
+ }
+};
+
+nmsMap._clearBox = function(ctx,box) {
+ ctx.save();
+ ctx.scale(this.scale,this.scale);
+ ctx.clearRect(box['x'], box['y'], box['width'], box['height']);
+ ctx.restore();
+};
+
+nmsMap._drawText = function(ctx, text, box, align) {
+ var rotate = false;
+
+ if ((box['width'] + 10 )< box['height'])
+ rotate = true;
+
+ this._clearBox(ctx,box);
+ ctx.save();
+ ctx.scale(this.scale, this.scale);
+ ctx.font = "bold " + this._settings.fontSize + "px " + this._settings.fontFace;
+ ctx.lineWidth = nmsMap._settings.fontLineFactor;
+ ctx.fillStyle = "white";
+ ctx.strokeStyle = "black";
+ ctx.translate(box.x + this._settings.textMargin, box.y + box.height - this._settings.textMargin);
+
+ if (rotate) {
+ ctx.translate(box.width - this._settings.textMargin * 2,0);
+ ctx.rotate(Math.PI * 3/2);
+ }
+
+ if (align == "right") {
+ ctx.textAlign = "right";
+ /*
+ * Margin*2 is to compensate for the margin above.
+ */
+ if (rotate)
+ ctx.translate(box.height - this._settings.textMargin*2,0);
+ else
+ ctx.translate(box.width - this._settings.textMargin*2,0);
+ }
+
+ ctx.strokeText(text, 0, 0);
+ ctx.fillText(text, 0, 0);
+ ctx.restore();
+};
+
+nmsMap._setLinknetColor = function(l, color1, color2)
+{
+ var oldcolor1;
+ var oldcolor2;
+ try {
+ oldcolor1 = nmsMap._linknets[l].sysname1;
+ oldcolor2 = nmsMap._linknets[l].sysname2;
+ if (oldcolor1 == color1 && oldcolor2 == color2) {
+ return ;
+ }
+ } catch (e) {}
+ nmsMap._linknets[l] = {};
+ nmsMap._linknets[l].sysname1 = color1;
+ nmsMap._linknets[l].sysname2 = color2;
+ nmsMap._drawLinknet(l)
+}
+
+nmsMap._drawLinknet = function(l) {
+ try {
+ var color1 = blue;
+ var color2 = blue;
+ try {
+ color1 = nmsMap._linknets[l].sysname1;
+ color2 = nmsMap._linknets[l].sysname2;
+ } catch(e) { }
+ nmsMap._connectSwitches(nmsData.switches.linknets[l].sysname1, nmsData.switches.linknets[l].sysname2, color1, color2);
+ } catch(e) { }
+}
+
+nmsMap._drawAllLinknets = function() {
+ for (var l in nmsData.switches.linknets) {
+ nmsMap._drawLinknet(l);
+ }
+}
+nmsMap._drawAllSwitches = function() {
+ if (nmsData.switches == undefined) {
+ this.stats.earlyDrawAll++;
+ return;
+ }
+ for (var sw in nmsData.switches.switches) {
+ this._drawSwitch(sw);
+ }
+ if (this._nightmode)
+ this._drawAllBlur();
+};
+
+nmsMap._drawAllBlur = function() {
+ if (nmsMap._blurDrawn == true)
+ return;
+ nmsMap._blurDrawn = true;
+ for (var sw in nmsData.switches.switches) {
+ nmsMap._drawSwitchBlur(sw);
+ }
+};
+
+nmsMap._drawBox = function(ctx, x, y, boxw, boxh) {
+ ctx.save();
+ ctx.scale(this.scale, this.scale); // FIXME <- what?!
+ ctx.fillRect(x,y, boxw, boxh);
+ ctx.lineWidth = 1;
+ ctx.strokeStyle = "#000000";
+ ctx.strokeRect(x,y, boxw, boxh);
+ ctx.restore();
+};
+
+nmsMap._connectSwitches = function(sw1, sw2, color1, color2) {
+ nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2),
+ color1, color2);
+};
+
+/*
+ * Draw a line between two boxes, with a gradient going from color1 to
+ * color2.
+ */
+nmsMap._connectBoxes = function(box1, box2,color1, color2) {
+ var ctx = nmsMap._c.link.ctx;
+ if (color1 == undefined)
+ color1 = blue;
+ if (color2 == undefined)
+ color2 = blue;
+ var x0 = Math.floor(box1.x + box1.width/2);
+ var y0 = Math.floor(box1.y + box1.height/2);
+ var x1 = Math.floor(box2.x + box2.width/2);
+ var y1 = Math.floor(box2.y + box2.height/2);
+ ctx.save();
+ ctx.scale(nmsMap.scale, nmsMap.scale);
+ var gradient = ctx.createLinearGradient(x1,y1,x0,y0);
+ gradient.addColorStop(0, color1);
+ gradient.addColorStop(1, color2);
+ ctx.strokeStyle = gradient;
+ ctx.beginPath();
+ ctx.moveTo(x0,y0);
+ ctx.lineTo(x1,y1);
+ ctx.lineWidth = 5;
+ ctx.stroke();
+ ctx.closePath();
+ ctx.restore();
+};
+
+nmsMap.moveSet = function(toggle) {
+ nmsMap._moveInProgress = toggle;
+ if (!toggle)
+ nmsMap._moveStopListen();
+};
+
+/*
+ * onclick handler for the canvas.
+ *
+ * Currently just shows info for a switch.
+ */
+nmsMap.canvasClick = function(e)
+{
+ var sw = findSwitch(e.pageX - e.target.offsetLeft, e.pageY - e.target.offsetTop);
+ if (sw != undefined) {
+ if (nmsMap._moveInProgress) {
+ nmsMap._moveStart(sw, e);
+ } else {
+ nmsInfoBox.click(sw);
+ }
+ } else {
+ nmsInfoBox.hide();
+ }
+};
+
+nmsMap._clearOld = function(box) {
+ if (box) {
+ nmsMap._c.top.ctx.save();
+ nmsMap._c.top.ctx.fillStyle = "#000000";
+ nmsMap._c.top.ctx.scale(nmsMap.scale, nmsMap.scale); // FIXME
+ nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10);
+ nmsMap._c.top.ctx.restore();
+ }
+};
+
+nmsMap._moveMove = function(e) {
+ nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
+ nmsMap._moveY = (e.pageY - e.target.offsetTop) / nmsMap.scale;
+ var diffx = nmsMap._moveX - nmsMap._moveXstart;
+ var diffy = nmsMap._moveY - nmsMap._moveYstart;
+ var box = {};
+ nmsMap._clearOld(nmsMap._moveOldBox);
+ box['x'] = nmsMap._moveBox['x'] + diffx;
+ box['y'] = nmsMap._moveBox['y'] + diffy;
+ box['height'] = nmsMap._moveBox['height'];
+ box['width'] = nmsMap._moveBox['width'];
+ nmsMap._moveOldBox = box;
+ nmsMap._c.top.ctx.save();
+ nmsMap._c.top.ctx.fillStyle = "red";
+ nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']);
+ nmsMap._c.top.ctx.restore();
+};
+
+nmsMap._moveSubmit = function() {
+ var data = {
+ sysname: nmsMap._moving,
+ placement: nmsMap._moveOldBox
+ };
+ var myData = JSON.stringify([data]);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/switch-update",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ nmsData.invalidate("switches");
+ }
+ });
+};
+
+nmsMap._moveStopListen = function() {
+ nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true);
+ nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true);
+};
+
+nmsMap._moveDone = function(e) {
+ nmsMap._moveStopListen();
+ if(nmsMap._moveOldBox == false) {
+ return;
+ }
+ nmsMap._moveSubmit();
+ nmsMap._clearOld(nmsMap._moveOldBox);
+};
+
+nmsMap._moveStart = function(sw, e)
+{
+ nmsMap._moving = sw;
+ nmsMap._moveOldBox = false;
+ nmsMap._moveXstart = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
+ nmsMap._moveYstart = (e.pageY - e.target.offsetTop) / nmsMap.scale;
+ nmsMap._moveBox = nmsData.switches.switches[sw].placement;
+ nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true);
+ nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true);
+};
+
+
+/*
+ * STUFF NOT YET INTEGRATED, BUT MOVED AWAY FROM nms.js TO TIDY.
+ *
+ * Consider this a TODO list.
+ */
+
+/*
+ * Draw a linknet with index i.
+ *
+ * XXX: Might have to change the index here to match backend
+ */
+function drawLinknet(i)
+{
+ var c1 = nms.linknet_color[i] && nms.linknet_color[i].c1 ? nms.linknet_color[i].c1 : blue;
+ var c2 = nms.linknet_color[i] && nms.linknet_color[i].c2 ? nms.linknet_color[i].c2 : blue;
+ if (nmsData.switches.switches[nmsData.switches.linknets[i].sysname1] && nmsData.switches.switches[nmsData.switches.linknets[i].sysname2]) {
+ connectSwitches(nmsData.switches.linknets[i].sysname1,nmsData.switches.linknets[i].sysname2, c1, c2);
+ }
+}
+
+/*
+ * Draw all linknets
+ */
+function drawLinknets()
+{
+ if (nmsData.switches && nmsData.switches.linknets) {
+ for (var i in nmsData.switches.linknets) {
+ drawLinknet(i);
+ }
+ }
+}
+
+/*
+ * Change both colors of a linknet.
+ *
+ * XXX: Probably have to change this to better match the backend data
+ */
+function setLinknetColors(i,c1,c2)
+{
+ if (!nms.linknet_color[i] ||
+ nms.linknet_color[i].c1 != c1 ||
+ nms.linknet_color[i].c2 != c2) {
+ if (!nms.linknet_color[i])
+ nms.linknet_color[i] = {};
+ nms.linknet_color[i]['c1'] = c1;
+ nms.linknet_color[i]['c2'] = c2;
+ drawLinknet(i);
+ }
+}
+
+
diff --git a/web/nms-public.gathering.org/js/nms.js b/web/nms-public.gathering.org/js/nms.js
new file mode 100644
index 0000000..8783844
--- /dev/null
+++ b/web/nms-public.gathering.org/js/nms.js
@@ -0,0 +1,692 @@
+"use strict";
+var nms = {
+ stats:{}, // Various internal stats
+ get nightMode() { return this._nightMode; },
+ set nightMode(val) { if (val != this._nightMode) { this._nightMode = val; setNightMode(val); } },
+ /*
+ * FIXME: This should be slightly smarter.
+ */
+ _now: false,
+ get now() { return this._now },
+ set now(v) { this._now = v; nmsData.now = v; },
+ /*
+ * Various setInterval() handlers. See nmsTimer() for how they are
+ * used.
+ *
+ * FIXME: Should just stop using these.
+ */
+ timers: {
+ playback:false
+ },
+
+ menuShowing:true,
+ /*
+ * This is a list of nms[x] variables that we store in our
+ * settings-cookie when altered and restore on load.
+ */
+ settingsList:[
+ 'nightMode',
+ 'menuShowing'
+ ],
+ keyBindings:{
+ '-':toggleMenu,
+ 'n':toggleNightMode,
+ '1':setMapModeFromN,
+ '2':setMapModeFromN,
+ '3':setMapModeFromN,
+ '4':setMapModeFromN,
+ '5':setMapModeFromN,
+ '6':setMapModeFromN,
+ '7':setMapModeFromN,
+ '8':setMapModeFromN,
+ '9':setMapModeFromN,
+ 'c':toggleConnect,
+ 'h':moveTimeFromKey,
+ 'j':moveTimeFromKey,
+ 'k':moveTimeFromKey,
+ 'l':moveTimeFromKey,
+ 'p':moveTimeFromKey,
+ 'r':moveTimeFromKey,
+ 'Escape':hideWindow,
+ '?':toggleHelp
+ },
+ /*
+ * Playback controllers and variables
+ */
+ playback:{
+ startTime: false,
+ stopTime: false,
+ playing: false,
+ replayTime: 0,
+ replayIncrement: 60 * 60
+ }
+};
+
+/*
+ * Returns a handler object.
+ *
+ * This might seem a bit much for 'setInterval()' etc, but it's really more
+ * about self-documentation and predictable ways of configuring timers.
+ */
+function nmsTimer(handler, interval, name, description) {
+ this.handler = handler;
+ this.handle = false;
+ this.interval = parseInt(interval);
+ this.name = name;
+ this.description = description;
+ this.start = function() {
+ if (this.handle) {
+ this.stop();
+ }
+ this.handle = setInterval(this.handler,this.interval);
+ };
+ this.stop = function() {
+ if (this.handle)
+ clearInterval(this.handle);
+ this.handle = false;
+ };
+
+ this.setInterval = function(interval) {
+ var started = this.handle != false;
+ this.stop();
+ this.interval = parseInt(interval);
+ if (started)
+ this.start();
+ };
+}
+
+
+/*
+ * Convenience function that doesn't support huge numbers, and it's easier
+ * to comment than to fix. But not really, but I'm not fixing it anyway.
+ */
+function byteCount(bytes,precision) {
+ if (precision ==undefined)
+ precision = 1;
+ var units = ['', 'K', 'M', 'G', 'T', 'P'];
+ var i = 0;
+ while (bytes > 1024) {
+ bytes = bytes / 1024;
+ i++;
+ }
+ return bytes.toFixed(precision) + units[i];
+}
+
+/*
+ * Definitely not a way to toggle night mode. Does something COMPLETELY
+ * DIFFERENT.
+ */
+function toggleNightMode()
+{
+ nms.nightMode = !nms.nightMode;
+ saveSettings();
+}
+
+/*
+ * Parse 'now' from user-input.
+ *
+ * Should probably just use stringToEpoch() instead, but alas, not yet.
+ */
+function parseNow(now)
+{
+ if (Date.parse(now)) {
+ // Adjust for timezone when converting from epoch (UTC) to string (local)
+ var d = new Date(now);
+ var timezoneOffset = d.getTimezoneOffset() * -60000;
+ var d = new Date(Date.parse(now) - timezoneOffset);
+ var str = d.getFullYear() + "-" + ("00" + (parseInt(d.getMonth())+1)).slice(-2) + "-" + ("00" + d.getDate()).slice(-2) + "T";
+ str += ("00" + d.getHours()).slice(-2) + ":" + ("00" + d.getMinutes()).slice(-2) + ":" + ("00" + d.getSeconds()).slice(-2);
+ return str;
+
+ }
+ if (now == "")
+ return "";
+ return false;
+}
+
+/*
+ * Convert back and forth between epoch.
+ *
+ * There's no particular reason why I use seconds instead of javascript
+ * microseconds, except to leave the mark of a C coder on this javascript
+ * project.
+ */
+function stringToEpoch(t)
+{
+ var foo = t.toString();
+// foo = foo.replace('T',' ');
+ var ret = new Date(Date.parse(foo));
+ return parseInt(parseInt(ret.valueOf()) / 1000);
+}
+
+/*
+ * Have to pad with zeroes to avoid "17:5:0" instead of the conventional
+ * and more readable "17:05:00". I'm sure there's a better way, but this
+ * works just fine.
+ */
+function epochToString(t)
+{
+ // Adjust for timezone when converting from epoch (UTC) to string (local)
+ var date = new Date(parseInt(t) * parseInt(1000));
+ var timezoneOffset = date.getTimezoneOffset() * -60;
+ t = t - timezoneOffset;
+
+ date = new Date(parseInt(t) * parseInt(1000));
+ var str = date.getFullYear() + "-";
+ if (parseInt(date.getMonth()) < 9)
+ str += "0";
+ str += (parseInt(date.getMonth())+1) + "-";
+ if (date.getDate() < 10)
+ str += "0";
+ str += date.getDate() + "T";
+ if (date.getHours() < 10)
+ str += "0";
+ str += date.getHours() + ":";
+ if (date.getMinutes() < 10)
+ str += "0";
+ str += date.getMinutes() + ":";
+ if (date.getSeconds() < 10)
+ str += "0";
+ str += date.getSeconds();
+
+ return str;
+}
+
+function localEpochToString(t) {
+ var d = new Date(parseInt(t) * parseInt(1000));
+ var timezoneOffset = d.getTimezoneOffset() * -60;
+ t = t + timezoneOffset;
+
+ return epochToString(t);
+}
+
+/*
+ * Start replaying historical data.
+ */
+nms.playback.startReplay = function(startTime,stopTime) {
+ if(!startTime || !stopTime)
+ return false;
+
+ nms.playback.pause();
+ nms.playback.startTime = stringToEpoch(startTime);
+ nms.playback.stopTime = stringToEpoch(stopTime);
+ nms.now = epochToString(nms.playback.startTime);
+ nms.playback.play();
+};
+
+/*
+ * Pause playback
+ */
+nms.playback.pause = function() {
+ nms.timers.playback.stop();
+ nms.playback.playing = false;
+};
+
+/*
+ * Start playback
+ */
+nms.playback.play = function() {
+ nms.playback.tick();
+ nms.timers.playback.start();
+ nms.playback.playing = true;
+};
+
+/*
+ * Toggle playback
+ */
+nms.playback.toggle = function() {
+ if(nms.playback.playing) {
+ nms.playback.pause();
+ } else {
+ nms.playback.play();
+ }
+};
+
+/*
+ * Jump to place in time
+ */
+nms.playback.setNow = function(now) {
+ nms.now = parseNow(now);
+
+ nms.playback.stopTime = false;
+ nms.playback.startTime = false;
+ nms.playback.tick();
+};
+
+/*
+ * Step forwards or backwards in timer
+ */
+nms.playback.stepTime = function(n)
+{
+ var now = getNowEpoch();
+ var newtime = parseInt(now) + parseInt(n);
+ nms.now = epochToString(parseInt(newtime));
+
+ if(!nms.playback.playing)
+ nms.playback.tick();
+};
+
+/*
+ * Ticker to trigger updates, and advance time if replaying
+ *
+ * This is run on a timer (nms.timers.tick) every second while unpaused
+ */
+nms.playback.tick = function()
+{
+ nms.playback.replayTime = getNowEpoch();
+
+ // If outside start-/stopTime, remove limits and pause playback
+ if (nms.playback.stopTime && (nms.playback.replayTime >= nms.playback.stopTime || nms.playback.replayTime < nms.playback.startTime)) {
+ nms.playback.stopTime = false;
+ nms.playback.startTime = false;
+ nms.playback.pause();
+ return;
+ }
+
+ // If past actual datetime, go live
+ if (nms.playback.replayTime > parseInt(Date.now() / 1000)) {
+ nms.now = false;
+ }
+
+ // If we are still replaying, advance time
+ if(nms.now !== false && nms.playback.playing) {
+ nms.playback.stepTime(nms.playback.replayIncrement);
+ }
+};
+
+/*
+ * Helper function for safely getting a valid now-epoch
+ */
+function getNowEpoch() {
+ if (nms.now && nms.now != 0)
+ return stringToEpoch(nms.now);
+ else
+ return parseInt(Date.now() / 1000);
+}
+
+/*
+ * There are 4 legend-bars. This is a helper-function to set the color and
+ * description/name for each one. Used from handler init-functions.
+ *
+ * FIXME: Should be smarter, possibly use a canvas-writer so we can get
+ * proper text (e.g.: not black text on dark blue).
+ */
+function setLegend(x,color,name)
+{
+ var el = document.getElementById("legend-" + x);
+ el.style.background = color;
+ el.title = name;
+ el.textContent = name;
+}
+
+/*
+ * Change map handler (e.g., change from uplink map to ping map)
+ */
+function setUpdater(fo)
+{
+ nmsMap.reset();
+ nmsData.unregisterHandlerWildcard("mapHandler");
+ try {
+ fo.init();
+ } catch (e) {
+ /*
+ * This can happen typically on initial load where the data
+ * hasn't been retrieved yet. Instead of breaking the
+ * entire init-process, just bail out here.
+ */
+ console.log("Possibly broken handler: " + fo.name);
+ console.log(e);
+ }
+ var foo = document.getElementById("updater_name");
+ foo.innerHTML = fo.name + " ";
+ document.location.hash = fo.tag;
+}
+
+function toggleLayer(layer) {
+ var l = document.getElementById(layer);
+ if (l.style.display == 'none')
+ l.style.display = '';
+ else
+ l.style.display = 'none';
+}
+
+function toggleConnect() {
+ toggleLayer("linkCanvas");
+}
+
+function commentInactive(id)
+{
+ commentChange(id,"inactive");
+}
+
+function commentPersist(id)
+{
+ commentChange(id,"persist");
+}
+
+function commentDelete(id)
+{
+ var r = confirm("Really delete comment? (Delted comments are still stored in the database, but never displayed)");
+ if (r == true) {
+ commentChange(id,"delete");
+ }
+}
+
+/*
+ * FIXME: Neither of these two handle failures in any way, shape or form.
+ * Nor do they really give user-feedback. They work, but only by magic.
+ */
+function commentChange(id,state)
+{
+ var myData = {
+ comment:id,
+ state:state
+ };
+ myData = JSON.stringify(myData);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/comment-change",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ nmsData.invalidate("comments");
+ }
+ });
+}
+
+function addComment(sw,comment)
+{
+ var myData = {
+ switch:sw,
+ comment:comment
+ };
+ myData = JSON.stringify(myData);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/comment-add",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ nmsData.invalidate("comments");
+ }
+ });
+}
+
+
+
+/*
+ * Returns true if the coordinates (x,y) is inside the box defined by
+ * box.{x,y,w.h} (e.g.: placement of a switch).
+ */
+function isIn(box, x, y)
+{
+ return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height)));
+}
+
+/*
+ * Return the name of the switch found at coordinates (x,y), or 'undefined'
+ * if none is found.
+ */
+function findSwitch(x,y) {
+ x = parseInt(parseInt(x) / nmsMap.scale);
+ y = parseInt(parseInt(y) / nmsMap.scale);
+
+ for (var v in nmsData.switches.switches) {
+ if(isIn(nmsData.switches.switches[v]['placement'],x,y)) {
+ return v;
+ }
+ }
+ return undefined;
+}
+
+/*
+ * Set night mode to whatever 'toggle' is.
+ *
+ * Changes background and nav-bar, then leaves the rest to nmsMap.
+ */
+function setNightMode(toggle) {
+ nms.nightMode = toggle;
+ var body = document.getElementById("body");
+ body.style.background = toggle ? "black" : "white";
+ var nav = document.getElementsByTagName("nav")[0];
+ if (toggle) {
+ nav.classList.add('navbar-inverse');
+ } else {
+ nav.classList.remove('navbar-inverse');
+ }
+ nmsMap.setNightMode(toggle);
+}
+
+/*
+ * Boot up "fully fledged" NMS.
+ *
+ * This can be re-written to provide different looks and feels but using
+ * the same framework. Or rather: that's the goal. We're not quite there
+ * yet.
+ */
+function initNMS() {
+ nms.timers.playback = new nmsTimer(nms.playback.tick, 1000, "Playback ticker", "Handler used to advance time");
+
+ // Public
+ nmsData.registerSource("ping", "/api/public/ping");
+ nmsData.registerSource("switches","/api/public/switches");
+ nmsData.registerSource("switchstate","/api/public/switch-state");
+ nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary");
+ nmsData.registerSource("dhcp","/api/public/dhcp");
+
+ // This is a magic dummy-source, it's purpose is to give a unified
+ // way to get ticks every second. It is mainly meant to allow map
+ // handlers to register for ticks so they will execute without data
+ // (and thus notice stale data instead of showing a green ping-map
+ // despite no pings)
+ nmsData.registerSource("ticker","bananabananbanana");
+
+ restoreSettings();
+ nmsMap.init();
+ detectHandler();
+ nms.playback.play();
+ setupKeyhandler();
+ setupSearchKeyHandler();
+}
+
+function detectHandler() {
+ for (var i in handlers) {
+ if (('#' + handlers[i].tag) == document.location.hash) {
+ setUpdater(handlers[i]);
+ return;
+ }
+ }
+ setUpdater(handler_ping);
+}
+
+function setMenu()
+{
+ var nav = document.getElementsByTagName("nav")[0];
+ nav.style.display = nms.menuShowing ? '' : 'none';
+}
+
+function toggleMenu()
+{
+ nms.menuShowing = ! nms.menuShowing;
+ setMenu();
+ saveSettings();
+}
+function hideWindow(e,key)
+{
+ nmsInfoBox.hide();
+}
+function toggleHelp(e,key) {
+ toggleLayer('aboutKeybindings');
+}
+
+function setMapModeFromN(e,key)
+{
+ switch(key) {
+ case '1':
+ setUpdater(handler_ping);
+ break;
+ case '2':
+ setUpdater(handler_uplinks);
+ break;
+ case '3':
+ setUpdater(handler_dhcp);
+ break;
+ case '4':
+ setUpdater(handler_comment);
+ break;
+ case '5':
+ setUpdater(handler_temp);
+ break;
+ case '6':
+ setUpdater(handler_traffic);
+ break;
+ case '7':
+ setUpdater(handler_traffic_tot);
+ break;
+ case '8':
+ setUpdater(handler_snmp);
+ break;
+ case '9':
+ setUpdater(handler_disco);
+ break;
+ }
+ return true;
+}
+
+function moveTimeFromKey(e,key)
+{
+ switch(key) {
+ case 'h':
+ nms.playback.stepTime(-3600);
+ break;
+ case 'j':
+ nms.playback.stepTime(-300);
+ break;
+ case 'k':
+ nms.playback.stepTime(300);
+ break;
+ case 'l':
+ nms.playback.stepTime(3600);
+ break;
+ case 'p':
+ nms.playback.toggle();
+ break;
+ case 'r':
+ nms.playback.setNow();
+ nms.playback.play();
+ break;
+ }
+ return true;
+}
+
+function keyPressed(e)
+{
+ if (e.target.nodeName == "INPUT") {
+ return false;
+ }
+ if(e.key) {
+ var key = e.key;
+ } else {
+ var key = e.keyCode;
+ switch(key) {
+ case 187:
+ key = '?';
+ break;
+ case 189:
+ key = '-';
+ break;
+ case 27:
+ key = 'Escape';
+ break;
+ default:
+ key = String.fromCharCode(key);
+ key = key.toLowerCase();
+ break;
+ }
+ }
+ if (nms.keyBindings[key])
+ return nms.keyBindings[key](e,key);
+ if (nms.keyBindings['default'])
+ return nms.keyBindings['default'](e,key);
+ return false;
+}
+
+function setupKeyhandler()
+{
+ var b = document.getElementsByTagName("body")[0];
+ $( "body" ).keyup(function(e) {
+ keyPressed(e);
+ });
+}
+
+function setupSearchKeyHandler()
+{
+ $("#searchbox").keyup(function(e) {
+ nmsInfoBox._searchKeyListener(e);
+ });
+}
+
+
+function getCookie(cname) {
+ var name = cname + "=";
+ var ca = document.cookie.split(';');
+ for(var i=0; i<ca.length; i++) {
+ var c = ca[i];
+ while (c.charAt(0)==' ')
+ c = c.substring(1);
+ if (c.indexOf(name) == 0)
+ return c.substring(name.length,c.length);
+ }
+ return "";
+}
+
+function saveSettings()
+{
+ var foo={};
+ for ( var v in nms.settingsList ) {
+ foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ];
+ }
+ document.cookie = 'nms='+btoa(JSON.stringify(foo));
+}
+
+function restoreSettings()
+{
+ try {
+ var retrieve = JSON.parse(atob(getCookie("nms")));
+ } catch(e) {
+ console.log("nothing saved");
+ }
+
+ for (var v in retrieve) {
+ nms[v] = retrieve[v];
+ }
+ setMenu();
+}
+
+/*
+ * Time travel gui
+ */
+function startNowPicker(now) {
+ $.datetimepicker.setLocale('no');
+ $('#nowPicker').datetimepicker('destroy');
+ if(!now && nms.now)
+ now = nms.now;
+ var datepicker = $('#nowPicker').datetimepicker({
+ value: now,
+ mask:false,
+ inline:true,
+ todayButton: false,
+ validateOnBlur:false,
+ dayOfWeekStart:1,
+ maxDate:'+1970/01/01',
+ onSelectDate: function(ct,$i){
+ document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
+ },
+ onSelectTime: function(ct,$i){
+ document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
+ },
+ onGenerate: function(ct,$i){
+ document.getElementById('nowPicker').dataset.iso = localEpochToString(ct.valueOf()/1000);
+ }
+ });
+}
diff --git a/web/nms-public.gathering.org/js/npm.js b/web/nms-public.gathering.org/js/npm.js
new file mode 100644
index 0000000..bf6aa80
--- /dev/null
+++ b/web/nms-public.gathering.org/js/npm.js
@@ -0,0 +1,13 @@
+// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
+require('../../js/transition.js')
+require('../../js/alert.js')
+require('../../js/button.js')
+require('../../js/carousel.js')
+require('../../js/collapse.js')
+require('../../js/dropdown.js')
+require('../../js/modal.js')
+require('../../js/tooltip.js')
+require('../../js/popover.js')
+require('../../js/scrollspy.js')
+require('../../js/tab.js')
+require('../../js/affix.js') \ No newline at end of file
diff --git a/web/nms-public.gathering.org/led.pl b/web/nms-public.gathering.org/led.pl
deleted file mode 100644
index 12b540b..0000000
--- a/web/nms-public.gathering.org/led.pl
+++ /dev/null
@@ -1,128 +0,0 @@
-e1-3 on
-e1-4 on
-e3-3 on
-e3-4 on
-e5-3 on
-e5-4 on
-e7-3 on
-e7-4 on
-e9-3 on
-e9-4 on
-e11-1 on
-e11-2 on
-e11-3 on
-e11-4 on
-e13-1 on
-e13-2 on
-e13-3 on
-e13-4 on
-e15-1 on
-e15-2 on
-e15-3 on
-e15-4 on
-e17-1 on
-e17-2 on
-e17-3 on
-e17-4 on
-e19-1 on
-e19-2 on
-e19-3 on
-e19-4 on
-e21-1 on
-e21-2 on
-e21-3 on
-e21-4 on
-e23-1 on
-e23-2 on
-e23-3 on
-e23-4 on
-e25-1 on
-e25-2 on
-e25-3 on
-e25-4 on
-e27-1 on
-e27-2 on
-e29-1 on
-e29-2 on
-e31-1 on
-e31-2 on
-e33-1 on
-e33-2 on
-e35-1 on
-e35-2 on
-e37-1 on
-e37-2 on
-e39-1 on
-e39-2 on
-e41-1 on
-e41-2 on
-e43-1 on
-e43-2 on
-e43-3 on
-e43-4 on
-e45-1 on
-e45-2 on
-e45-3 on
-e45-4 on
-e47-1 on
-e47-2 on
-e47-3 on
-e47-4 on
-e49-1 on
-e49-2 on
-e49-3 on
-e49-4 on
-e51-1 on
-e51-2 on
-e51-3 on
-e51-4 on
-e53-1 on
-e53-2 on
-e53-3 on
-e53-4 on
-e55-1 on
-e55-2 on
-e55-3 on
-e55-4 on
-e57-1 on
-e57-2 on
-e57-3 on
-e57-4 on
-e59-1 on
-e59-2 on
-e59-3 on
-e59-4 on
-e61-1 on
-e61-2 on
-e61-3 on
-e61-4 on
-e63-1 on
-e63-2 on
-e63-3 on
-e63-4 on
-e65-1 on
-e65-2 on
-e65-3 on
-e65-4 on
-e67-1 on
-e67-2 on
-e67-3 on
-e67-4 on
-e69-1 on
-e69-2 on
-e69-3 on
-e69-4 on
-e71-1 on
-e71-2 on
-e71-3 on
-e71-4 on
-e73-1 on
-e73-2 on
-e73-3 on
-e73-4 on
-e75-1 on
-e75-2 on
-e75-3 on
-e75-4 on
-e77-1 on
-e77-2 on
diff --git a/web/nms-public.gathering.org/nettkart-trafikk.html b/web/nms-public.gathering.org/nettkart-trafikk.html
deleted file mode 100644
index 5675473..0000000
--- a/web/nms-public.gathering.org/nettkart-trafikk.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
- <head>
- <title>nettkart</title>
- <meta http-equiv="refresh" content="60">
- </head>
- <body>
-
- <p><img src="nettkart-trafikk.png" /></p>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/ping-tg14.html b/web/nms-public.gathering.org/ping-tg14.html
deleted file mode 100644
index 0b4863f..0000000
--- a/web/nms-public.gathering.org/ping-tg14.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>Switch ping</title>
- <link rel="stylesheet" type="text/css" href="http://151.216.253.14:8000/en-US/static/@204106/css/bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="http://151.216.253.14:8000/en-US/static/@204106/css/pages/dashboard-simple-bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="http://151.216.253.14:8000/en-US/static/@204106/app/search/dashboard.css" />
- <style>
-body{background:#ffffff;}
- </style>
-</head>
-<body class="simplexml">
- <div style="text-align: center;">
- <div style="position: relative; left: 0; top: 0;">
- <br \><br \><br \><br \><br \><br \><br \><br \><br \><br \><br \>
- <h1 style="z-index:10; position:relative;">Live switch ping</h1>
- <iframe style="display: block; margin: 0 auto;" width="1300px" height="800px" src="./ping.html" allowTransparency="true" scrolling="no" frameborder="0" ></iframe>
- <img src="http://151.216.253.14/tg14_logo_rgb_normal.png" style="position: absolute; top: 50px; left: 50%; width: 546px; margin-left: -273px; margin-top: -40px;"/>
- </div>
- </div>
-</body>
-</html>
diff --git a/web/nms-public.gathering.org/ping.css b/web/nms-public.gathering.org/ping.css
deleted file mode 120000
index 8d15979..0000000
--- a/web/nms-public.gathering.org/ping.css
+++ /dev/null
@@ -1 +0,0 @@
-../nms.gathering.org/ping.css \ No newline at end of file
diff --git a/web/nms-public.gathering.org/ping.html b/web/nms-public.gathering.org/ping.html
deleted file mode 100644
index 69e2ff5..0000000
--- a/web/nms-public.gathering.org/ping.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html>
- <head>
- <title>Ping? Pong!</title>
- </head>
- <body>
- <link rel="stylesheet" href="/ping.css">
- <p id="playground">
- <svg id="lines" width="1920" height="1032" style="position: absolute; top: 0; left: 0; z-index: 1">
- </svg>
- <img src="tg15-salkart.png" alt="" id="map" />
- </p>
- <script>
- // These are used by ping.js, below.
- var switches_url = "/switches.json";
- var ping_url = "/ping.json";
- var draw_linknets = true;
- var can_edit = false;
- </script>
- <script type="text/javascript" src="ping.js"></script>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/ping.js b/web/nms-public.gathering.org/ping.js
deleted file mode 120000
index d6aa5f1..0000000
--- a/web/nms-public.gathering.org/ping.js
+++ /dev/null
@@ -1 +0,0 @@
-../nms.gathering.org/ping.js \ No newline at end of file
diff --git a/web/nms-public.gathering.org/ping2.html b/web/nms-public.gathering.org/ping2.html
deleted file mode 100644
index 278c07d..0000000
--- a/web/nms-public.gathering.org/ping2.html
+++ /dev/null
@@ -1,21 +0,0 @@
-<html>
- <head>
- <title>Ping? Pong!</title>
- </head>
- <body>
- <link rel="stylesheet" href="/ping.css">
- <p id="playground">
- <svg id="lines" width="1920" height="1032" style="position: absolute; top: 0; left: 0; z-index: 1">
- </svg>
- <img src="tg15-salkart.png" alt="" id="map" />
- </p>
- <script>
- // These are used by ping.js, below.
- var switches_url = "/switches.json";
- var ping_url = "/nettkart.json";
- var draw_linknets = false;
- var can_edit = false;
- </script>
- <script type="text/javascript" src="ping.js"></script>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/speedometer.html b/web/nms-public.gathering.org/speedometer.html
deleted file mode 100644
index 4395ca9..0000000
--- a/web/nms-public.gathering.org/speedometer.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <title>Network speedometer</title>
- <script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
- <script src="http://code.highcharts.com/highcharts.js"></script>
- <script src="http://code.highcharts.com/highcharts-more.js"></script>
- <script src="http://code.highcharts.com/modules/exporting.js"></script>
- <script src="speedometer.js"></script>
- <link rel="stylesheet" type="text/css" href="http://151.216.253.14:8000/en-US/static/@204106/css/bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="http://151.216.253.14:8000/en-US/static/@204106/css/pages/dashboard-simple-bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="http://151.216.253.14:8000/en-US/static/@204106/app/search/dashboard.css" />
- <style>
-body{background:#ffffff;}
- </style>
-</head>
-<body class="simplexml">
- <div class="dashboard-header clearfix">
- <div style="text-align: center;">
- <br \><br \><br \><br \><br \><br \><br \><br \><br \><br \>
- <h1>Aggregated internal traffic</h1>
- <img src="http://151.216.253.14/tg14_logo_rgb_normal.png" style="z-index:5; position: absolute; top: 50px; left: 50%; width: 546px; margin-left: -273px; margin-top: -40px;"/>
- <img style="padding-top: 150px; padding-left: 50px; float: left;" src="total_network_traffic-day.sh"/>
- <img style="padding-top: 150px; padding-right: 50px; float: right;" src="total_network_traffic-week.sh"/>
- <div id="container" style="min-width: 310px; max-width: 600px; height: 600px; margin: 0 auto"></div>
- <img style="padding-top: -40px; float: right;" width="150px" src="cagewave.png"/>
- </div>
- </div>
-</body>
-</html>
diff --git a/web/nms-public.gathering.org/speedometer.js b/web/nms-public.gathering.org/speedometer.js
deleted file mode 100644
index f301476..0000000
--- a/web/nms-public.gathering.org/speedometer.js
+++ /dev/null
@@ -1,131 +0,0 @@
-$(function () {
-
- $('#container').highcharts({
- exporting: {
- enabled: false
- },
- chart: {
- type: 'gauge',
- plotBackgroundColor: null,
- plotBackgroundImage: null,
- plotBorderWidth: 0,
- plotShadow: false
- },
-
- title: {
- text: ''
- },
-
- pane: {
- startAngle: -150,
- endAngle: 150,
- background: [{
- backgroundColor: {
- linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
- stops: [
- [0, '#FFF'],
- [1, '#333']
- ]
- },
- borderWidth: 0,
- outerRadius: '109%'
- }, {
- backgroundColor: {
- linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
- stops: [
- [0, '#333'],
- [1, '#FFF']
- ]
- },
- borderWidth: 1,
- outerRadius: '107%'
- }, {
- // default background
- }, {
- backgroundColor: '#DDD',
- borderWidth: 0,
- outerRadius: '105%',
- innerRadius: '103%'
- }]
- },
-
- // the value axis
- yAxis: {
- min: 0,
- max: 50,
-
- tickPixelInterval: 30,
- tickWidth: 2,
- tickPosition: 'inside',
- tickLength: 20,
- tickColor: '#666',
- labels: {
- step: 2,
- rotation: 'auto',
- distance: -40,
- style: {
- fontSize: '20px'
- }
- },
- plotBands: [{
- from: 0,
- to: 20,
- color: '#55BF3B', // green
- thickness: 20
- }, {
- from: 20,
- to: 40,
- color: '#DDDF0D', // yellow
- thickness: 20
- }, {
- from: 40,
- to: 50,
- color: '#DF5353', // red
- thickness: 20
- }]
- },
- plotOptions: {
- gauge: {
- dial: {
- baseWidth: 5,
- },
- pivot: {
- radius: 8,
- },
- dataLabels: {
- borderWidth: 0,
- format: '{y} Gbps',
- style: {
- fontSize: '40px'
- },
- y: 50
- }
- }
- },
-
- series: [{
- name: 'Speed',
- data: [0],
- tooltip: {
- valueSuffix: ' Gbps'
- }
- }]
-
- },
- // Add some life
- function (chart) {
- if (!chart.renderer.forExport) {
- setInterval(function () {
- $.getJSON('speedometer.json', function(data) {
- var point = chart.series[0].points[0];
- if(data.speed > 1){
- point.update(data.speed);
- }
- if(data.speed > 55){
- point.update(55);
- }
- });
- }, 1000);
- }
- });
-});
diff --git a/web/nms-public.gathering.org/tempkart.html b/web/nms-public.gathering.org/tempkart.html
deleted file mode 100644
index 216d855..0000000
--- a/web/nms-public.gathering.org/tempkart.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
- <head>
- <title>DHCP-kart</title>
- <meta http-equiv="refresh" content="60">
- </head>
- <body>
-
- <p><img src="tempkart.png" /></p>
- </body>
-</html>
diff --git a/web/nms-public.gathering.org/tg14-salkart.png b/web/nms-public.gathering.org/tg14-salkart.png
deleted file mode 120000
index 0e62de7..0000000
--- a/web/nms-public.gathering.org/tg14-salkart.png
+++ /dev/null
@@ -1 +0,0 @@
-../nms.gathering.org/tg14-salkart.png \ No newline at end of file
diff --git a/web/nms-public.gathering.org/tg15-salkart.png b/web/nms-public.gathering.org/tg15-salkart.png
deleted file mode 120000
index f2b408a..0000000
--- a/web/nms-public.gathering.org/tg15-salkart.png
+++ /dev/null
@@ -1 +0,0 @@
-../nms.gathering.org/tg15-salkart.png \ No newline at end of file
diff --git a/web/nms-public.gathering.org/total_network_traffic-day.sh b/web/nms-public.gathering.org/total_network_traffic-day.sh
deleted file mode 100755
index 68a4854..0000000
--- a/web/nms-public.gathering.org/total_network_traffic-day.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-echo "Content-Type: image/png"
-echo "Refresh: 300;/total_network_traffic-day.sh"
-echo
-cat /var/lib/munin/cgi-tmp/munin-cgi-graph/tg14.gathering.org/frank.tg14.gathering.org/total_network_traffic-day.png
diff --git a/web/nms-public.gathering.org/total_network_traffic-week.sh b/web/nms-public.gathering.org/total_network_traffic-week.sh
deleted file mode 100755
index a852776..0000000
--- a/web/nms-public.gathering.org/total_network_traffic-week.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-echo "Content-Type: image/png"
-echo "Refresh: 300;/total_network_traffic-week.sh"
-echo
-cat /var/lib/munin/cgi-tmp/munin-cgi-graph/tg14.gathering.org/frank.tg14.gathering.org/total_network_traffic-week.png
diff --git a/web/nms-public.gathering.org/trafikk-tg14.html b/web/nms-public.gathering.org/trafikk-tg14.html
deleted file mode 100644
index 69d1b5d..0000000
--- a/web/nms-public.gathering.org/trafikk-tg14.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="refresh" content="60" />
- <title>Traffic stats</title>
- <link rel="stylesheet" type="text/css" href="http://151.216.253.14:8000/en-US/static/@204106/css/bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="http://151.216.253.14:8000/en-US/static/@204106/css/pages/dashboard-simple-bootstrap.min.css" />
- <link rel="stylesheet" type="text/css" media="all" href="/en-US/static/@204106/app/search/dashboard.css" />
- <style>
-body{background:#ffffff;}
- </style>
-</head>
-<body class="simplexml">
- <div class="dashboard-header clearfix">
- <div style="text-align: center;">
- <div style="position: relative; left: 0; top: 0;">
- <br \><br \><br \><br \><br \><br \><br \><br \><br \><br \>
- <h1 style="z-index:10; position:relative;">Traffic stats</h1>
- <img src="nettkart-trafikk.png" border="0" style="z-index:4; position: relative; top: 0; left: 0;"/>
- <img src="http://151.216.253.14/tg14_logo_rgb_normal.png" style="z-index:5; position: absolute; top: 50px; left: 50%; width: 546px; margin-left: -273px; margin-top: -50px;"/>
- </div>
- </div>
- </div>
-</body>
-</html>
diff --git a/web/nms-public.gathering.org/weathermap.html b/web/nms-public.gathering.org/weathermap.html
deleted file mode 100644
index b0136ca..0000000
--- a/web/nms-public.gathering.org/weathermap.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
- <meta http-equiv="refresh" content="60" />
- <title>The Gathering 2015 - Weathermap</title>
-</head>
-<body>
-<img src="weathermap.png">
-</body>
-</html>
diff --git a/web/nms-public.gathering.org/weathermap.pl b/web/nms-public.gathering.org/weathermap.pl
deleted file mode 100755
index 41aca39..0000000
--- a/web/nms-public.gathering.org/weathermap.pl
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /usr/bin/perl
-use strict;
-use warnings;
-use CGI;
-use File::Copy;
-
-my $cgi = CGI->new;
-my $img_filename = "/root/tgmanage/web/nms-public.gathering.org/weathermap.png";
-
-# this must be done for windows
-binmode STDOUT;
-
-# flush headers
-$|=1;
-
-# print the image
-print $cgi->header(-type=>'image/png; charset=utf-8', -refresh=>'10; weathermap.pl');
-copy "$img_filename", \*STDOUT;
diff --git a/web/nms-public.gathering.org/weathermap.png b/web/nms-public.gathering.org/weathermap.png
deleted file mode 100644
index 7cc8ddd..0000000
--- a/web/nms-public.gathering.org/weathermap.png
+++ /dev/null
Binary files differ
diff --git a/web/nms.gathering.org/api/API.rst b/web/nms.gathering.org/api/API.rst
index 61fbb5a..7d5c88b 100644
--- a/web/nms.gathering.org/api/API.rst
+++ b/web/nms.gathering.org/api/API.rst
@@ -19,6 +19,58 @@ Currently error handling sucks.
This document is in no way complete, but it's a start. It will be updated
as time permits and API's stabilize.
+Public
+......
+
+Use URL https://nms-public.tg16.gathering.org/api/public
+
+/api/public/dhcp
+----------------
+
+Methods: GET
+Update frequency: every second or so.
+
+Used to report time since last dhcp lease.
+
+/api/public/dhcp-summary
+------------------------
+
+Methods: GET
+Update frequency: every second or so.
+
+Used to report dhcp lease stats. Both recent stats, and total stats.
+
+/api/public/ping
+----------------
+
+Methods: GET
+Update frequency: every second or so.
+
+Used to report linknet latency.
+
+The switch latency is being integrated into switch-state.pl and linknet
+latency will similarly be moved.
+
+/api/public/switches
+--------------------
+
+Methods: GET
+Update frequency: Infrequent (on topology/config changes)
+
+List all switches and map positions.
+
+Used to draw switches on a map and provide static information.
+
+/api/public/switch-state
+------------------------
+
+Methods: GET
+Update frequency: Every second
+
+Provides state for each switch, including total port speed, uplink port
+speed, latency and temperature.
+
+
Private
.......
@@ -77,37 +129,3 @@ Accepts an array of switches.
Magic: If you set placement to be "reset", it will re-calculate placement
based on sysname. For new switches, this is redundant as an empty
placement-field will trigger the same behavior.
-
-
-Public
-......
-
-/api/public/ping
-----------------
-
-Methods: GET
-Update frequency: every second or so.
-
-Used to report linknet latency.
-
-The switch latency is being integrated into switch-state.pl and linknet
-latency will similarly be moved.
-
-/api/public/switches
---------------------
-
-Methods: GET
-Update frequency: Infrequent (on topology/config changes)
-
-List all switches and map positions.
-
-Used to draw switches on a map and provide static information.
-
-/api/public/switch-state
-------------------------
-
-Methods: GET
-Update frequency: Every second
-
-Provides state for each switch, including total port speed, uplink port
-speed, latency and temperature.
diff --git a/web/nms.gathering.org/api/public/dhcp b/web/nms.gathering.org/api/public/dhcp
new file mode 100755
index 0000000..7b048d1
--- /dev/null
+++ b/web/nms.gathering.org/api/public/dhcp
@@ -0,0 +1,20 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use lib '../../../../include';
+use nms::web qw (%json finalize_output);
+use strict;
+use warnings;
+use Data::Dumper;
+
+nms::web::setwhen('60m');
+my $q = $nms::web::dbh->prepare('select distinct on (sysname) extract(epoch from date_trunc(\'second\',time)) as time,sysname from dhcp join switches on dhcp.switch = switches.switch where ' . $nms::web::when . ' order by sysname,time desc;');
+$q->execute();
+while ( my $ref = $q->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+ $json{'dhcp'}{$ref->{'sysname'}} = $ref->{'time'};
+}
+
+$nms::web::cc{'max-age'} = "10";
+$nms::web::cc{'stale-while-revalidate'} = "30";
+finalize_output();
diff --git a/web/nms.gathering.org/api/public/dhcp-summary b/web/nms.gathering.org/api/public/dhcp-summary
new file mode 100755
index 0000000..a0e5609
--- /dev/null
+++ b/web/nms.gathering.org/api/public/dhcp-summary
@@ -0,0 +1,16 @@
+#! /usr/bin/perl
+use lib '../../../../include';
+use strict;
+use warnings;
+use nms::web;
+
+nms::web::setwhen('2h');
+
+my $q2 = $nms::web::dbh->prepare("select count(distinct mac) as clients,count(distinct ip) as addresses,count(mac) as acks from dhcp where $nms::web::when;");
+$q2->execute();
+while (my $ref = $q2->fetchrow_hashref()) {
+ $nms::web::json{'dhcp'} = $ref;
+}
+$nms::web::cc{'max-age'} = "10";
+$nms::web::cc{'stale-while-revalidate'} = "15";
+finalize_output();
diff --git a/web/nms.gathering.org/api/public/location b/web/nms.gathering.org/api/public/location
new file mode 100755
index 0000000..b940007
--- /dev/null
+++ b/web/nms.gathering.org/api/public/location
@@ -0,0 +1,44 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+use lib '../../../../include';
+use nms::web;
+use strict;
+use warnings;
+use Data::Dumper;
+
+#my $query = $nms::web::dbh->prepare("select * from switches where '185.110.150.7' << subnet4");
+my $query = $nms::web::dbh->prepare("select * from switches where ? << subnet4 or ? << subnet6");
+
+print "Cache-Control: max-age=0";
+print "Content-Type: text/html";
+print "\n\n";
+
+# get user ip from somewhere.
+# HTTP_X_FORWARDED_FOR is set by varnish. When using varnish, the REMOTE_ADDR will always be localhost.
+
+my @xff = split(",",$ENV{HTTP_X_FORWARDED_FOR});
+my $addr = $xff[0] // $ENV{REMOTE_ADDR};
+
+$query->execute($addr,$addr);
+
+# add start html: header + body etc.
+print "
+<html>
+ <body style=\"text-align: center; font-size: 50pt;\">
+";
+
+# print address
+print "" . $addr ."<br \>";
+
+# print switch name and distroname.
+while ( my $ref = $query->fetchrow_hashref() ) {
+ print $ref->{sysname}. " @ " . $ref->{distro};
+ print "<br />";
+}
+
+# add end html
+print "
+ </body>
+</html>
+";
diff --git a/web/nms.gathering.org/api/public/ping b/web/nms.gathering.org/api/public/ping
index bf92440..db46b00 100755
--- a/web/nms.gathering.org/api/public/ping
+++ b/web/nms.gathering.org/api/public/ping
@@ -1,33 +1,37 @@
#! /usr/bin/perl
use lib '../../../../include';
+use strict;
+use warnings;
use nms::web;
-#nms::web::setwhen('1s');
+nms::web::setwhen('10s');
+
+my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where "
+ . $nms::web::when . " group by switch)");
-my $q = $nms::web::dbh->prepare("SELECT DISTINCT ON (sysname) (now() - time) as age,sysname, latency_ms FROM ping NATURAL JOIN switches WHERE time in (select max(time) from ping where " . $nms::web::when . " group by switch)");
$q->execute();
while (my $ref = $q->fetchrow_hashref()) {
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'};
- # This isn't pretty, feel free to fix, but I want age == seconds
- # without decimals.
- my ($h,$m,$ss) = split(':', $ref->{'age'});
- my ($s,undef) = split('\.', "$ss");
-
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s;# $$ref->{'age'};
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'latency'} = $ref->{'latency_ms'};
+ # Get seconds, without decimlas, from timestamp.
+ # '00:01:01.435601' => 61 seconds.
+ my ( $h, $m, $s ) = split( ':|\.', $ref->{'age'} );
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'age'} = ($h*60*60) + ($m*60) + $s; # $$ref->{'age'};
}
-my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE " . $nms::web::when . " ORDER BY switch, time DESC;");
+my $qs = $nms::web::dbh->prepare("SELECT DISTINCT ON (switch) switch, latency_ms FROM ping_secondary_ip WHERE "
+ . $nms::web::when . " ORDER BY switch, time DESC;");
$qs->execute();
-while (my $ref = $qs->fetchrow_hashref()) {
- $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'};
+while ( my $ref = $qs->fetchrow_hashref() ) {
+ $nms::web::json{'switches'}{$ref->{'switch'}}{'latency_secondary'} = $ref->{'latency_ms'};
}
-my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE ". $nms::web::when . " ORDER BY linknet, time DESC;");
+my $lq = $nms::web::dbh->prepare("SELECT DISTINCT ON (linknet) linknet, latency1_ms, latency2_ms FROM linknet_ping WHERE "
+ . $nms::web::when . " ORDER BY linknet, time DESC;");
$lq->execute();
-while (my $ref = $lq->fetchrow_hashref()) {
- $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ];
+while ( my $ref = $lq->fetchrow_hashref() ) {
+ $nms::web::json{'linknets'}{$ref->{'linknet'}} = [ $ref->{'latency1_ms'}, $ref->{'latency2_ms'} ];
}
-$nms::web::cc{'max-age'} = "1";
-$nms::web::cc{'stale-while-revalidate'} = "5";
+$nms::web::cc{'max-age'} = "2";
+$nms::web::cc{'stale-while-revalidate'} = "15";
finalize_output();
diff --git a/web/nms.gathering.org/api/public/switch-state b/web/nms.gathering.org/api/public/switch-state
index 38f4c57..a6caea9 100755
--- a/web/nms.gathering.org/api/public/switch-state
+++ b/web/nms.gathering.org/api/public/switch-state
@@ -7,10 +7,11 @@ use strict;
use warnings;
use Data::Dumper;
-my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch);');
+my $q = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
$q->execute();
-while (my $ref = $q->fetchrow_hashref()) {
+while ( my $ref = $q->fetchrow_hashref() ) {
my $sysname = $ref->{'sysname'};
my %data = %{JSON::XS::decode_json($ref->{'data'})};
@@ -18,8 +19,15 @@ while (my $ref = $q->fetchrow_hashref()) {
for my $porti (keys %{$data{'ports'}}) {
my %port = %{$data{'ports'}{$porti}};
my $smallport = $porti;
- $smallport =~ s/[0-9-].*$//;
- if ($porti =~ /ge-0\/0\/4[4-7]/ or $porti eq 'eth0') {
+ if ($porti =~ m/\.0$/) {
+ next;
+ }
+ if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
+ $smallport =~ s/[0-9-].*$//;
+ } else {
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
+ }
+ if ($porti =~ /ge-0\/0\/4[4-7]$/) {
$json{'switches'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
$json{'switches'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
if ($port{'ifOperStatus'} eq "up") {
@@ -27,16 +35,63 @@ while (my $ref = $q->fetchrow_hashref()) {
}
$json{'switches'}{$sysname}{'uplinks'}{'total'} += 1;
}
-
- $json{'switches'}{$sysname}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
- $json{'switches'}{$sysname}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'switches'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'switches'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
if ($port{'ifOperStatus'} eq "up") {
- $json{'switches'}{$sysname}{$smallport}{'live'} += 1;
+ $json{'switches'}{$sysname}{ifs}{$smallport}{'live'} += 1;
+ $json{'switches'}{$sysname}{totals}{'live'} += 1;
}
- $json{'switches'}{$sysname}{$smallport}{'total'} += 1;
+ $json{'switches'}{$sysname}{totals}{'total'} += 1;
}
+ $json{'switches'}{$sysname}{'temp'} = $data{'misc'}{'jnxOperatingTemp'}{'7.1.0.0'};
$json{'switches'}{$sysname}{'time'} = $ref->{'time'};
}
+
+nms::web::setwhen('15m','10m');
+my $q2 = $nms::web::dbh->prepare('select sysname,extract(epoch from date_trunc(\'second\',time)) as time,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
+
+$q2->execute();
+while ( my $ref = $q2->fetchrow_hashref() ) {
+ my $sysname = $ref->{'sysname'};
+
+ my %data = %{JSON::XS::decode_json($ref->{'data'})};
+
+ for my $porti (keys %{$data{'ports'}}) {
+ my %port = %{$data{'ports'}{$porti}};
+ my $smallport = $porti;
+ if ($porti =~ m/\.0$/) {
+ next;
+ }
+ if (not $smallport =~ m/^ae/ and not $smallport =~ m/^et/) {
+ $smallport =~ s/[0-9-].*$//;
+ } else {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifAlias'} = $port{'ifAlias'};
+ }
+ if ($porti =~ /ge-0\/0\/4[4-7]$/) {
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{'uplinks'}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{'uplinks'}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{'uplinks'}{'total'} += 1;
+ }
+
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{ifs}{$smallport}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCInOctets'} += $port{'ifHCInOctets'};
+ $json{'then'}{$sysname}{totals}{'ifHCOutOctets'} += $port{'ifHCOutOctets'};
+ if ($port{'ifOperStatus'} eq "up") {
+ $json{'then'}{$sysname}{ifs}{$smallport}{'live'} += 1;
+ $json{'then'}{$sysname}{totals}{'live'} += 1;
+ }
+ $json{'then'}{$sysname}{totals}{'total'} += 1;
+ }
+ $json{'then'}{$sysname}{'temp'} = $data{'misc'}{'enterprises.2636.3.1.13.1.7.7.1.0.0'}{''};
+ $json{'then'}{$sysname}{'time'} = $ref->{'time'};
+}
$nms::web::cc{'max-age'} = "5";
$nms::web::cc{'stale-while-revalidate'} = "30";
finalize_output();
diff --git a/web/nms.gathering.org/api/public/switches b/web/nms.gathering.org/api/public/switches
index 8447b2b..890b7d7 100755
--- a/web/nms.gathering.org/api/public/switches
+++ b/web/nms.gathering.org/api/public/switches
@@ -12,18 +12,18 @@ use Data::Dumper;
$nms::web::cc{'max-age'} = "60";
-my $q2 = $nms::web::dbh->prepare('select switch,sysname,placement,ip,switchtype,poll_frequency,community,last_updated from switches where placement is not null');
+my $q2 = $nms::web::dbh->prepare('select switch,sysname,distro_name,placement,mgmt_v4_addr,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,community,last_updated,switchtype from switches where placement is not null');
$q2->execute();
while (my $ref = $q2->fetchrow_hashref()) {
$ref->{'placement'} =~ /\((-?\d+),(-?\d+)\),\((-?\d+),(-?\d+)\)/;
my ($x1, $y1, $x2, $y2) = ($1, $2, $3, $4);
my $sysname = $ref->{'sysname'};
- $nms::web::json{'switches'}{$ref->{'sysname'}}{'switchtype'} = $ref->{'switchtype'};
$nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'x'} = $x2;
$nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'y'} = $y2;
$nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'width'} = $x1 - $x2;
$nms::web::json{'switches'}{$ref->{'sysname'}}{'placement'}{'height'} = $y1 - $y2;
+ $nms::web::json{'switches'}{$ref->{'sysname'}}{'distro_name'} = $ref->{'distro_name'};
}
my $q4 = $nms::web::dbh->prepare('select linknet, (select sysname from switches where switch = switch1) as sysname1, (select sysname from switches where switch = switch2) as sysname2 from linknets');
diff --git a/web/nms.gathering.org/api/private/comments b/web/nms.gathering.org/api/read/comments
index 4adfb2b..4adfb2b 100755
--- a/web/nms.gathering.org/api/private/comments
+++ b/web/nms.gathering.org/api/read/comments
diff --git a/web/nms.gathering.org/api/private/snmp b/web/nms.gathering.org/api/read/snmp
index 4779659..f69ca62 100755
--- a/web/nms.gathering.org/api/private/snmp
+++ b/web/nms.gathering.org/api/read/snmp
@@ -13,7 +13,8 @@ use Data::Dumper;
$nms::web::cc{'max-age'} = "10";
-my $q = $nms::web::dbh->prepare('select sysname,data from snmp natural join switches where id in (select max(id) from snmp where ' . $nms::web::when . 'group by switch);');
+my $q = $nms::web::dbh->prepare('select sysname,data from snmp natural join switches where id in (select max(id) from snmp where '
+ . $nms::web::when . 'group by switch);');
$q->execute();
while (my $ref = $q->fetchrow_hashref()) {
diff --git a/web/nms.gathering.org/api/private/switches-management b/web/nms.gathering.org/api/read/switches-management
index 6b5fdcd..4461a90 100755
--- a/web/nms.gathering.org/api/private/switches-management
+++ b/web/nms.gathering.org/api/read/switches-management
@@ -12,7 +12,7 @@ use Data::Dumper;
$nms::web::cc{'max-age'} = "60";
-my $q2 = $nms::web::dbh->prepare('select sysname,ip,poll_frequency,community,subnet4,subnet6,distro,last_updated from switches ');
+my $q2 = $nms::web::dbh->prepare('select switch,sysname,mgmt_v4_addr,subnet4,subnet6,mgmt_v6_addr,mgmt_v4_gw,mgmt_v6_gw,mgmt_vlan,traffic_vlan,last_config_fetch,current_mac,poll_frequency,last_updated,distro_phy_port from switches where placement is not null');
$q2->execute();
while (my $ref = $q2->fetchrow_hashref()) {
diff --git a/web/nms.gathering.org/api/private/comment-add b/web/nms.gathering.org/api/write/comment-add
index 26ff734..bcea6dc 100755
--- a/web/nms.gathering.org/api/private/comment-add
+++ b/web/nms.gathering.org/api/write/comment-add
@@ -20,5 +20,5 @@ $nms::web::cc{'max-age'} = '0';
$nms::web::cc{'stale-while-revalidate'} = '0';
$nms::web::json{'state'} = 'ok';
-print "X-ban: /api/private/comments\n";
+print "X-ban: /api/read/comments\n";
finalize_output();
diff --git a/web/nms.gathering.org/api/private/comment-change b/web/nms.gathering.org/api/write/comment-change
index fb7da54..0bdabc0 100755
--- a/web/nms.gathering.org/api/private/comment-change
+++ b/web/nms.gathering.org/api/write/comment-change
@@ -21,4 +21,5 @@ $nms::web::cc{'max-age'} = '0';
$nms::web::cc{'stale-while-revalidate'} = '0';
$nms::web::json{'state'} = 'ok';
+print "X-ban: /api/read/comments\n";
finalize_output();
diff --git a/web/nms.gathering.org/api/write/switch-add b/web/nms.gathering.org/api/write/switch-add
new file mode 100755
index 0000000..0051111
--- /dev/null
+++ b/web/nms.gathering.org/api/write/switch-add
@@ -0,0 +1,92 @@
+#! /usr/bin/perl
+# vim:ts=8:sw=8
+
+#use CGI qw(fatalsToBrowser);
+use DBI;
+use lib '../../../../include';
+use nms;
+use nms::web qw(%get_params %json finalize_output get_input $dbh);
+use nms::util qw(guess_placement);
+use strict;
+use warnings;
+use JSON;
+use Data::Dumper;
+
+$nms::web::cc{'max-age'} = "0";
+
+my $in = get_input();
+my @tmp = @{JSON::XS::decode_json($in)};
+
+my @added;
+my @dups;
+
+my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?");
+
+my @fields = ( 'community', 'current_mac', 'distro_name', 'distro_phy_port', 'lldp_chassis_id', 'mgmt_v4_addr', 'mgmt_v4_gw', 'mgmt_v6_addr', 'mgmt_v6_gw', 'mgmt_vlan', 'placement', 'poll_frequency', 'subnet4', 'subnet6', 'switchtype', 'sysname', 'traffic_vlan');
+
+sub convertplace
+{
+ my %in = %{$_[0]};
+ my %out = ();
+
+ if (not defined $in{'x1'} and defined($in{'x'})) {
+ $out{'x1'} = int($in{'x'});
+ $out{'y1'} = int($in{'y'});
+ $out{'xx'} = int($in{'x'} + $in{'width'});
+ $out{'yy'} = int($in{'y'} + $in{'height'});
+ } else {
+ return \%in;
+ }
+ return \%out;
+}
+
+foreach my $tmp2 (@tmp) {
+ my %switch = %{$tmp2};
+ my $affected = 0;
+ my %template = ();
+ map { $template{$_} = 'DEFAULT' } @fields;
+ if (not defined($switch{'sysname'})) {
+ next;
+ }
+
+ $sth->execute( $switch{'sysname'});
+ while ( my @row = $sth->fetchrow_array ) {
+ $affected += 1;
+ }
+
+ if ($affected == 0) {
+ my %placement;
+ if (not defined ($switch{'placement'})) {
+ %placement = guess_placement($switch{'sysname'});
+ } else {
+ %placement = %{convertplace($switch{'placement'})};
+ }
+ if (not defined($switch{'ip'}) and defined($switch{'mgtmt4'})) {
+ $switch{'ip'} = $switch{'mgtmt4'};
+ }
+ if (not defined($switch{'secondary_ip'}) and defined($switch{'mgtmt6'})) {
+ $switch{'secondary_ip'} = $switch{'mgtmt6'};
+ }
+ my ($x1,$x2,$y1,$y2);
+ $x1 = $placement{'x1'};
+ $y1 = $placement{'y1'};
+ $x2 = $placement{'xx'};
+ $y2 = $placement{'yy'};
+ $switch{'placement'} = "(($x1,$y1),($x2,$y2))";
+
+ map {
+ if (defined ($template{$_})) {
+ $template{$_} = $dbh->quote($switch{$_});
+ }
+ } keys %switch;
+
+
+ $nms::web::dbh->do("INSERT INTO SWITCHES (mgmt_v4_addr, sysname, poll_frequency, community, lldp_chassis_id, mgmt_v6_addr, placement,subnet4,subnet6,distro_name) VALUES ($template{'mgmt_v4_addr'}, $template{'sysname'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'mgmt_v6_addr'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro_name'});");
+ push @added, $switch{'sysname'};
+ }
+}
+
+$json{'switches_addded'} = \@added;
+
+print "X-ban: /api/.*switches.*\n";
+finalize_output();
diff --git a/web/nms.gathering.org/api/private/switch-add b/web/nms.gathering.org/api/write/switch-update
index 3d7b119..14c8773 100755
--- a/web/nms.gathering.org/api/private/switch-add
+++ b/web/nms.gathering.org/api/write/switch-update
@@ -22,7 +22,8 @@ my @dups;
my $sth = $nms::web::dbh->prepare("SELECT sysname FROM switches WHERE sysname=?");
-my @fields = ('ip', 'sysname', 'switchtype', 'last_updated', 'locked', 'poll_frequency', 'community', 'lldp_chassis_id', 'secondary_ip', 'subnet4', 'subnet6', 'placement', 'distro', 'secondary_ip');
+
+my @fields = ( 'community', 'current_mac', 'distro_name', 'distro_phy_port', 'lldp_chassis_id', 'mgmt_v4_addr', 'mgmt_v4_gw', 'mgmt_v4_netsize', 'mgmt_v6_addr', 'mgmt_v6_gw', 'mgmt_v6_netsize', 'mgmt_vlan', 'placement', 'poll_frequency', 'subnet4', 'subnet6', 'switchtype', 'sysname', 'traffic_vlan');
sub convertplace
{
@@ -81,7 +82,7 @@ foreach my $tmp2 (@tmp) {
} keys %switch;
- $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, switchtype, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement) VALUES ($template{'ip'}, $template{'sysname'}, $template{'switchtype'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'});");
+ $nms::web::dbh->do("INSERT INTO SWITCHES (ip, sysname, last_updated, locked, poll_frequency, community, lldp_chassis_id, secondary_ip, placement,subnet4,subnet6,distro) VALUES ($template{'ip'}, $template{'sysname'}, $template{'last_updated'}, $template{'locked'}, $template{'poll_frequency'}, $template{'community'}, $template{'lldp_chassis_id'}, $template{'secondary_ip'}, $template{'placement'},$template{'subnet4'},$template{'subnet6'},$template{'distro'});");
push @added, $switch{'sysname'};
} else {
if (defined($switch{'placement'})) {
diff --git a/web/nms.gathering.org/img/tg16-salkart-clean-big.png b/web/nms.gathering.org/img/tg16-salkart-clean-big.png
new file mode 100644
index 0000000..400cd64
--- /dev/null
+++ b/web/nms.gathering.org/img/tg16-salkart-clean-big.png
Binary files differ
diff --git a/web/nms.gathering.org/img/tg16-salkart-full.png b/web/nms.gathering.org/img/tg16-salkart-full.png
new file mode 100644
index 0000000..6fe9d68
--- /dev/null
+++ b/web/nms.gathering.org/img/tg16-salkart-full.png
Binary files differ
diff --git a/web/nms.gathering.org/index.html b/web/nms.gathering.org/index.html
index e70c9e3..af7776d 100644
--- a/web/nms.gathering.org/index.html
+++ b/web/nms.gathering.org/index.html
@@ -26,16 +26,64 @@
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<style type="text/css">
- canvas {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- outline: none;
- -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
- }
+ canvas {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ outline: none;
+ -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */
+ }
+ tr.mgmt_v4_addr {
+ font-weight: 700;
+ }
+ h1.map-mode-title {
+ font-weight: 700;
+ font-size: 55px;
+ color: black;
+ display: none;
+ z-index: 999;
+ }
+ .vertical h1.map-mode-title {
+ left: 30px;
+ bottom: 0px;
+ position: absolute;
+ transform-origin: 0px 0% 0px;
+ transform: rotate(-90deg);
+ }
+ .tvmode h1.map-mode-title {
+ display: block;
+ }
+ .nightmode h1.map-mode-title {
+ color: white;
+ }
+ .tvmode #topCanvas {
+ display: none;
+ }
+ div.map-mode-legend {
+ display: none;
+ position: fixed;
+ bottom: 5%;
+ right: 5%;
+ z-index: 999;
+ }
+ .vertical div.map-mode-legend {
+ top: -10px;
+ right: 30px;
+ position: absolute;
+ transform-origin: 100% 100% 0;
+ transform: rotate(-90deg);
+ height: 40px;
+ }
+ div.map-mode-legend button {
+ font-size: 20px;
+ font-weight: 700;
+ }
+ .tvmode div.map-mode-legend {
+ display: block;
+ }
</style>
</head>
@@ -59,10 +107,13 @@
<ul class="dropdown-menu" role="menu">
<li><a href="#ping" onclick="setUpdater(handler_ping)">Ping map</a></li>
<li><a href="#uplink" onclick="setUpdater(handler_uplinks)">Uplink map</a></li>
+ <li><a href="#dhcp" onclick="setUpdater(handler_dhcp)">DHCP map</a></li>
+ <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
<li><a href="#temp" onclick="setUpdater(handler_temp)">Temperature map</a></li>
<li><a href="#traffic" onclick="setUpdater(handler_traffic)">Traffic map</a></li>
- <li><a href="#comment" onclick="setUpdater(handler_comment)">Comment spotter</a></li>
<li><a href="#traffictot" onclick="setUpdater(handler_traffic_tot)">Total switch traffic</a></li>
+ <li><a href="#snmp" onclick="setUpdater(handler_snmp)">SNMP map</a></li>
+ <li><a href="#cpu" onclick="setUpdater(handler_cpu)">CPU map</a></li>
<li><a href="#disco" onclick="setUpdater(handler_disco)">DISCO</a></li>
<li class="divider"> </li>
<li><a href="#" onclick="toggleLayer('nowPickerBox');startNowPicker();">Travel in time</a></li>
@@ -70,10 +121,16 @@
<li class="divider"> </li>
<li class="dropdown-header">View</li>
<li><a href="#" onclick="toggleNightMode()">Toggle Night Mode</a></li>
+ <li><a href="#" onclick="toggleConnect()">Toggle linknets</a></li>
<li class="divider"> </li>
- <li class="dropdown-header">Move switches</li>
+ <li class="dropdown-header">Switches</li>
<li><a href="#" onclick="nmsMap.moveSet(true);">Enable switch moving</a></li>
<li><a href="#" onclick="nmsMap.moveSet(false);">Disable switch moving</a></li>
+ <li><a href="#" onclick="nmsInfoBox.showWindow('addSwitch')">Add switch</a></li>
+ <li class="divider"> </li>
+ <li class="dropdown-header">Inventory lists</li>
+ <li><a href="#" onclick="nmsInfoBox.showWindow('inventoryListing','distro_name');">Distro names</a></li>
+ <li><a href="#" onclick="nmsInfoBox.showWindow('inventoryListing','sysDescr')">System description</a></li>
<li class="divider"> </li>
<li class="dropdown-header">Help</li>
<li><a href="#" onclick="toggleLayer('aboutKeybindings');" >Keyboard Shortcuts</a></li>
@@ -91,7 +148,7 @@
<div class="input-group input-group-sm">
<input id="searchbox" type="text" class="form-control" placeholder="Filter" oninput="nmsInfoBox._search()" />
<span class="input-group-btn">
- <button class="btn btn-default" type="button" onclick="nmsInfoBox.show(document.getElementById('searchbox').value);">Go!</button>
+ <button id="searchbox-submit" class="btn btn-default" type="button" onclick="nmsInfoBox.showWindow('switchInfo',document.getElementById('searchbox').value);">Go!</button>
</span>
</div>
</div>
@@ -104,7 +161,7 @@
</div>
</nav>
- <div class="container-fluid">
+ <div class="container-fluid" id="wrap">
<div class="row-fluid">
<div class="span12">
@@ -124,6 +181,10 @@
</tr>
<tr>
<td>?</td>
+ <td>Toggle this help window</td>
+ </tr>
+ <tr>
+ <td>-</td>
<td>Toggle navigation bar</td>
</tr>
<tr>
@@ -140,25 +201,37 @@
</tr>
<tr>
<td>3</td>
- <td>View temperature map</td>
+ <td>View DHCP map</td>
</tr>
<tr>
<td>4</td>
- <td>View uplink traffic map</td>
+ <td>View comment spotter map</td>
</tr>
<tr>
<td>5</td>
- <td>View comment spotter map</td>
+ <td>View temperature map</td>
</tr>
<tr>
<td>6</td>
- <td>View total switch traffic map</td>
+ <td>View uplink traffic map</td>
</tr>
<tr>
<td>7</td>
+ <td>View total switch traffic map</td>
+ </tr>
+ <tr>
+ <td>8</td>
+ <td>View SNMP map</td>
+ </tr>
+ <tr>
+ <td>9</td>
<td>View Disco map</td>
</tr>
<tr>
+ <td>c</td>
+ <td>Toggle linknet connections</td>
+ </tr>
+ <tr>
<td>h</td>
<td>Step 1 hour back in time</td>
</tr>
@@ -221,14 +294,20 @@
</div>
</div>
</div>
- <div id="info-switch-parent" class="panel panel-default col-md-5" style="display: none; position: absolute; z-index: 120;">
- <div class="panel-heading"> <h3 class="panel-title" id="info-switch-title"></h3> </div>
- <div id="info-switch-panel-body"> <table class="table" id="info-switch-table"></table> </div>
+ <div id="info-panel-container" class="col-md-5" style="display: none; position: absolute; z-index: 120;">
</div>
</div>
+ <h1 id="map-mode-title" class="map-mode-title"></h1>
+ <div class="map-mode-legend form-group">
+ <button class="btn btn-default btn-sm" id="tv-mode-legend-1"></button>
+ <button class="btn btn-default btn-sm" id="tv-mode-legend-2"></button>
+ <button class="btn btn-default btn-sm" id="tv-mode-legend-3"></button>
+ <button class="btn btn-default btn-sm" id="tv-mode-legend-4"></button>
+ <button class="btn btn-default btn-sm" id="tv-mode-legend-5"></button>
+ </div>
<canvas id="bgCanvas" width="1920" height="1032" style="position: absolute; z-index: 1;"> </canvas>
- <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10;"> </canvas>
+ <canvas id="linkCanvas" width="1920" height="1032" style="position: absolute; z-index: 10; display: none;"> </canvas>
<canvas id="blurCanvas" width="1920" height="1032" style="position: absolute; z-index: 20;"> </canvas>
<canvas id="switchCanvas" width="1920" height="1032" style="position: absolute; z-index: 30;"> </canvas>
<canvas id="textCanvas" width="1920" height="1032" style="position: absolute; z-index: 40;"> </canvas>
@@ -238,7 +317,7 @@
</canvas>
<canvas id="hiddenCanvas" width="1000" height="10" style="display: none; position: absolute; z-index: 1000 "></canvas>
- <div style="display:none;"><img id="source" src="img/tg15-salkart-clean-big.png" ></div>
+ <div style="display:none;"><img id="source" src="img/tg16-salkart-clean-big.png" ></div>
</div>
</div><!--/.fluid-container-->
<script src="js/jquery.min.js" type="text/javascript"></script>
diff --git a/web/nms.gathering.org/js/nms-color-util.js b/web/nms.gathering.org/js/nms-color-util.js
index f50ee04..6b5a4b5 100644
--- a/web/nms.gathering.org/js/nms-color-util.js
+++ b/web/nms.gathering.org/js/nms-color-util.js
@@ -89,6 +89,5 @@ function getColor(x,y) {
var data = imageData.data;
if (data.length < 4)
return false;
- var ret = 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')';
- return ret;
+ return 'rgb(' + data[0] + ',' + data[1] + ',' + data[2] + ')';
}
diff --git a/web/nms.gathering.org/js/nms-data.js b/web/nms.gathering.org/js/nms-data.js
index 155b5a8..14e5fed 100644
--- a/web/nms.gathering.org/js/nms-data.js
+++ b/web/nms.gathering.org/js/nms-data.js
@@ -82,7 +82,7 @@ var nmsData = nmsData || {
nmsData._dropData = function (name) {
delete this[name];
delete this.old[name];
-}
+};
nmsData.removeSource = function (name) {
if (this._sources[name] == undefined) {
@@ -94,7 +94,7 @@ nmsData.removeSource = function (name) {
clearInterval(this._sources[name]['handle']);
}
delete this._sources[name];
-}
+};
/*
* Register a source.
@@ -121,7 +121,7 @@ nmsData.registerSource = function(name, target) {
}
this.stats.pollSets++;
-}
+};
/*
* Add a handler (callback) for a source, using an id.
@@ -142,7 +142,7 @@ nmsData.addHandler = function(name, id, cb, cbdata) {
}
this._sources[name].cbs[id] = cbob;
this.updateSource(name);
-}
+};
/*
* Unregister all handlers with the "id" for all sources.
@@ -154,11 +154,11 @@ nmsData.unregisterHandlerWildcard = function(id) {
for (var v in nmsData._sources) {
this.unregisterHandler(v, id);
}
-}
+};
nmsData.unregisterHandler = function(name, id) {
delete this._sources[name].cbs[id];
-}
+};
/*
* Updates a source.
@@ -181,11 +181,11 @@ nmsData.updateSource = function(name) {
return;
}
this._genericUpdater(name, true);
-}
+};
nmsData.invalidate = function(name) {
this._genericUpdater(name, false);
-}
+};
/*
* Reset a source, deleting all data, including old.
*
@@ -195,7 +195,7 @@ nmsData.resetSource = function(name) {
this[name] = {};
this.old[name] = {};
this.updateSource(name);
-}
+};
/*
* Updates nmsData[name] and nmsData.old[name], issuing any callbacks where
@@ -236,16 +236,16 @@ nmsData._genericUpdater = function(name, cacheok) {
nmsData[name] = data;
nmsMap.drawNow();
for (var i in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[i];
- if (tmp.cb != undefined) {
- tmp.cb(tmp.cbdata);
+ var tmp2 = nmsData._sources[name].cbs[i];
+ if (tmp2.cb != undefined) {
+ tmp2.cb(tmp2.cbdata);
}
}
} else {
- for (var i in nmsData._sources[name].cbs) {
- var tmp = nmsData._sources[name].cbs[i];
+ for (var j in nmsData._sources[name].cbs) {
+ var tmp = nmsData._sources[name].cbs[j];
if (tmp.cb != undefined && tmp.fresh) {
- nmsData._sources[name].cbs[i].fresh = false;
+ nmsData._sources[name].cbs[j].fresh = false;
tmp.cb(tmp.cbdata);
}
}
diff --git a/web/nms.gathering.org/js/nms-info-box.js b/web/nms.gathering.org/js/nms-info-box.js
index 6b13498..01bac94 100644
--- a/web/nms.gathering.org/js/nms-info-box.js
+++ b/web/nms.gathering.org/js/nms-info-box.js
@@ -1,71 +1,665 @@
"use strict";
/*
- * Handle the info-box for switches (e.g.: what's shown when a switch is
- * clicked).
+ * NMS info window controller
+ *
+ * Interface: nmsInfoBox.showWindow(windowType,optionalParameter), nmsInfoBox.hide(), nmsInfoBox.refresh()
+ *
+ * Any windowTypes should at a minimum implement load, update, unload, getTitle, getContent, getChildContent
*
- * Interfaces: show(switch), hide(), click(switch).
*/
-
var nmsInfoBox = nmsInfoBox || {
- stats: {},
- _showing:"" // Which switch we are displaying (if any).
-}
+ stats: {},
+ _container: false, //Container window
+ _window: false, //Active window (reference to _windowTypes object or false)
+ _windowTypes: [] //List of all avaliable window types
+};
/*
- * Show the infobox for a switch.
- *
- * Just a wrapper for _show, but adds a handler for comments. Could easily
- * add a handler for other events too. E.g.: switches.
+ * Shows a window from the _windowTypes list
*/
-nmsInfoBox.show = function(x) {
- nmsData.addHandler("comments","switchshower",nmsInfoBox._show,x);
- nmsData.addHandler("switches","switchshower",nmsInfoBox._show,x);
- nmsData.addHandler("smanagement","switchshower",nmsInfoBox._show,x);
- nmsInfoBox._show(x);
+nmsInfoBox.showWindow = function (windowName,argument) {
+ if(windowName == "switchInfo" && argument != '' && argument == this._window.sw) {
+ nmsInfoBox.hide();
+ return;
+ }
+ nmsInfoBox.hide();
+ for(var win in this._windowTypes) {
+ if(windowName == win) {
+ this._window = this._windowTypes[win];
+ this._show(argument);
+ return;
+ }
+ }
+};
+
+/*
+ * Refresh the active window
+ */
+nmsInfoBox.refresh = function(argument) {
+ if(!nmsInfoBox._window)
+ return;
+ nmsInfoBox._show(argument);
+};
+nmsInfoBox.update = function(argument) {
+ if(!nmsInfoBox._window)
+ return;
+ nmsInfoBox._window.update(argument);
}
/*
- * Hide switch info-box and remove handler.
+ * Internal function to show the active _window and pass along any arguments
+ */
+nmsInfoBox._show = function(argument) {
+ nmsData.addHandler("comments","switchshower",nmsInfoBox.update,'comments');
+ nmsData.addHandler("switches","switchshower",nmsInfoBox.update,'switches');
+ nmsData.addHandler("smanagement","switchshower",nmsInfoBox.update,'smanagement');
+ nmsData.addHandler("snmp","switchshower",nmsInfoBox.update,'snmp');
+
+ if(argument != "soft")
+ this._window.load(argument);
+
+ this._container = document.getElementById("info-panel-container");
+ var panel = document.createElement("div");
+ panel.classList.add("panel", "panel-default");
+ var title = document.createElement("div");
+ title.classList.add("panel-heading");
+ var body = document.createElement("div");
+ body.classList.add("panel-body");
+
+ title.innerHTML = this._window.getTitle() + '<button type="button" class="close" aria-label="Close" onclick="nmsInfoBox.hide();" style="float: right;"><span aria-hidden="true">&times;</span></button>';
+ var content = this._window.getContent();
+ if(!content.nodeName) {
+ body.innerHTML = this._window.content;
+ } else {
+ body.appendChild(content);
+ }
+ var childContent = this._window.getChildContent();
+ if(childContent != false) {
+ body.appendChild(childContent);
+ }
+
+ panel.appendChild(title);
+ panel.appendChild(body);
+ while(this._container.firstChild) {
+ this._container.removeChild(this._container.firstChild);
+ }
+ this._container.appendChild(panel);
+ this._container.style.display = "block";
+ $('[data-toggle="popover"]').popover({placement:"top",container:'body'});
+ $(".collapse-controller").on("click", function(e) {
+ $(e.target.dataset.target).collapse('toggle');
+ });
+};
+
+/*
+ * Hide the active window and tell it to unload
*/
nmsInfoBox.hide = function() {
- nmsInfoBox._hide();
+ if(!this._container || !this._window)
+ return;
+ this._container.style.display = "none";
+ this._window.unload();
+ this._window = false;
nmsData.unregisterHandler("comments","switchshower");
nmsData.unregisterHandler("switches","switchshower");
nmsData.unregisterHandler("smanagement","switchshower");
-}
+ nmsData.unregisterHandler("snmp","switchshower");
+};
+
+/*
+ * Window type: Add Switch
+ *
+ * Basic window that lets you create a new switch
+ *
+ */
+nmsInfoBox._windowTypes.addSwitch = {
+ title: 'Add new switch',
+ content: '<input type="text" class="form-control" id="create-sysname" placeholder="Sysname id"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.addSwitch.save();">Add switch</button>',
+ childContent: false,
+ getTitle: function() {
+ return this.title;
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ load: function(argument) {
+ },
+ update: function(type) {
+ },
+ unload: function() {
+ },
+ save: function() {
+ var sysname = document.getElementById('create-sysname').value;
+ var myData = JSON.stringify([{'sysname':sysname}]);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/switch-add",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ var result = JSON.parse(data);
+ if(result.switches_addded.length > 0) { // FIXME unresolved variable switches_addded
+ nmsInfoBox.hide();
+ }
+ nmsData.invalidate("switches");
+ nmsData.invalidate("smanagement");
+ }
+ });
+ }
+};
+
+/*
+ * Window type: Switch info
+ *
+ * Advanced window with information about a specific switch, and basic editing options
+ *
+ * Custom interfaces: showSummary, showInfoTable, showComments, showSNMP, showEdit, save
+ *
+ */
+nmsInfoBox._windowTypes.switchInfo = {
+ title: '',
+ content: '',
+ childContent: false,
+ sw: '',
+ swi: '',
+ swm: '',
+ commentsHash: false,
+ activeView: '',
+ load: function(sw) {
+ if(sw) {
+ this.sw = sw;
+ }
+ if(!this.swi) {
+ try {
+ this.swi = nmsData.switches["switches"][this.sw];
+ } catch(e) {
+ this.swi = [];
+ }
+ }
+ if(!this.swm) {
+ try {
+ this.swm = nmsData.smanagement.switches[this.sw];
+ } catch(e) {
+ this.swm = [];
+ }
+ }
+ nmsInfoBox._windowTypes.switchInfo.showSummary();
+ nmsData.addHandler("ticker","switchInfo",nmsInfoBox._windowTypes.switchInfo.update,"tick");
+ },
+ update: function(type) {
+ switch (type) {
+ case 'comments':
+ if(this.activeView == "summary" && this.commentsHash != nmsData.comments.hash) {
+ nmsInfoBox._windowTypes.switchInfo.showComments();
+ }
+ break;
+ }
+ },
+ getTitle: function() {
+ var sshButton = '';
+ try {
+ var mgmt = nmsInfoBox._window.swm.mgmt_v4_addr;
+ sshButton = mgmt.split("/")[0];
+ } catch(e) {}
+ if(sshButton != null && sshButton != undefined && sshButton != '') {
+ sshButton = ' <button type="button" class="ssh btn btn-xs btn-default"><a href="ssh://' + sshButton + '">SSH</a></button>';
+ }
+ return '<h4>' + this.sw + '</h4><button type="button" class="edit btn btn-xs btn-warning" onclick="nmsInfoBox._windowTypes.switchInfo.showEdit();">Edit</button> <button type="button" class="summary btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSummary();">Summary</button> <button type="button" class="details btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showInfoTable();">Details</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'ports\');">Ports</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._windowTypes.switchInfo.showSNMP(\'misc\');">Misc</button>' + sshButton;
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ showSummary: function(argument) {
+ this.activeView = "summary";
+ var content = [];
+
+ //Get DHCP info
+ var lastDhcp = undefined;
+ try {
+ var tempDhcp = nmsData.dhcp.dhcp[this.sw];
+ var now = Date.now();
+ now = Math.floor(now / 1000);
+ tempDhcp = now - parseInt(tempDhcp);
+ tempDhcp = tempDhcp + " s";
+ } catch(e) {}
+
+ //Get SNMP status
+ var snmpStatus = undefined;
+ try {
+ if (nmsData.snmp.snmp[this.sw].misc.sysName[0] != sw) {
+ snmpStatus = "Sysname mismatch";
+ } else {
+ snmpStatus = "OK";
+ }
+ } catch(e) {}
+
+ //Get CPU usage
+ var cpuUsage = undefined;
+ try {
+ var cpu = 0;
+ for (var u in nmsData.snmp.snmp[this.sw].misc.jnxOperatingCPU) {
+ var local = nmsData.snmp.snmp[this.sw].misc['jnxOperatingCPU'][u];
+ cpu = Math.max(nmsData.snmp.snmp[this.sw].misc.jnxOperatingCPU[u],cpu);
+ }
+ cpuUsage = cpu + " %";
+ } catch (e) {}
+
+ //Get traffic data
+ var uplinkTraffic = undefined;
+ try {
+ var speed = 0;
+ var t = parseInt(nmsData.switchstate.then[this.sw].uplinks.ifHCOutOctets);
+ var n = parseInt(nmsData.switchstate.switches[this.sw].uplinks.ifHCOutOctets);
+ var tt = parseInt(nmsData.switchstate.then[this.sw].time);
+ var nt = parseInt(nmsData.switchstate.switches[this.sw].time);
+ var tdiff = nt - tt;
+ var diff = n - t;
+ speed = diff / tdiff;
+ if(!isNaN(speed)) {
+ uplinkTraffic = byteCount(speed*8,0);
+ }
+ } catch (e) {};
+
+ //Get uptime data
+ var uptime = "";
+ try {
+ uptime = nmsData.snmp.snmp[this.sw]["misc"]["sysUpTimeInstance"][""] / 60 / 60 / 100;
+ uptime = Math.floor(uptime) + " t";
+ } catch(e) {}
+
+ //Get temperature data
+ var temp = "";
+ try {
+ temp = nmsData.switchstate.switches[this.sw].temp + " °C";
+ } catch(e) {}
+
+ content.push(["Ping latency:",(nmsData.ping.switches[this.sw].latency + " ms" || undefined)]);
+ content.push(["Last DHCP lease:",lastDhcp]);
+ content.push(["SNMP status:",snmpStatus]);
+ content.push(["CPU usage:",cpuUsage]);
+ content.push(["Uplink traffic:",uplinkTraffic]);
+ content.push(["System uptime:",uptime]);
+ content.push(["Temperature",temp]);
+ content.push(["Management (v4):",(this.swm.mgmt_v4_addr || '')]);
+ content.push(["Management (v6):",(this.swm.mgmt_v6_addr || '')]);
+ content.push(["Subnet (v4):",(this.swm.subnet4 || '')]);
+ content.push(["Subnet (v6):",(this.swm.subnet6 || '')]);
+
+ var contentCleaned = [];
+ for(var i in content) {
+ if(content[i][1] == '' || content[i][1] == null)
+ continue;
+ if(content[i][1] == undefined || content[i][1])
+ content[i][1] == "No data";
+ contentCleaned.push(content[i]);
+ }
+
+ var table = nmsInfoBox._makeTable(contentCleaned);
+ table.id = this.sw + "-summary";
+
+ this.content = table;
+
+ if(argument == "tick") {
+ var myObj = document.getElementById(this.sw + "-summary");
+ var oldObj = myObj.parentNode.replaceChild(this.content,myObj);
+ return;
+ }
+
+ this.childContent = '';
+ nmsInfoBox._windowTypes.switchInfo.showComments();
+ nmsInfoBox.refresh("soft");
+ },
+ showInfoTable: function() {
+ this.activeView = "infotable";
+ var content = [];
+
+ for (var v in this.swi) {
+ if (v == "placement") {
+ var place = JSON.stringify(this.swi[v]);
+ content.push([v,place]);
+ continue;
+ }
+ content.push([v, this.swi[v]]);
+ }
+
+ for (var v in this.swm) {
+ content.push([v, this.swm[v]]);
+ }
+ content.sort();
+
+ var infotable = nmsInfoBox._makeTable(content);
+ infotable.id = "info-switch-table";
+
+ this.content = infotable;
+ this.childContent = '';
+ nmsInfoBox.refresh("soft");
+ },
+ update: function(type) {
+ switch (type) {
+ case 'comments':
+ if(nmsInfoBox._windowTypes.switchInfo.activeView == "summary" && this.commentsHash != nmsData.comments.hash) {
+ nmsInfoBox._windowTypes.switchInfo.showComments();
+ }
+ break;
+ case 'tick':
+ if(nmsInfoBox._windowTypes.switchInfo.activeView == "summary")
+ nmsInfoBox._windowTypes.switchInfo.showSummary("tick");
+ break;
+ }
+ },
+ showComments: function() {
+ var domObj = document.createElement("div");
+ var comments = [];
+
+ var commentbox = document.createElement("div");
+ commentbox.id = "commentbox";
+ commentbox.className = "panel-body";
+ commentbox.style.width = "100%";
+ commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + this.sw + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + this.sw + '\',document.getElementById(\'' + this.sw + '-comment\').value); document.getElementById(\'' + this.sw + '-comment\').value = \'\'; document.getElementById(\'' + this.sw + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>';
+
+ // If we have no switch data, so just show comment form
+ if(!nmsData.comments || !nmsData.comments.comments) {
+ this.commentsHash = false;
+
+ // We have data, refresh
+ } else if(nmsData.comments.comments[this.sw]) {
+ this.commentsHash = nmsData.comments.hash;
+ for (var c in nmsData.comments.comments[this.sw]["comments"]) {
+ var comment = nmsData.comments.comments[this.sw]["comments"][c];
+ if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") {
+ comments.push(comment);
+ }
+ }
+
+ if (comments.length > 0) {
+ var commenttable = nmsInfoBox._makeCommentTable(comments);
+ commenttable.id = "info-switch-comments-table";
+ domObj.appendChild(commenttable);
+ }
+
+ // We have no data for this switch, but its still correct
+ } else {
+ this.commentsHash = nmsData.comments.hash;
+ }
+
+ domObj.appendChild(commentbox);
+ this.childContent = domObj;
+ nmsInfoBox.refresh("soft");
+ },
+ showEdit: function() {
+ this.activeView = "edit";
+ var domObj = document.createElement("div");
+ var template = {};
+
+ nmsInfoBox._editValues = {};
+ var place;
+ for (var v in this.swi) {
+ if (v == "placement") {
+ place = JSON.stringify(this.swi[v]);
+ template[v] = place;
+ continue;
+ }
+ template[v] = nmsInfoBox._nullBlank(this.swi[v]);
+ }
+ for (var v in this.swm) {
+ template[v] = nmsInfoBox._nullBlank(this.swm[v]);
+ }
+ var content = [];
+ for (v in template) {
+ var tmpsw = '\'' + this.sw + '\'';
+ var tmpv = '\'' + v + '\'';
+ var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"';
+ var html = "<input type=\"text\" class=\"form-control\" value='" + template[v] + "' id=\"edit-"+ this.sw + "-" + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '/>';
+ content.push([v, html]);
+ }
+
+ content.sort();
+
+ var table = nmsInfoBox._makeTable(content, "edit");
+ domObj.appendChild(table);
+
+ var submit = document.createElement("button");
+ submit.innerHTML = "Save changes";
+ submit.classList.add("btn", "btn-primary");
+ submit.id = "edit-submit-" + this.sw;
+ submit.onclick = function(e) { nmsInfoBox._windowTypes.switchInfo.save(); };
+ domObj.appendChild(submit);
+
+ var output = document.createElement("output");
+ output.id = "edit-output";
+ domObj.appendChild(output);
+
+ if (place) {
+ var pval = document.getElementById("edit-" + this.sw + "-placement");
+ if (pval) {
+ pval.value = place;
+ }
+ }
+
+ this.content = domObj;
+ this.childContent = '';
+ nmsInfoBox.refresh("soft");
+ },
+ showSNMP: function(tree) {
+ this.activeView = "snmp";
+ var domObj = document.createElement("div");
+ domObj.classList.add("panel-group");
+
+ try {
+ var snmpJson = nmsData.snmp.snmp[this.sw][tree];
+ } catch(e) {
+ this.content = "(no recent data (yet)?)";
+ return;
+ }
+
+ /*
+ * This html-generation code seems unnecessary complex. Must be a
+ * cleaner way to do this. But not today.
+ */
+ for(var obj in snmpJson) {
+
+ var cleanObj = obj.replace(/\W+/g, "");
+
+ var groupObj = document.createElement("div");
+ groupObj.classList.add("panel","panel-default");
+ groupObj.innerHTML = '<a class="panel-heading collapse-controller" style="display:block;" role="button" data-toggle="collapse" href="#'+cleanObj+'-group">' + obj + '</a>';
+
+ var groupObjCollapse = document.createElement("div");
+ groupObjCollapse.id = cleanObj + "-group";
+ groupObjCollapse.classList.add("collapse");
+
+ var panelBodyObj = document.createElement("div");
+ panelBodyObj.classList.add("panel-body");
+
+ var tableObj = document.createElement("table");
+ tableObj.classList.add("table","table-condensed");
+
+ var tbody = document.createElement("tbody");
+
+ for(var prop in snmpJson[obj]) {
+ var propObj = document.createElement("tr");
+ propObj.innerHTML = '<td>' + prop + '</td><td>' + snmpJson[obj][prop] + '</td>';
+ tbody.appendChild(propObj);
+ }
+
+ tableObj.appendChild(tbody);
+ panelBodyObj.appendChild(tableObj);
+ groupObjCollapse.appendChild(panelBodyObj);
+ groupObj.appendChild(groupObjCollapse);
+ domObj.appendChild(groupObj);
+
+ }
+ this.content = domObj;
+ this.childContent = '';
+
+ nmsInfoBox.refresh("soft");
+ },
+ unload: function() {
+ this.title = '';
+ this.content = '';
+ this.childContent = false;
+ this.sw = '';
+ this.swi = '';
+ this.swm = '';
+ this.commentsHash = false;
+ this.activeView = '';
+ nmsData.unregisterHandler("ticker","switchInfo");
+ },
+ save: function() {
+ var myData = nmsInfoBox._editStringify(this.sw);
+ $.ajax({
+ type: "POST",
+ url: "/api/write/switch-update",
+ dataType: "text",
+ data:myData,
+ success: function (data, textStatus, jqXHR) {
+ var result = JSON.parse(data);
+ if(result.switches_updated.length > 0) { // FIXME unresolved variable switches_addded
+ nmsInfoBox.hide();
+ }
+ nmsData.invalidate("switches");
+ nmsData.invalidate("smanagement");
+ }
+ });
+ }
+};
+
+/*
+ * Window type: Show inventory listing
+ *
+ * Basic window that displays a list of all devices with simple summary information
+ *
+ * TODO: Set up more complex views with more columns, sorting, etc.
+ *
+ */
+nmsInfoBox._windowTypes.inventoryListing = {
+ content: '',
+ childContent: false,
+ activeView: '',
+ activeFilter: '',
+ getTitle: function() {
+ return '<h4>Inventory listing</h4><button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'distro_name\');">Distro name</button> <button type="button" class="distro-name btn btn-xs btn-default" onclick="nmsInfoBox.showWindow(\'inventoryListing\',\'sysDescr\');">System Description</button>';
+ },
+ getContent: function() {
+ return this.content;
+ },
+ getChildContent: function() {
+ return this.childContent;
+ },
+ setFilter: function(filter) {
+ this.activeFilter = filter.toLowerCase();
+ nmsInfoBox._windowTypes.inventoryListing.load("refresh");
+ },
+ getFilter: function() {
+ return this.activeFilter;
+ },
+ load: function(list) {
+ var hasSnmp = false;
+ var targetArray = [];
+ var listTitle = '';
+ var needRefresh = false;
+ var needSnmp = false;
+ var contentObj = document.createElement("div");
+ var inputObj = document.createElement("div");
+ inputObj.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Filter" id="inventorylisting-filter" value="' + this.activeFilter + '" onkeyup="if (event.keyCode == 13) {nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);}"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="nmsInfoBox._windowTypes.inventoryListing.setFilter(document.getElementById(\'inventorylisting-filter\').value);">Filtrer</button></span></div>';
+ contentObj.appendChild(inputObj);
+
+
+ if(!nmsData.switches || !nmsData.switches.switches)
+ return;
+ if(!(!nmsData.snmp || !nmsData.snmp.snmp)) {
+ hasSnmp = true;
+ }
+ if(list == "refresh") {
+ list = this.activeView;
+ needRefresh = true;
+ }
+
+ switch (list) {
+ case 'distro_name':
+ listTitle = 'Distro names';
+ break;
+ case 'sysDescr':
+ if(hasSnmp)
+ listTitle = 'System description';
+ needSnmp = true;
+ break;
+ default:
+ listTitle = 'Distro names';
+ list = 'distro_name';
+ }
+ this.activeView = list;
+
+ if(needSnmp && !hasSnmp) {
+ this.content = "No SNMP data loaded. Reloading shortly.";
+ nmsData.addHandler("snmp","inventoryListing",nmsInfoBox._windowTypes.inventoryListing.update,"snmp-request");
+ return;
+ }
+
+ var resultArray = [];
+ for(var sw in nmsData.switches.switches) {
+ var value = '';
+ if(this.activeFilter != '') {
+ if(sw.toLowerCase().indexOf(this.activeFilter) == -1 && !nmsInfoBox._searchSmart(this.activeFilter,sw))
+ continue;
+ }
+ try {
+ switch (list) {
+ case 'distro_name':
+ value = nmsData.switches.switches[sw]["distro_name"];
+ break;
+ case 'sysDescr':
+ value = nmsData.snmp.snmp[sw]["misc"]["sysDescr"][0];
+ break;
+ }
+ } catch (e) {
+ //console.log(e);
+ }
+ resultArray.push([sw, value]);
+ }
+
+ resultArray.sort();
+
+ var infotable = nmsInfoBox._makeTable(resultArray,listTitle);
+ infotable.id = "inventory-table";
+
+ contentObj.appendChild(infotable);
+ this.content = contentObj;
+ if(needRefresh)
+ nmsInfoBox.refresh("soft");
+ },
+ update: function(type) {
+ if(type == "snmp-request") {
+ nmsData.unregisterHandler("snmp","inventoryListing");
+ nmsInfoBox._windowTypes.inventoryListing.load("refresh");
+ }
+ },
+ unload: function() {
+ nmsData.unregisterHandler("snmp","inventoryListing");
+ this.content = '';
+ this.activeView = '';
+ this.activeFilter = '';
+ },
+ save: function() {
+ }
+};
/*
- * Click a switch: If it's currently showing: hide it, otherwise display
+ * Click a switch and display it
* it.
*/
nmsInfoBox.click = function(sw)
{
- if (nmsInfoBox._showing == sw)
- nmsInfoBox.hide();
- else
- nmsInfoBox.show(sw);
-}
-
-nmsInfoBox._hide = function()
-{
- var swtop = document.getElementById("info-switch-parent");
- var switchele = document.getElementById("info-switch-table");
- var comments = document.getElementById("info-switch-comments-table");
- var commentbox;
- if (switchele != undefined)
- switchele.parentNode.removeChild(switchele);
- if (comments != undefined)
- comments.parentNode.removeChild(comments);
- commentbox = document.getElementById("commentbox");
- if (commentbox != undefined)
- commentbox.parentNode.removeChild(commentbox);
- swtop.style.display = 'none';
- nmsInfoBox._showing = "";
- nmsInfoBox._editHide();
- nmsInfoBox._snmpHide();
-}
+ this.showWindow("switchInfo",sw);
+};
/*
* General-purpose table-maker?
@@ -89,13 +683,14 @@ nmsInfoBox._makeTable = function(content, caption) {
}
for (var v in content) {
tr = table.insertRow(-1);
+ tr.className = content[v][0].toLowerCase();
td1 = tr.insertCell(0);
td2 = tr.insertCell(1);
td1.innerHTML = content[v][0];
td2.innerHTML = content[v][1];
}
return table;
-}
+};
/*
* Create and return a table for comments.
@@ -138,7 +733,65 @@ nmsInfoBox._makeCommentTable = function(content) {
td2.innerHTML = comment["comment"];
}
return table;
-}
+};
+
+nmsInfoBox._searchSmart = function(id, sw) {
+ try {
+ try {
+ if (nmsData.switches.switches[sw].distro_name.toLowerCase() == id) {
+ return true;
+ }
+ } catch (e) {}
+ try {
+ if (id.match("active")) {
+ var limit = id;
+ limit = limit.replace("active>","");
+ limit = limit.replace("active<","");
+ limit = limit.replace("active=","");
+ var operator = id.replace("active","")[0];
+ if (limit == parseInt(limit)) {
+ var ports = parseInt(nmsData.switchstate.switches[sw].ifs.ge.live);
+ limit = parseInt(limit);
+ if (operator == ">" ) {
+ if (ports > limit) {
+ return true;
+ }
+ } else if (operator == "<") {
+ if (ports < limit) {
+ return true;
+ }
+ } else if (operator == "=") {
+ if (ports == limit) {
+ return true;
+ }
+ }
+ }
+ }
+ } catch (e) {}
+ try {
+ if (nmsData.smanagement.switches[sw].mgmt_v4_addr.match(id)) {
+ return true;
+ }
+ if (nmsData.smanagement.switches[sw].mgmt_v6_addr.match(id)) {
+ return true;
+ }
+ } catch (e) {}
+ try {
+ if (nmsData.smanagement.switches[sw].subnet4.match(id)) {
+ return true;
+ }
+ if (nmsData.smanagement.switches[sw].subnet6.match(id)) {
+ return true;
+ }
+ } catch (e) {}
+ if (nmsData.snmp.snmp[sw].misc.sysDescr[0].toLowerCase().match(id)) {
+ return true;
+ }
+ } catch (e) {
+ return false;
+ }
+ return false;
+};
/*
* FIXME: Not sure this belongs here, it's really part of the "Core" ui,
@@ -147,174 +800,58 @@ nmsInfoBox._makeCommentTable = function(content) {
nmsInfoBox._search = function() {
var el = document.getElementById("searchbox");
var id = false;
- var hits = 0;
+ var matches = [];
if (el) {
- id = el.value;
+ id = el.value.toLowerCase();
}
if(id) {
+ nmsMap.enableHighlights();
for(var sw in nmsData.switches.switches) {
- if(sw.indexOf(id) > -1) {
- hits++;
+ if(sw.toLowerCase().indexOf(id) > -1) {
+ matches.push(sw);
+ nmsMap.setSwitchHighlight(sw,true);
+ } else if (nmsInfoBox._searchSmart(id,sw)) {
+ matches.push(sw);
nmsMap.setSwitchHighlight(sw,true);
} else {
nmsMap.setSwitchHighlight(sw,false);
}
}
} else {
- nmsMap.removeAllSwitchHighlights();
- }
-}
-
-nmsInfoBox._snmp = function(x,tree)
-{
-
- nmsInfoBox._snmpHide();
- var container = document.createElement("div");
- container.id = "nmsInfoBox-snmp-show";
-
- var swtop = document.getElementById("info-switch-parent");
- var output = document.createElement("output");
- output.id = "edit-output";
- output.style = "white-space: pre;";
- try {
- output.value = JSON.stringify(nmsData.snmp.snmp[x][tree],null,4);
- } catch(e) {
- output.value = "(no recent data (yet)?)";
+ nmsMap.disableHighlights();
}
- container.appendChild(output);
- swtop.appendChild(container);
-}
-/*
- * Display info on switch "x" in the info-box
- *
- * Use nmsInfoBox.show(), otherwise changes wont be picked up.
- */
-nmsInfoBox._show = function(x)
-{
- var sw = nmsData.switches["switches"][x];
- var swm = nmsData.smanagement.switches[x];
- var swtop = document.getElementById("info-switch-parent");
- var swpanel = document.getElementById("info-switch-panel-body");
- var swtitle = document.getElementById("info-switch-title");
- var content = [];
-
-
- nmsInfoBox._hide();
- nmsInfoBox._showing = x;
-
- swtitle.innerHTML = ' <button type="button" class="edit btn btn-xs btn-warning" onclick="nmsInfoBox._edit(\'' + x + '\');">Edit</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._snmp(\'' + x + '\',\'ports\');">Ports</button> <button type="button" class="edit btn btn-xs btn-default" onclick="nmsInfoBox._snmp(\'' + x + '\',\'misc\');">Misc</button> ' + x + ' <button type="button" class="close" aria-label="Close" onclick="nmsInfoBox.hide();" style="float: right;"><span aria-hidden="true">&times;</span></button>';
-
- for (var v in sw) {
- if (v == "placement") {
- var place = JSON.stringify(sw[v]);
- content.push([v,place]);
- continue;
- }
- content.push([v, sw[v]]);
+ if(matches.length == 1) {
+ document.getElementById("searchbox-submit").classList.add("btn-primary");
+ document.getElementById("searchbox").dataset.match = matches[0];
+ } else {
+ document.getElementById("searchbox-submit").classList.remove("btn-primary");
+ document.getElementById("searchbox").dataset.match = '';
}
+};
- for (var v in swm) {
- content.push([v, swm[v]]);
- }
- content.sort();
-
- var comments = [];
- if (nmsData.comments.comments != undefined && nmsData.comments.comments[x] != undefined) {
- for (var c in nmsData.comments.comments[x]["comments"]) {
- var comment = nmsData.comments.comments[x]["comments"][c];
- if (comment["state"] == "active" || comment["state"] == "persist" || comment["state"] == "inactive") {
- comments.push(comment);
+nmsInfoBox._searchKeyListener = function(e) {
+ switch (e.keyCode) {
+ case 13:
+ var sw = document.getElementById("searchbox").dataset.match;
+ if(sw != '') {
+ nmsInfoBox.showWindow("switchInfo",sw);
}
- }
+ break;
+ case 27:
+ document.getElementById("searchbox").dataset.match = '';
+ document.getElementById("searchbox").value = '';
+ nmsInfoBox._search();
+ nmsInfoBox.hide();
+ break;
}
-
- var infotable = nmsInfoBox._makeTable(content);
- infotable.id = "info-switch-table";
- swtop.appendChild(infotable);
- if (comments.length > 0) {
- var commenttable = nmsInfoBox._makeCommentTable(comments);
- commenttable.id = "info-switch-comments-table";
- swtop.appendChild(commenttable);
- $(function () { $('[data-toggle="popover"]').popover({placement:"top",continer:'body'}) })
- }
- var commentbox = document.createElement("div");
- commentbox.id = "commentbox";
- commentbox.className = "panel-body";
- commentbox.style.width = "100%";
- commentbox.innerHTML = '<div class="input-group"><input type="text" class="form-control" placeholder="Comment" id="' + x + '-comment"><span class=\"input-group-btn\"><button class="btn btn-default" onclick="addComment(\'' + x + '\',document.getElementById(\'' + x + '-comment\').value); document.getElementById(\'' + x + '-comment\').value = \'\'; document.getElementById(\'' + x + '-comment\').placeholder = \'Comment added. Wait for next refresh.\';">Add comment</button></span></div>';
- swtop.appendChild(commentbox);
- swtop.style.display = 'block';
-}
+};
nmsInfoBox._nullBlank = function(x) {
if (x == null || x == false || x == undefined)
return "";
return x;
-}
+};
-nmsInfoBox._editHide = function() {
- var container = document.getElementById("nmsInfoBox-edit-box");
- if (container != undefined)
- container.parentNode.removeChild(container);
-}
-nmsInfoBox._snmpHide = function() {
- var container = document.getElementById("nmsInfoBox-snmp-show");
- if (container != undefined)
- container.parentNode.removeChild(container);
-}
-
-nmsInfoBox._edit = function(sw) {
- var template = {};
- var place = false;
- nmsInfoBox._editHide();
- nmsInfoBox._snmpHide();
- var container = document.createElement("div");
- container.id = "nmsInfoBox-edit-box";
-
- nmsInfoBox._editValues = {};
- if (nmsData.switches.switches[sw] != undefined) {
- for (var v in nmsData.switches.switches[sw]) {
- if (v == "placement") {
- place = JSON.stringify(nmsData.switches.switches[sw][v]);
- template[v] = "";
- continue;
- }
- template[v] = this._nullBlank(nmsData.switches.switches[sw][v]);
- }
- }
- if (nmsData.smanagement.switches[sw] != undefined) {
- for (var v in nmsData.smanagement.switches[sw]) {
- template[v] = this._nullBlank(nmsData.smanagement.switches[sw][v]);
- }
- }
- var content = [];
- for (v in template) {
- var tmpsw = '\'' + sw + '\'';
- var tmpv = '\'' + v + '\'';
- var tmphandler = '"nmsInfoBox._editChange(' + tmpsw + ',' + tmpv + ');"';
- var html = "<input type=\"text\" class=\"form-control\" value=\"" + template[v] + "\" id=\"edit-"+ sw + "-" + v + '" onchange=' + tmphandler + ' oninput=' + tmphandler + '/>';
- content.push([v, html]);
- }
- var table = nmsInfoBox._makeTable(content, "edit");
- var swtop = document.getElementById("info-switch-parent");
- container.appendChild(table);
- var submit = document.createElement("button");
- submit.innerHTML = "Save changes";
- submit.classList.add("btn", "btn-primary");
- submit.id = "edit-submit-" + sw;
- submit.onclick = function(e) { nmsInfoBox._editSave(sw, e); };
- container.appendChild(submit);
- var output = document.createElement("output");
- output.id = "edit-output";
- container.appendChild(output);
- swtop.appendChild(container);
- if (place) {
- var pval = document.getElementById("edit-" + sw + "-placement");
- if (pval) {
- pval.value = place;
- }
- }
-}
nmsInfoBox._editChange = function(sw, v) {
var el = document.getElementById("edit-" + sw + "-" + v);
@@ -334,27 +871,9 @@ nmsInfoBox._editChange = function(sw, v) {
var myData = nmsInfoBox._editStringify(sw);
var out = document.getElementById("edit-output");
out.value = myData;
-}
+};
nmsInfoBox._editStringify = function(sw) {
- for (var key in nmsInfoBox._editValues) {
- var val = nmsInfoBox._editValues[key];
- }
- nmsInfoBox._editValues['sysname'] = sw;
- var myData = JSON.stringify([nmsInfoBox._editValues]);
- return myData;
-}
-nmsInfoBox._editSave = function(sw, e) {
- var myData = nmsInfoBox._editStringify(sw);
- $.ajax({
- type: "POST",
- url: "/api/private/switch-add",
- dataType: "text",
- data:myData,
- success: function (data, textStatus, jqXHR) {
- nmsData.invalidate("switches");
- nmsData.invalidate("smanagement");
- }
- });
- nmsInfoBox._editHide();
-}
+ nmsInfoBox._editValues['sysname'] = sw;
+ return JSON.stringify([nmsInfoBox._editValues]);
+};
diff --git a/web/nms.gathering.org/js/nms-map-handlers.js b/web/nms.gathering.org/js/nms-map-handlers.js
index fa33bad..474e8ef 100644
--- a/web/nms.gathering.org/js/nms-map-handlers.js
+++ b/web/nms.gathering.org/js/nms-map-handlers.js
@@ -49,6 +49,12 @@ var handler_traffic_tot = {
name:"Switch traffic map"
};
+var handler_dhcp = {
+ init:dhcpInit,
+ tag:"dhcp",
+ name:"DHCP map"
+};
+
var handler_disco = {
init:discoInit,
tag:"disco",
@@ -61,6 +67,18 @@ var handler_comment = {
name:"Fresh comment spotter"
};
+var handler_snmp = {
+ init:snmpInit,
+ tag:"snmp",
+ name:"SNMP state"
+};
+
+var handler_cpu = {
+ init:cpuInit,
+ tag:"cpu",
+ name:"CPU utilization"
+};
+
var handlers = [
handler_uplinks,
handler_temp,
@@ -68,7 +86,10 @@ var handlers = [
handler_traffic,
handler_disco,
handler_comment,
- handler_traffic_tot
+ handler_traffic_tot,
+ handler_dhcp,
+ handler_snmp,
+ handler_cpu
];
/*
@@ -84,7 +105,7 @@ function uplinkUpdater()
return;
if (!nmsData.switchstate.switches)
return;
- for (sw in nmsData.switches.switches) {
+ for (var sw in nmsData.switches.switches) {
var uplinks=0;
if (nmsData.switchstate.switches[sw] == undefined || nmsData.switchstate.switches[sw].uplinks == undefined) {
uplinks=0;
@@ -95,12 +116,12 @@ function uplinkUpdater()
if (uplinks == 0) {
nmsMap.setSwitchColor(sw,"white");
- } else if (nuplinks == uplinks) {
- nmsMap.setSwitchColor(sw,green);
- } else if (nuplinks - uplinks == 1) {
- nmsMap.setSwitchColor(sw, orange);
- } else if (nuplinks - uplinks == 2) {
+ } else if (uplinks == 1) {
nmsMap. setSwitchColor(sw, red);
+ } else if (uplinks == 2) {
+ nmsMap.setSwitchColor(sw, orange);
+ } else if (uplinks == 3) {
+ nmsMap.setSwitchColor(sw,green);
} else if (uplinks > 3) {
nmsMap.setSwitchColor(sw, blue);
}
@@ -115,9 +136,9 @@ function uplinkInit()
nmsData.addHandler("switches","mapHandler",uplinkUpdater);
nmsData.addHandler("switchstate","mapHandler",uplinkUpdater);
setLegend(1,"white","0 uplinks");
- setLegend(2,red,"2 missing");
- setLegend(3,orange,"1 missing");
- setLegend(4,green,"0 missing");
+ setLegend(2,red,"1 uplink");
+ setLegend(3,orange,"2 uplinks");
+ setLegend(4,green,"3 uplinks");
setLegend(5,blue,"4 uplinks");
}
@@ -126,44 +147,43 @@ function uplinkInit()
*/
function trafficInit()
{
+ nmsData.addHandler("switches","mapHandler",trafficUpdater);
+ nmsData.addHandler("switchstate","mapHandler",trafficUpdater);
var m = 1024 * 1024 / 8;
drawGradient([lightgreen,green,orange,red]);
setLegend(1,colorFromSpeed(0),"0 (N/A)");
- setLegend(5,colorFromSpeed(2000 * m) , "2000Mb/s");
- setLegend(4,colorFromSpeed(1500 * m),"1500Mb/s");
- setLegend(3,colorFromSpeed(500 * m),"500Mb/s");
+ setLegend(5,colorFromSpeed(1100 * m) , "1100Mb/s");
+ setLegend(4,colorFromSpeed(600 * m),"600Mb/s");
+ setLegend(3,colorFromSpeed(300 * m),"300Mb/s");
setLegend(2,colorFromSpeed(10 * m),"10Mb/s");
}
function trafficUpdater()
{
- if (!nms.switches_now["switches"])
+ if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
return;
- for (sw in nms.switches_now["switches"]) {
+ for (var sw in nmsData.switchstate.switches) {
var speed = 0;
- for (port in nms.switches_now["switches"][sw]["ports"]) {
- if (/ge-0\/0\/44$/.exec(port) ||
- /ge-0\/0\/45$/.exec(port) ||
- /ge-0\/0\/46$/.exec(port) ||
- /ge-0\/0\/47$/.exec(port))
- {
- if (!nms.switches_then["switches"][sw] ||
- !nms.switches_then["switches"][sw]["ports"] ||
- !nms.switches_then["switches"][sw]["ports"][port])
- continue;
- var t = nms.switches_then["switches"][sw]["ports"][port];
- var n = nms.switches_now["switches"][sw]["ports"][port];
- speed += (parseInt(t["ifhcoutoctets"]) -parseInt(n["ifhcoutoctets"])) / (parseInt(t["time"] - n["time"]));
- speed += (parseInt(t["ifhcinoctets"]) -parseInt(n["ifhcinoctets"])) / (parseInt(t["time"] - n["time"]));
- }
+ try {
+ var t = parseInt(nmsData.switchstate.then[sw].uplinks.ifHCOutOctets);
+ var n = parseInt(nmsData.switchstate.switches[sw].uplinks.ifHCOutOctets);
+ var tt = parseInt(nmsData.switchstate.then[sw].time);
+ var nt = parseInt(nmsData.switchstate.switches[sw].time);
+ } catch (e) { continue;};
+ var tdiff = nt - tt;
+ var diff = n - t;
+ speed = diff / tdiff;
+ if(!isNaN(speed)) {
+ nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
+ nmsMap.setSwitchInfo(sw,byteCount(speed*8,0));
}
- if(!isNaN(speed))
- setSwitchColor(sw,colorFromSpeed(speed));
}
}
function trafficTotInit()
{
+ nmsData.addHandler("switches","mapHandler",trafficTotUpdater);
+ nmsData.addHandler("switchstate","mapHandler",trafficTotUpdater);
var m = 1024 * 1024 / 8;
drawGradient([lightgreen,green,orange,red]);
setLegend(1,colorFromSpeed(0),"0 (N/A)");
@@ -175,20 +195,21 @@ function trafficTotInit()
function trafficTotUpdater()
{
- if (!nms.switches_now["switches"])
+ if (!nmsData.switchstate.switches || !nmsData.switchstate.then)
return;
- for (sw in nms.switches_now["switches"]) {
+ for (var sw in nmsData.switchstate.switches) {
var speed = 0;
- for (port in nms.switches_now["switches"][sw]["ports"]) {
- if (!nms.switches_then["switches"][sw] ||
- !nms.switches_then["switches"][sw]["ports"] ||
- !nms.switches_then["switches"][sw]["ports"][port])
- continue;
- var t = nms.switches_then["switches"][sw]["ports"][port];
- var n = nms.switches_now["switches"][sw]["ports"][port];
- speed += (parseInt(t["ifhcoutoctets"]) -parseInt(n["ifhcoutoctets"])) / (parseInt(t["time"] - n["time"]));
- }
- setSwitchColor(sw,colorFromSpeed(speed,5));
+ try {
+ var t = parseInt(nmsData.switchstate.then[sw].totals.ifHCOutOctets);
+ var n = parseInt(nmsData.switchstate.switches[sw].totals.ifHCOutOctets);
+ var tt = parseInt(nmsData.switchstate.then[sw].time);
+ var nt = parseInt(nmsData.switchstate.switches[sw].time);
+ } catch (e) { continue;};
+ var tdiff = nt - tt;
+ var diff = n - t;
+ speed = diff / tdiff;
+ if(!isNaN(speed))
+ nmsMap.setSwitchColor(sw,colorFromSpeed(speed));
}
}
@@ -196,14 +217,13 @@ function colorFromSpeed(speed,factor)
{
var m = 1024 * 1024 / 8;
if (factor == undefined)
- factor = 2;
+ factor = 1.1;
if (speed == 0)
return blue;
speed = speed < 0 ? 0 : speed;
return getColorStop( 1000 * (speed / (factor * (1000 * m))));
}
-
/*
* Tweaked this to scale from roughly 20C to 35C. Hence the -20 and /15
* thing (e.g., "0" is 20 and "15" is 35 by the time we pass it to
@@ -222,27 +242,35 @@ function temp_color(t)
function tempUpdater()
{
- for (sw in nms.switches_now["switches"]) {
+ if(!nmsData.switches)
+ return;
+
+ for ( var sw in nmsData.switches["switches"]) {
var t = "white";
var temp = "";
- if (nms.switches_now["switches"][sw]["temp"]) {
- t = temp_color(nms.switches_now["switches"][sw]["temp"]);
- temp = nms.switches_now["switches"][sw]["temp"] + "°C";
- }
- setSwitchColor(sw, t);
- switchInfoText(sw, temp);
+ if(!nmsData.switchstate || !nmsData.switchstate.switches || !nmsData.switchstate.switches[sw] || !nmsData.switchstate.switches[sw].temp)
+ continue;
+
+ var t = nmsData.switchstate.switches[sw].temp;
+ temp = t + "°C";
+ t = temp_color(temp);
+ nmsMap.setSwitchColor(sw, t);
+ nmsMap.setSwitchInfo(sw, temp);
+
}
}
function tempInit()
-{
+{
+ //Padded the gradient with extra colors for the upper unused values
drawGradient(["black",blue,lightblue,lightgreen,green,orange,red]);
setLegend(1,temp_color(15),"15 °C");
setLegend(2,temp_color(20),"20 °C");
setLegend(3,temp_color(25),"25 °C");
setLegend(4,temp_color(30),"30 °C");
setLegend(5,temp_color(35),"35 °C");
+ nmsData.addHandler("switchstate","mapHandler",tempUpdater);
}
function pingUpdater()
@@ -252,6 +280,7 @@ function pingUpdater()
}
for (var sw in nmsData.switches.switches) {
try {
+ var c;
if (nmsData.ping.switches[sw].age > 0) {
c = red;
} else {
@@ -284,6 +313,8 @@ function commentUpdater()
if (nmsData.comments == undefined || nmsData.comments.comments == undefined) {
return
}
+ if(!nmsData.switches)
+ return;
for (var sw in nmsData.switches.switches) {
var c = "white";
if (nmsData.comments.comments[sw] == undefined) {
@@ -329,6 +360,55 @@ function commentInit()
setLegend(5,green ,"Old/inactive only");
}
+function getDhcpColor(stop)
+{
+ stop = parseInt(stop);
+ stop = stop * 0.85;
+ if (stop < 0)
+ stop = 1000;
+ if (stop > 1000)
+ stop = 1000;
+ return getColorStop(stop);
+}
+
+function dhcpUpdater()
+{
+ var realnow = Date.now();
+ var now = Math.floor(realnow / 1000);
+ if (nmsData.dhcp == undefined || nmsData.dhcp.dhcp == undefined) {
+ return
+ }
+ if (nmsData.switches == undefined || nmsData.switches.switches == undefined) {
+ return;
+ }
+ try {
+ for (var sw in nmsData.switches.switches) {
+ var c = blue;
+ if (nmsData.dhcp.dhcp[sw] == undefined) {
+ nmsMap.setSwitchColor(sw,c);
+ continue;
+ }
+ var s = nmsData.dhcp.dhcp[sw];
+ var then = parseInt(s);
+ c = getDhcpColor(now - then);
+ nmsMap.setSwitchColor(sw, c);
+ }
+ } catch(e) {
+ console.log(e);
+ }
+}
+
+function dhcpInit()
+{
+ drawGradient([green,lightgreen,orange,red]);
+ nmsData.addHandler("dhcp","mapHandler",dhcpUpdater);
+ setLegend(1,"white","Undefined");
+ setLegend(2,getDhcpColor(1),"1 Second old");
+ setLegend(3,getDhcpColor(300),"300 Seconds old");
+ setLegend(4,getDhcpColor(900),"900 Seconds old");
+ setLegend(5,getDhcpColor(1200),"1200 Seconds old");
+}
+
/*
* Testing-function to randomize colors of linknets and switches
*/
@@ -362,3 +442,50 @@ function discoInit()
setLegend(5,"white","!");
}
+function snmpUpdater() {
+ for (var sw in nmsData.switches.switches) {
+ if (nmsData.snmp.snmp[sw] == undefined || nmsData.snmp.snmp[sw].misc == undefined) {
+ nmsMap.setSwitchColor(sw, red);
+ } else if (nmsData.snmp.snmp[sw].misc.sysName[0] != sw) {
+ nmsMap.setSwitchColor(sw, orange);
+ } else {
+ nmsMap.setSwitchColor(sw, green);
+ }
+ }
+}
+function snmpInit() {
+ nmsData.addHandler("snmp", "mapHandler", snmpUpdater);
+
+ setLegend(1,green,"OK");
+ setLegend(2,orange, "Sysname mismatch");
+ setLegend(3,red,"No SNMP data");
+ setLegend(4,green, "");
+ setLegend(5,green,"");
+
+}
+function cpuUpdater() {
+ for (var sw in nmsData.switches.switches) {
+ try {
+ var cpu = 0;
+ for (var u in nmsData.snmp.snmp[sw].misc.jnxOperatingCPU) {
+ var local = nmsData.snmp.snmp[sw].misc['jnxOperatingCPU'][u];
+ cpu = Math.max(nmsData.snmp.snmp[sw].misc.jnxOperatingCPU[u],cpu);
+ }
+ nmsMap.setSwitchColor(sw, getColorStop(cpu * 10));
+ nmsMap.setSwitchInfo(sw, cpu + " % ");
+ } catch (e) {
+ nmsMap.setSwitchColor(sw, "white");
+ nmsMap.setSwitchInfo(sw, "N/A");
+ }
+ }
+}
+
+function cpuInit() {
+ nmsData.addHandler("snmp", "mapHandler", cpuUpdater);
+ drawGradient([green,orange,red]);
+ setLegend(1,getColorStop(0),"0 %");
+ setLegend(2,getColorStop(250),"25 %");
+ setLegend(3,getColorStop(600),"60 %");
+ setLegend(4,getColorStop(1000),"100 %");
+ setLegend(5,"white","N/A");
+}
diff --git a/web/nms.gathering.org/js/nms-map.js b/web/nms.gathering.org/js/nms-map.js
index 9bba1bf..c64a387 100644
--- a/web/nms.gathering.org/js/nms-map.js
+++ b/web/nms.gathering.org/js/nms-map.js
@@ -10,7 +10,8 @@
* nmsMap.setSwitchColor(switch,color)
* nmsMap.setSwitchInfo(switch,info)
* nmsMap.setSwitchHighlight(switch,true/false)
- * nmsMap.removeAllSwitchHighlights()
+ * nmsMap.enableHighlights()
+ * nmsMap.disableHighlights()
*/
@@ -46,21 +47,24 @@ var nmsMap = nmsMap || {
},
_color: { },
+ _linknets: {} ,
_highlight: { },
+ _highlightActive: false,
_c: {}
-}
+};
nmsMap._loadEvent = function(e) {
nmsMap._init = false;
nmsMap._drawAllSwitches();
-}
+};
+
nmsMap.init = function() {
this._initContexts();
this._init = true;
nmsData.addHandler("switches","nmsMap",function(){nmsMap._resizeEvent();});
window.addEventListener('resize',nmsMap._resizeEvent,true);
- document.addEventListener('load',nmsMap._loadEvent,true);
-}
+ window.addEventListener('load',nmsMap._loadEvent,true);
+};
nmsMap.setSwitchColor = function(sw, color) {
if (this._color[sw] != color) {
@@ -70,22 +74,30 @@ nmsMap.setSwitchColor = function(sw, color) {
} else {
this.stats.colorSame++;
}
-}
+};
+
nmsMap.setSwitchHighlight = function(sw, highlight) {
- if(highlight)
- highlight == true;
- if (this._highlight[sw] != highlight) {
- this._highlight[sw] = highlight;
- this._drawSwitch(sw);
- this.stats.highlightChange++;
- }
-}
+ if( highlight )
+ highlight = true;
+ if ( this._highlight[sw] != highlight ) {
+ this.stats.highlightChange++;
+ this._highlight[sw] = highlight;
+ }
+ this._drawSwitch(sw);
+};
+
+
+nmsMap.enableHighlights = function() {
+ this._highlightActive = true;
+};
+
+
+nmsMap.disableHighlights = function() {
+ this._highlightActive = false;
+ this._drawAllSwitches();
+};
-nmsMap.removeAllSwitchHighlights = function() {
- for(var sw in this._highlight)
- this.setSwitchHighlight(sw,false);
-}
nmsMap.reset = function() {
for (var sw in this._color) {
@@ -94,7 +106,7 @@ nmsMap.reset = function() {
for (var sw in this._info) {
nmsMap.setSwitchInfo(sw, undefined);
}
-}
+};
nmsMap.setSwitchInfo = function(sw,info) {
if (this._info[sw] != info) {
@@ -104,19 +116,19 @@ nmsMap.setSwitchInfo = function(sw,info) {
} else {
this.stats.switchInfoSame++;
}
-}
+};
nmsMap._initContext = function(name) {
this._c[name] = {};
this._c[name].c = document.getElementById(name + "Canvas");
this._c[name].ctx = this._c[name].c.getContext('2d');
-}
+};
nmsMap._initContexts = function() {
for (var context in this.contexts) {
this._initContext(this.contexts[context]);
}
-}
+};
nmsMap._resizeEvent = function() {
var width = window.innerWidth - nmsMap._c.bg.c.offsetLeft;
@@ -138,16 +150,19 @@ nmsMap._resizeEvent = function() {
continue;
nmsMap._c[a].c.height = nmsMap._canvas.height;
nmsMap._c[a].c.width = nmsMap._canvas.width;
+ if(a == 'bg') {
+ nmsMap._drawBG();
+ }
}
if (nmsMap._init != true) {
- console.log("Drawing shit");
nmsMap._blurDrawn = false;
nmsMap._drawBG();
nmsMap._drawAllSwitches();
+ nmsMap._drawAllLinknets();
nmsMap.drawNow();
nmsMap.stats.resizeEvents++;
}
-}
+};
/*
* Draw current time-window
@@ -157,10 +172,16 @@ nmsMap._resizeEvent = function() {
*
* FIXME: 2: Should really just use _drawText() instead somehow. Font size
* being an issue.
+ *
+ * FIXME 3: Currently assuming that time from api is UTC and converting to
+ * local time zone with js. Should find a more robust solution.
+ *
*/
nmsMap.drawNow = function ()
{
var now = nmsData.now;
+ now = new Date(nmsData.now); //Date assumes UTC
+ now = now.toString().split(' ').splice(1,4).join(' '); //Date returns local time
if (nmsMap._lastNow == now) {
nmsMap.stats.nowDups++;
return;
@@ -175,10 +196,10 @@ nmsMap.drawNow = function ()
ctx.fillStyle = "white";
ctx.strokeStyle = "black";
ctx.lineWidth = nms.fontLineFactor;
- ctx.strokeText(now, 0 + this._settings.textMargin, 25);
- ctx.fillText(now, 0 + this._settings.textMargin, 25);
+ ctx.strokeText(now, this._settings.textMargin, 25);
+ ctx.fillText(now, this._settings.textMargin, 25);
ctx.restore();
-}
+};
nmsMap.setNightMode = function(toggle) {
if (this._nightmode == toggle)
@@ -194,14 +215,14 @@ nmsMap.setNightMode = function(toggle) {
this._c.blur.c.style.display = "";
}
nmsMap._drawBG();
-}
+};
nmsMap._drawBG = function() {
var imageObj = document.getElementById('source');
this._c.bg.ctx.drawImage(imageObj, 0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
if(this._nightmode)
nmsMap._invertBG();
-}
+};
nmsMap._invertBG = function() {
var imageData = this._c.bg.ctx.getImageData(0, 0, nmsMap._canvas.width, nmsMap._canvas.height);
@@ -213,7 +234,7 @@ nmsMap._invertBG = function() {
data[i + 2] = 255 - data[i + 2];
}
this._c.bg.ctx.putImageData(imageData, 0, 0);
-}
+};
nmsMap._getBox = function(sw) {
var box = nmsData.switches.switches[sw]['placement'];
@@ -222,7 +243,7 @@ nmsMap._getBox = function(sw) {
box.width = parseInt(box.width);
box.height = parseInt(box.height);
return box;
-}
+};
nmsMap._drawSwitchBlur = function(sw)
{
@@ -233,10 +254,11 @@ nmsMap._drawSwitchBlur = function(sw)
this._c.blur.ctx.fillStyle = "red";
this._c.blur.ctx.shadowBlur = 30;
this._c.blur.ctx.shadowColor = "white";
- this._c.blur.ctx.scale(this.scale, this.scale); // FIXME
+ this._c.blur.ctx.scale(this.scale, this.scale); // FIXME <- fix what?!
this._c.blur.ctx.fillRect(box['x'],box['y'],box['width'],box['height']);
this._c.blur.ctx.restore();
-}
+};
+
nmsMap._drawSwitch = function(sw)
{
// XXX: If a handler sets a color before switches are loaded... The
@@ -245,8 +267,12 @@ nmsMap._drawSwitch = function(sw)
return;
var box = this._getBox(sw);
var color = nmsMap._color[sw];
- if(nmsMap._highlight[sw]) {
- color = red;
+ if(this._highlightActive) {
+ if(nmsMap._highlight[sw]) {
+ color = green;
+ } else {
+ color = white;
+ }
}
if (color == undefined) {
color = blue;
@@ -255,7 +281,10 @@ nmsMap._drawSwitch = function(sw)
this._drawBox(this._c.switch.ctx, box['x'],box['y'],box['width'],box['height']);
this._c.switch.ctx.shadowBlur = 0;
this._drawText(this._c.text.ctx, sw,box);
-}
+
+ if(this._info[sw])
+ this._drawSwitchInfo(sw);
+};
nmsMap._drawSwitchInfo = function(sw) {
var box = this._getBox(sw);
@@ -264,14 +293,14 @@ nmsMap._drawSwitchInfo = function(sw) {
} else {
this._drawText(this._c.textInfo.ctx, this._info[sw], box, "right");
}
-}
+};
nmsMap._clearBox = function(ctx,box) {
ctx.save();
ctx.scale(this.scale,this.scale);
ctx.clearRect(box['x'], box['y'], box['width'], box['height']);
ctx.restore();
-}
+};
nmsMap._drawText = function(ctx, text, box, align) {
var rotate = false;
@@ -307,8 +336,42 @@ nmsMap._drawText = function(ctx, text, box, align) {
ctx.strokeText(text, 0, 0);
ctx.fillText(text, 0, 0);
ctx.restore();
-}
+};
+nmsMap._setLinknetColor = function(l, color1, color2)
+{
+ var oldcolor1;
+ var oldcolor2;
+ try {
+ oldcolor1 = nmsMap._linknets[l].sysname1;
+ oldcolor2 = nmsMap._linknets[l].sysname2;
+ if (oldcolor1 == color1 && oldcolor2 == color2) {
+ return ;
+ }
+ } catch (e) {}
+ nmsMap._linknets[l] = {};
+ nmsMap._linknets[l].sysname1 = color1;
+ nmsMap._linknets[l].sysname2 = color2;
+ nmsMap._drawLinknet(l)
+}
+
+nmsMap._drawLinknet = function(l) {
+ try {
+ var color1 = blue;
+ var color2 = blue;
+ try {
+ color1 = nmsMap._linknets[l].sysname1;
+ color2 = nmsMap._linknets[l].sysname2;
+ } catch(e) { }
+ nmsMap._connectSwitches(nmsData.switches.linknets[l].sysname1, nmsData.switches.linknets[l].sysname2, color1, color2);
+ } catch(e) { }
+}
+
+nmsMap._drawAllLinknets = function() {
+ for (var l in nmsData.switches.linknets) {
+ nmsMap._drawLinknet(l);
+ }
+}
nmsMap._drawAllSwitches = function() {
if (nmsData.switches == undefined) {
this.stats.earlyDrawAll++;
@@ -319,7 +382,7 @@ nmsMap._drawAllSwitches = function() {
}
if (this._nightmode)
this._drawAllBlur();
-}
+};
nmsMap._drawAllBlur = function() {
if (nmsMap._blurDrawn == true)
@@ -328,22 +391,22 @@ nmsMap._drawAllBlur = function() {
for (var sw in nmsData.switches.switches) {
nmsMap._drawSwitchBlur(sw);
}
-}
+};
nmsMap._drawBox = function(ctx, x, y, boxw, boxh) {
ctx.save();
- ctx.scale(this.scale, this.scale); // FIXME
+ ctx.scale(this.scale, this.scale); // FIXME <- what?!
ctx.fillRect(x,y, boxw, boxh);
ctx.lineWidth = 1;
ctx.strokeStyle = "#000000";
ctx.strokeRect(x,y, boxw, boxh);
ctx.restore();
-}
+};
nmsMap._connectSwitches = function(sw1, sw2, color1, color2) {
nmsMap._connectBoxes(this._getBox(sw1), this._getBox(sw2),
color1, color2);
-}
+};
/*
* Draw a line between two boxes, with a gradient going from color1 to
@@ -365,18 +428,20 @@ nmsMap._connectBoxes = function(box1, box2,color1, color2) {
gradient.addColorStop(0, color1);
gradient.addColorStop(1, color2);
ctx.strokeStyle = gradient;
+ ctx.beginPath();
ctx.moveTo(x0,y0);
ctx.lineTo(x1,y1);
ctx.lineWidth = 5;
ctx.stroke();
+ ctx.closePath();
ctx.restore();
-}
+};
nmsMap.moveSet = function(toggle) {
nmsMap._moveInProgress = toggle;
if (!toggle)
nmsMap._moveStopListen();
-}
+};
/*
* onclick handler for the canvas.
@@ -392,8 +457,10 @@ nmsMap.canvasClick = function(e)
} else {
nmsInfoBox.click(sw);
}
+ } else {
+ nmsInfoBox.hide();
}
-}
+};
nmsMap._clearOld = function(box) {
if (box) {
@@ -403,7 +470,7 @@ nmsMap._clearOld = function(box) {
nmsMap._c.top.ctx.clearRect(box['x'] - 5, box['y'] - 5, box['width'] + 10, box['height'] + 10);
nmsMap._c.top.ctx.restore();
}
-}
+};
nmsMap._moveMove = function(e) {
nmsMap._moveX = (e.pageX - e.target.offsetLeft) / nmsMap.scale;
@@ -421,28 +488,29 @@ nmsMap._moveMove = function(e) {
nmsMap._c.top.ctx.fillStyle = "red";
nmsMap._drawBox(nmsMap._c.top.ctx, box['x'], box['y'], box['width'], box['height']);
nmsMap._c.top.ctx.restore();
-}
+};
nmsMap._moveSubmit = function() {
var data = {
sysname: nmsMap._moving,
placement: nmsMap._moveOldBox
- }
+ };
var myData = JSON.stringify([data]);
$.ajax({
type: "POST",
- url: "/api/private/switch-add",
+ url: "/api/write/switch-update",
dataType: "text",
data:myData,
success: function (data, textStatus, jqXHR) {
nmsData.invalidate("switches");
}
});
-}
+};
+
nmsMap._moveStopListen = function() {
nmsMap._c.input.c.removeEventListener('mousemove',nmsMap._moveMove, true);
nmsMap._c.input.c.removeEventListener('mouseup',nmsMap._moveDone, true);
-}
+};
nmsMap._moveDone = function(e) {
nmsMap._moveStopListen();
@@ -451,7 +519,7 @@ nmsMap._moveDone = function(e) {
}
nmsMap._moveSubmit();
nmsMap._clearOld(nmsMap._moveOldBox);
-}
+};
nmsMap._moveStart = function(sw, e)
{
@@ -462,7 +530,7 @@ nmsMap._moveStart = function(sw, e)
nmsMap._moveBox = nmsData.switches.switches[sw].placement;
nmsMap._c.input.c.addEventListener('mousemove',nmsMap._moveMove,true);
nmsMap._c.input.c.addEventListener('mouseup',nmsMap._moveDone,true);
-}
+};
/*
diff --git a/web/nms.gathering.org/js/nms.js b/web/nms.gathering.org/js/nms.js
index 1270a7f..0c4790c 100644
--- a/web/nms.gathering.org/js/nms.js
+++ b/web/nms.gathering.org/js/nms.js
@@ -17,7 +17,8 @@ var nms = {
*/
timers: {
playback:false,
- },
+ tvmode: false
+ },
menuShowing:true,
/*
@@ -29,7 +30,7 @@ var nms = {
'menuShowing'
],
keyBindings:{
- '?':toggleMenu,
+ '-':toggleMenu,
'n':toggleNightMode,
'1':setMapModeFromN,
'2':setMapModeFromN,
@@ -38,12 +39,17 @@ var nms = {
'5':setMapModeFromN,
'6':setMapModeFromN,
'7':setMapModeFromN,
+ '8':setMapModeFromN,
+ '9':setMapModeFromN,
+ 'c':toggleConnect,
'h':moveTimeFromKey,
'j':moveTimeFromKey,
'k':moveTimeFromKey,
'l':moveTimeFromKey,
'p':moveTimeFromKey,
- 'r':moveTimeFromKey
+ 'r':moveTimeFromKey,
+ 'Escape':hideWindow,
+ '?':toggleHelp
},
/*
* Playback controllers and variables
@@ -54,7 +60,16 @@ var nms = {
playing: false,
replayTime: 0,
replayIncrement: 60 * 60
- }
+ },
+ tvmode: {
+ handlers: [],
+ currentIndex: 0,
+ interval: 20000,
+ hideMenu: false,
+ active: false,
+ nightMode: false,
+ vertical: false
+ }
};
/*
@@ -82,7 +97,7 @@ function nmsTimer(handler, interval, name, description) {
};
this.setInterval = function(interval) {
- var started = this.handle == false ? false : true;
+ var started = this.handle != false;
this.stop();
this.interval = parseInt(interval);
if (started)
@@ -95,14 +110,16 @@ function nmsTimer(handler, interval, name, description) {
* Convenience function that doesn't support huge numbers, and it's easier
* to comment than to fix. But not really, but I'm not fixing it anyway.
*/
-function byteCount(bytes) {
+function byteCount(bytes,precision) {
+ if (precision ==undefined)
+ precision = 1;
var units = ['', 'K', 'M', 'G', 'T', 'P'];
var i = 0;
while (bytes > 1024) {
bytes = bytes / 1024;
i++;
}
- return bytes.toFixed(1) + units[i];
+ return bytes.toFixed(precision) + units[i];
}
/*
@@ -160,27 +177,27 @@ function stringToEpoch(t)
function epochToString(t)
{
// Adjust for timezone when converting from epoch (UTC) to string (local)
- var d = new Date(parseInt(t) * parseInt(1000));
- var timezoneOffset = d.getTimezoneOffset() * -60;
+ var date = new Date(parseInt(t) * parseInt(1000));
+ var timezoneOffset = date.getTimezoneOffset() * -60;
t = t - timezoneOffset;
- var d = new Date(parseInt(t) * parseInt(1000));
- var str = d.getFullYear() + "-";
- if (parseInt(d.getMonth()) < 9)
+ date = new Date(parseInt(t) * parseInt(1000));
+ var str = date.getFullYear() + "-";
+ if (parseInt(date.getMonth()) < 9)
str += "0";
- str += (parseInt(d.getMonth())+1) + "-";
- if (d.getDate() < 10)
+ str += (parseInt(date.getMonth())+1) + "-";
+ if (date.getDate() < 10)
str += "0";
- str += d.getDate() + "T";
- if (d.getHours() < 10)
+ str += date.getDate() + "T";
+ if (date.getHours() < 10)
str += "0";
- str += d.getHours() + ":";
- if (d.getMinutes() < 10)
+ str += date.getHours() + ":";
+ if (date.getMinutes() < 10)
str += "0";
- str += d.getMinutes() + ":";
- if (d.getSeconds() < 10)
+ str += date.getMinutes() + ":";
+ if (date.getSeconds() < 10)
str += "0";
- str += d.getSeconds();
+ str += date.getSeconds();
return str;
}
@@ -205,7 +222,7 @@ nms.playback.startReplay = function(startTime,stopTime) {
nms.playback.stopTime = stringToEpoch(stopTime);
nms.now = epochToString(nms.playback.startTime);
nms.playback.play();
-}
+};
/*
* Pause playback
@@ -213,7 +230,7 @@ nms.playback.startReplay = function(startTime,stopTime) {
nms.playback.pause = function() {
nms.timers.playback.stop();
nms.playback.playing = false;
-}
+};
/*
* Start playback
@@ -222,7 +239,7 @@ nms.playback.play = function() {
nms.playback.tick();
nms.timers.playback.start();
nms.playback.playing = true;
-}
+};
/*
* Toggle playback
@@ -233,19 +250,18 @@ nms.playback.toggle = function() {
} else {
nms.playback.play();
}
-}
+};
/*
* Jump to place in time
*/
nms.playback.setNow = function(now) {
- var now = parseNow(now);
- nms.now = now;
+ nms.now = parseNow(now);
nms.playback.stopTime = false;
nms.playback.startTime = false;
nms.playback.tick();
-}
+};
/*
* Step forwards or backwards in timer
@@ -258,7 +274,7 @@ nms.playback.stepTime = function(n)
if(!nms.playback.playing)
nms.playback.tick();
-}
+};
/*
* Ticker to trigger updates, and advance time if replaying
@@ -286,7 +302,7 @@ nms.playback.tick = function()
if(nms.now !== false && nms.playback.playing) {
nms.playback.stepTime(nms.playback.replayIncrement);
}
-}
+};
/*
* Helper function for safely getting a valid now-epoch
@@ -307,13 +323,64 @@ function getNowEpoch() {
*/
function setLegend(x,color,name)
{
- var el = document.getElementById("legend-" + x);
+ if(nms.tvmode.active) {
+ var el = document.getElementById("tv-mode-legend-" + x);
+ } else {
+ var el = document.getElementById("legend-" + x);
+ }
el.style.background = color;
el.title = name;
el.textContent = name;
}
/*
+ * Start TV-mode
+ *
+ * Loops trough a list of views/updaters at a set interval.
+ * Arguments: array of views, interval in seconds, use nightmode, hide menus
+ */
+nms.tvmode.start = function(views,interval,nightMode,hideMenus,displayVertical) {
+ nms.tvmode.handlers = [];
+ for(var view in views) {
+ for(var handler in handlers) {
+ if(views[view] == handlers[handler].tag) {
+ nms.tvmode.handlers.push(handlers[handler]);
+ }
+ }
+ }
+ if (nms.tvmode.handlers.length > 1) {
+ if(interval > 0)
+ nms.tvmode.interval = interval * 1000;
+ setNightMode(nightMode);
+ if(nms.menuShowing && hideMenus)
+ toggleMenu();
+ if(displayVertical)
+ nms.tvmode.vertical = true;
+ nms.timers.tvmode = new nmsTimer(nms.tvmode.tick, nms.tvmode.interval, "TV-mode ticker", "Handler used to advance tv-mode");
+ nms.timers.tvmode.start();
+ nms.tvmode.tick();
+ nms.tvmode.active = true;
+
+ document.body.classList.add("tvmode");
+ if(nms.tvmode.vertical)
+ document.body.classList.add("vertical");
+ }
+}
+nms.tvmode.tick = function() {
+ if(nms.tvmode.currentIndex > nms.tvmode.handlers.length - 1) {
+ nms.tvmode.currentIndex = 0;
+ }
+ setUpdater(nms.tvmode.handlers[nms.tvmode.currentIndex]);
+ nms.tvmode.currentIndex++;
+}
+nms.tvmode.stop = function() {
+ nms.timers.tvmode.stop();
+ document.body.classList.remove("tvmode");
+ document.body.classList.remove("vertical");
+ nms.tvmode.active = false;
+}
+
+/*
* Change map handler (e.g., change from uplink map to ping map)
*/
function setUpdater(fo)
@@ -333,6 +400,8 @@ function setUpdater(fo)
}
var foo = document.getElementById("updater_name");
foo.innerHTML = fo.name + " ";
+ var foo = document.getElementById("map-mode-title");
+ foo.innerHTML = fo.name;
document.location.hash = fo.tag;
}
@@ -344,6 +413,10 @@ function toggleLayer(layer) {
l.style.display = 'none';
}
+function toggleConnect() {
+ toggleLayer("linkCanvas");
+}
+
function commentInactive(id)
{
commentChange(id,"inactive");
@@ -375,7 +448,7 @@ function commentChange(id,state)
myData = JSON.stringify(myData);
$.ajax({
type: "POST",
- url: "/api/private/comment-change",
+ url: "/api/write/comment-change",
dataType: "text",
data:myData,
success: function (data, textStatus, jqXHR) {
@@ -393,7 +466,7 @@ function addComment(sw,comment)
myData = JSON.stringify(myData);
$.ajax({
type: "POST",
- url: "/api/private/comment-add",
+ url: "/api/write/comment-add",
dataType: "text",
data:myData,
success: function (data, textStatus, jqXHR) {
@@ -410,11 +483,7 @@ function addComment(sw,comment)
*/
function isIn(box, x, y)
{
- if ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height))) {
- return true;
- }
- return false;
-
+ return ((x >= box.x) && (x <= (box.x + box.width)) && (y >= box.y) && (y <= (box.y + box.height)));
}
/*
@@ -445,8 +514,10 @@ function setNightMode(toggle) {
var nav = document.getElementsByTagName("nav")[0];
if (toggle) {
nav.classList.add('navbar-inverse');
+ document.body.classList.add("nightmode");
} else {
nav.classList.remove('navbar-inverse');
+ document.body.classList.remove("nightmode");
}
nmsMap.setNightMode(toggle);
}
@@ -465,6 +536,8 @@ function initNMS() {
nmsData.registerSource("ping", "/api/public/ping");
nmsData.registerSource("switches","/api/public/switches");
nmsData.registerSource("switchstate","/api/public/switch-state");
+ nmsData.registerSource("dhcpsummary","/api/public/dhcp-summary");
+ nmsData.registerSource("dhcp","/api/public/dhcp");
// This is a magic dummy-source, it's purpose is to give a unified
// way to get ticks every second. It is mainly meant to allow map
@@ -474,26 +547,56 @@ function initNMS() {
nmsData.registerSource("ticker","bananabananbanana");
// Private
- nmsData.registerSource("snmp","/api/private/snmp");
- nmsData.registerSource("comments", "/api/private/comments");
- nmsData.registerSource("smanagement","/api/private/switches-management");
+ nmsData.registerSource("snmp","/api/read/snmp");
+ nmsData.registerSource("comments", "/api/read/comments");
+ nmsData.registerSource("smanagement","/api/read/switches-management");
restoreSettings();
nmsMap.init();
detectHandler();
nms.playback.play();
setupKeyhandler();
+ setupSearchKeyHandler();
}
function detectHandler() {
- var url = document.URL;
for (var i in handlers) {
if (('#' + handlers[i].tag) == document.location.hash) {
setUpdater(handlers[i]);
return;
}
}
- setUpdater(handler_ping);
+ if(document.location.hash == "#tvmode") {
+ var views = getUrlVars()["views"];
+ var nightMode = parseInt(getUrlVars()["nightmode"]);
+ var vertical = parseInt(getUrlVars()["vertical"]);
+ var interval = parseInt(getUrlVars()["interval"]);
+
+ views = views.split(",");
+ if(nightMode == "0") {
+ nightMode = false;
+ } else {
+ nightMode = true;
+ }
+ if(vertical == 1) {
+ vertical = true;
+ } else {
+ vertical = false;
+ }
+
+ nms.tvmode.start(views,interval,nightMode,true,vertical);
+ return;
+ } else {
+ setUpdater(handler_ping);
+ }
+}
+
+function getUrlVars() {
+ var vars = {};
+ var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
+ vars[key] = value;
+ });
+ return vars;
}
function setMenu()
@@ -508,6 +611,13 @@ function toggleMenu()
setMenu();
saveSettings();
}
+function hideWindow(e,key)
+{
+ nmsInfoBox.hide();
+}
+function toggleHelp(e,key) {
+ toggleLayer('aboutKeybindings');
+}
function setMapModeFromN(e,key)
{
@@ -519,18 +629,24 @@ function setMapModeFromN(e,key)
setUpdater(handler_uplinks);
break;
case '3':
- setUpdater(handler_temp);
+ setUpdater(handler_dhcp);
break;
case '4':
- setUpdater(handler_traffic);
+ setUpdater(handler_comment);
break;
case '5':
- setUpdater(handler_comment);
+ setUpdater(handler_temp);
break;
case '6':
- setUpdater(handler_traffic_tot);
+ setUpdater(handler_traffic);
break;
case '7':
+ setUpdater(handler_traffic_tot);
+ break;
+ case '8':
+ setUpdater(handler_snmp);
+ break;
+ case '9':
setUpdater(handler_disco);
break;
}
@@ -568,7 +684,26 @@ function keyPressed(e)
if (e.target.nodeName == "INPUT") {
return false;
}
- var key = String.fromCharCode(e.keyCode);
+ if(e.key) {
+ var key = e.key;
+ } else {
+ var key = e.keyCode;
+ switch(key) {
+ case 187:
+ key = '?';
+ break;
+ case 189:
+ key = '-';
+ break;
+ case 27:
+ key = 'Escape';
+ break;
+ default:
+ key = String.fromCharCode(key);
+ key = key.toLowerCase();
+ break;
+ }
+ }
if (nms.keyBindings[key])
return nms.keyBindings[key](e,key);
if (nms.keyBindings['default'])
@@ -579,7 +714,16 @@ function keyPressed(e)
function setupKeyhandler()
{
var b = document.getElementsByTagName("body")[0];
- b.onkeypress = function(e){keyPressed(e);};
+ $( "body" ).keyup(function(e) {
+ keyPressed(e);
+ });
+}
+
+function setupSearchKeyHandler()
+{
+ $("#searchbox").keyup(function(e) {
+ nmsInfoBox._searchKeyListener(e);
+ });
}
@@ -599,8 +743,8 @@ function getCookie(cname) {
function saveSettings()
{
var foo={};
- for (var v in nms.settingsList) {
- foo[nms.settingsList[v]] = nms[nms.settingsList[v]];
+ for ( var v in nms.settingsList ) {
+ foo[ nms.settingsList[v] ] = nms[ nms.settingsList[v] ];
}
document.cookie = 'nms='+btoa(JSON.stringify(foo));
}
diff --git a/web/stats.gathering.org/index.html b/web/stats.gathering.org/index.html
index 7bd8b7c..9455945 100644
--- a/web/stats.gathering.org/index.html
+++ b/web/stats.gathering.org/index.html
@@ -1,23 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
-<title>stats.tg15.gathering..org</title>
+<title>stats.tg16.gathering..org</title>
<style type="text/css">
@import url(index.css);
</style>
</head>
<body>
-<h1>stats.tg15.gathering.org</h1>
+<h1>stats.tg16.gathering.org</h1>
<br />
<ul id="menu">
- <li><a href="http://nms-public.tg15.gathering.org/weathermap.pl">Weathermap</a></li>
- <li><a href="http://funfact.tg15.gathering.org/">Internet utilization</a></li>
- <li><a href="http://nms-public.tg15.gathering.org/dhcpkart.html">DHCP-map</a></li>
- <li><a href="http://nms-public.tg15.gathering.org/ping.html">Ping live!</a></li>
- <li><a href="http://nms-public.tg15.gathering.org/tempkart.html">Tempkart</a></li>
- <li><a href="http://nms-public.tg15.gathering.org/ping2.html">Switchtrafikk live!</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/">Public NMS</a></li>
+ <li><a href="https://github.com/tech-server/tgmanage/blob/master/web/nms.gathering.org/api/API.rst">Public NMS API documentation</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/api/public/ping/">NMS API: ping</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/api/public/switches/">NMS API: switches</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/api/public/switch-state/">NMS API: switch-state</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/api/public/dhcp/">NMS API: dhcp</a></li>
+ <li><a href="https://nms-public.tg16.gathering.org/api/public/dhcp-summary/">NMS API: dhcp-summary</a></li>
+</ul>
+
+<br />
+<br />
+<br />
+<br />
+
+<h2>third-party stats (using NMS API)</h1>
+<br />
+<ul id="menu">
+ <li><a href="http://tg16.sorlanet.net/TG16.html">Weathermap</a></li>
+ <li><a href="http://live.tg16.sorlanet.net">Live network stats</a></li>
+ <li><a href="http://monitor.tg16.sorlanet.net">Switch Graphs</a></li>
</ul>
<br />