├── static
├── job.log
├── img
│ ├── logo.png
│ ├── loading.gif
│ ├── MIT_logo.svg.png
│ └── mit_csail_logo.png
├── font-awesome-4.7.0
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ └── fontawesome-webfont.woff2
│ ├── less
│ │ ├── screen-reader.less
│ │ ├── fixed-width.less
│ │ ├── larger.less
│ │ ├── list.less
│ │ ├── core.less
│ │ ├── stacked.less
│ │ ├── font-awesome.less
│ │ ├── bordered-pulled.less
│ │ ├── rotated-flipped.less
│ │ ├── path.less
│ │ ├── animated.less
│ │ ├── mixins.less
│ │ └── variables.less
│ ├── scss
│ │ ├── _fixed-width.scss
│ │ ├── _screen-reader.scss
│ │ ├── _larger.scss
│ │ ├── _list.scss
│ │ ├── _core.scss
│ │ ├── font-awesome.scss
│ │ ├── _stacked.scss
│ │ ├── _bordered-pulled.scss
│ │ ├── _rotated-flipped.scss
│ │ ├── _path.scss
│ │ ├── _animated.scss
│ │ ├── _mixins.scss
│ │ └── _variables.scss
│ └── HELP-US-OUT.txt
└── css
│ ├── multiselect.css
│ ├── d3_visualization.css
│ ├── style.css
│ └── bootstrap.css
├── database_temp.ini
├── datasets
├── shuttle.mat
└── annthyroid.mat
├── screenshots
├── input.png
├── results.jpg
└── architecture.jpg
├── .gitignore
├── requirements.txt
├── templates
├── running_logs.html
├── result_summary.html
├── about.html
├── index.html
└── form.html
├── config.py
├── autood_parameters.py
├── README.md
├── connect.py
├── results
├── results_spambase_csv_1659113854.csv
├── results_spambase_csv_1659116425.csv
├── log_spambase_csv_csv_1659980531
├── log_spambase_csv_csv_1659980693
├── log_spambase_csv_csv_1659113854
└── log_spambase_csv_csv_1659116425
└── app.py
/static/job.log:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/database_temp.ini:
--------------------------------------------------------------------------------
1 | [postgresql]
2 | host=
3 | database=
4 | user=
5 | password=
--------------------------------------------------------------------------------
/datasets/shuttle.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/datasets/shuttle.mat
--------------------------------------------------------------------------------
/static/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/logo.png
--------------------------------------------------------------------------------
/screenshots/input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/input.png
--------------------------------------------------------------------------------
/static/img/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/loading.gif
--------------------------------------------------------------------------------
/datasets/annthyroid.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/datasets/annthyroid.mat
--------------------------------------------------------------------------------
/screenshots/results.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/results.jpg
--------------------------------------------------------------------------------
/static/img/MIT_logo.svg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/MIT_logo.svg.png
--------------------------------------------------------------------------------
/screenshots/architecture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/architecture.jpg
--------------------------------------------------------------------------------
/static/img/mit_csail_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/mit_csail_logo.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | database.ini
2 | data/
3 | domo_visualization_old/
4 | experiments/
5 | files/
6 | AutoOD_demo.code-workspace
7 | __pycache__/
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/screen-reader.less:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { .sr-only(); }
5 | .sr-only-focusable { .sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==2.0.3
2 | Flask_Navigation==0.2.0
3 | loguru==0.5.3
4 | numpy==1.22.3
5 | pandas==1.4.2
6 | psycopg2==2.9.3
7 | scikit_learn==1.1.2
8 | scipy==1.7.3
9 | Werkzeug==2.0.3
10 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_screen-reader.scss:
--------------------------------------------------------------------------------
1 | // Screen Readers
2 | // -------------------------
3 |
4 | .sr-only { @include sr-only(); }
5 | .sr-only-focusable { @include sr-only-focusable(); }
6 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/HELP-US-OUT.txt:
--------------------------------------------------------------------------------
1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project,
2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome,
3 | comprehensive icon sets or copy and paste your own.
4 |
5 | Please. Check it out.
6 |
7 | -Dave Gandy
8 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "animated";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 | @import "screen-reader";
19 |
--------------------------------------------------------------------------------
/templates/running_logs.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AutoOD: Automatic Outlier Detection
6 |
7 |
8 |
9 |
AutoOD Running Logs:
10 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | from configparser import ConfigParser
2 |
3 |
4 | def config(filename='database.ini', section='postgresql'):
5 | # create a parser
6 | parser = ConfigParser()
7 | # read config file
8 | parser.read(filename)
9 |
10 | # get section, default to postgresql
11 | db = {}
12 | if parser.has_section(section):
13 | params = parser.items(section)
14 | for param in params:
15 | db[param[0]] = param[1]
16 | else:
17 | raise Exception('Section {0} not found in the {1} file'.format(section, filename))
18 |
19 | return db
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "animated.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 | @import "screen-reader.less";
19 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .@{fa-css-prefix}-pull-left { float: left; }
11 | .@{fa-css-prefix}-pull-right { float: right; }
12 |
13 | .@{fa-css-prefix} {
14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .@{fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .#{$fa-css-prefix}-pull-left { float: left; }
11 | .#{$fa-css-prefix}-pull-right { float: right; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
16 | }
17 |
18 | /* Deprecated as of 4.4.0 */
19 | .pull-right { float: right; }
20 | .pull-left { float: left; }
21 |
22 | .#{$fa-css-prefix} {
23 | &.pull-left { margin-right: .3em; }
24 | &.pull-right { margin-left: .3em; }
25 | }
26 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
13 | font-weight: normal;
14 | font-style: normal;
15 | }
16 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/animated.less:
--------------------------------------------------------------------------------
1 | // Animated Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .@{fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_animated.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | .#{$fa-css-prefix}-pulse {
10 | -webkit-animation: fa-spin 1s infinite steps(8);
11 | animation: fa-spin 1s infinite steps(8);
12 | }
13 |
14 | @-webkit-keyframes fa-spin {
15 | 0% {
16 | -webkit-transform: rotate(0deg);
17 | transform: rotate(0deg);
18 | }
19 | 100% {
20 | -webkit-transform: rotate(359deg);
21 | transform: rotate(359deg);
22 | }
23 | }
24 |
25 | @keyframes fa-spin {
26 | 0% {
27 | -webkit-transform: rotate(0deg);
28 | transform: rotate(0deg);
29 | }
30 | 100% {
31 | -webkit-transform: rotate(359deg);
32 | transform: rotate(359deg);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/autood_parameters.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 | from typing import List
3 |
4 |
5 | @dataclass
6 | class AutoODDefaultParameters:
7 | dataset: str
8 | k_range: List[int]
9 | if_range: List[float]
10 | N_range: List[int]
11 |
12 |
13 | autood_datasets_to_parameters = {
14 | "pageblocks": AutoODDefaultParameters(
15 | dataset="PageBlocks",
16 | k_range=list(range(10, 110, 10)),
17 | if_range=[0.5, 0.6, 0.7, 0.8, 0.9],
18 | N_range=[0.05, 0.07, 0.09, 0.11, 0.13, 0.15]
19 | )
20 | }
21 |
22 |
23 | def get_default_parameters(dataset):
24 | if dataset in autood_datasets_to_parameters:
25 | return autood_datasets_to_parameters[dataset]
26 | return AutoODDefaultParameters(
27 | dataset=dataset,
28 | k_range=list(range(10, 110, 10)),
29 | if_range=[0.5, 0.6, 0.7, 0.8, 0.9],
30 | N_range=[0.05, 0.07, 0.09, 0.11, 0.13, 0.15]
31 | )
--------------------------------------------------------------------------------
/static/css/multiselect.css:
--------------------------------------------------------------------------------
1 |
2 | .multiselect-container {
3 | position: absolute;
4 | list-style-type: none;
5 | margin: 0;
6 | padding: 0
7 | }
8 |
9 | .multiselect-container .input-group {
10 | margin: 5px
11 | }
12 |
13 | .multiselect-container > li {
14 | padding: 0
15 | }
16 |
17 | .multiselect-container > li > a.multiselect-all label {
18 | font-weight: 700
19 | }
20 |
21 | .multiselect-container > li.multiselect-group label {
22 | margin: 0;
23 | padding: 3px 20px 3px 20px;
24 | height: 100%;
25 | font-weight: 700
26 | }
27 |
28 | .multiselect-container > li.multiselect-group-clickable label {
29 | cursor: pointer
30 | }
31 |
32 | .multiselect-container > li > a {
33 | padding: 0
34 | }
35 |
36 | .multiselect-container > li > a > label {
37 | margin: 0;
38 | height: 100%;
39 | cursor: pointer;
40 | font-weight: 400;
41 | padding: 3px 20px 3px 40px
42 | }
43 |
44 | .multiselect-container > li > a > label.radio, .multiselect-container > li > a > label.checkbox {
45 | margin: 0
46 | }
47 |
48 | .multiselect-container > li > a > label > input[type=checkbox] {
49 | margin-bottom: 5px
50 | }
51 |
52 | .btn-group > .btn-group:nth-child(2) > .multiselect.btn {
53 | border-top-left-radius: 4px;
54 | border-bottom-left-radius: 4px
55 | }
56 |
57 | .form-inline .multiselect-container label.checkbox, .form-inline .multiselect-container label.radio {
58 | padding: 3px 20px 3px 40px
59 | }
60 |
61 | .form-inline .multiselect-container li a label.checkbox input[type=checkbox], .form-inline .multiselect-container li a label.radio input[type=radio] {
62 | margin-left: -20px;
63 | margin-right: 0
64 | }
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | .fa-icon-rotate(@degrees, @rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})";
16 | -webkit-transform: rotate(@degrees);
17 | -ms-transform: rotate(@degrees);
18 | transform: rotate(@degrees);
19 | }
20 |
21 | .fa-icon-flip(@horiz, @vert, @rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)";
23 | -webkit-transform: scale(@horiz, @vert);
24 | -ms-transform: scale(@horiz, @vert);
25 | transform: scale(@horiz, @vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | .sr-only() {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | .sr-only-focusable() {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 |
12 | }
13 |
14 | @mixin fa-icon-rotate($degrees, $rotation) {
15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
16 | -webkit-transform: rotate($degrees);
17 | -ms-transform: rotate($degrees);
18 | transform: rotate($degrees);
19 | }
20 |
21 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
23 | -webkit-transform: scale($horiz, $vert);
24 | -ms-transform: scale($horiz, $vert);
25 | transform: scale($horiz, $vert);
26 | }
27 |
28 |
29 | // Only display content to screen readers. A la Bootstrap 4.
30 | //
31 | // See: http://a11yproject.com/posts/how-to-hide-content/
32 |
33 | @mixin sr-only {
34 | position: absolute;
35 | width: 1px;
36 | height: 1px;
37 | padding: 0;
38 | margin: -1px;
39 | overflow: hidden;
40 | clip: rect(0,0,0,0);
41 | border: 0;
42 | }
43 |
44 | // Use in conjunction with .sr-only to only display content when it's focused.
45 | //
46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
47 | //
48 | // Credit: HTML5 Boilerplate
49 |
50 | @mixin sr-only-focusable {
51 | &:active,
52 | &:focus {
53 | position: static;
54 | width: auto;
55 | height: auto;
56 | margin: 0;
57 | overflow: visible;
58 | clip: auto;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # A Demonstration of AutoOD: A Self-Tuning Anomaly Detection System
2 |
3 | ## About AutoOD:
4 | AutoOD is a self-tuning anomaly detection system to address the challenges of method selection and hyper-parameter tuning while remaining unsupervised. AutoOD frees users from the tedious manual tuning process often required for anomaly detection by intelligently identifying high likelihood inliers and outliers. AutoOD features a responsive visual interface allowing for seamless user interaction providing the user with insightful knowledge of how AutoOD operates.
5 |
6 | AutoOD outperforms the best unsupervised anomaly detection methods, yielding results similar to supervised methods that have access to ground truth labels.
7 |
8 | This work has been accepted for publication at VLDB 2022 (48th International Conference on Very Large Databases) one of the most prestigious conferences in database systems. https://dl.acm.org/doi/abs/10.14778/3554821.3554880
9 |
10 | Current hosted version: https://autood.wpi.edu/
11 |
12 | This work was supported in part by NSF under grants IIS1910880, CSSI-2103832, CNS-1852498, NRT-HDR-1815866 and by
13 | the U.S. Dept. of Education under grant P200A180088.
14 |
15 | ### AutoOD Architecture:
16 | 
17 |
18 |
19 | ### Input Interface:
20 | 
21 | Users can upload data, provide their own anomaly detection methods, specify the column of labels, and customize the expected percentage range of anomalies in their dataset.
22 |
23 | ### Data Analytics Display:
24 | 
25 | Users can filter the chart based on metrics provided and interact with points by hovering over them to view summery statistics. Clicking on a point will provide that respective point's anomaly score for each unsupervised detector and attribute values from the input dataset. In addition, by moving the slider through each iteration, the user can watch the reliable object set change, and at any time select a point to view the contribution of each detector to its status.
26 |
27 | ## Instructions:
28 | To run AutoOD, download the code and fill out the "database_temp.ini" file with the information required to connect to a local PostgreSQL database. Once completed rename the file "database.ini". Now running the command "python app.py" in a terminal at the root of the project directory will lunch AutoOD on a local webserver.
29 |
30 | Python version: 3.9.12
31 | Please see requirements.txt for libraries and their versions
32 |
33 | A hosted web version of AutoOD is coming soon. The link will be provided here.
34 |
--------------------------------------------------------------------------------
/templates/result_summary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | STAND: Self-Tuning Anomaly Detection
4 |
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 | {% for item in nav.top %}
14 |
15 | {{ item.label }}
16 |
17 | {% endfor %}
18 |
19 |
20 |
21 |
22 |
33 |
34 |
37 |
38 | Detection Results
39 |
59 |
60 | {% if final_results %}
61 | Download Final Results:
62 |
68 | {% endif %}
69 |
70 | {% if training_log %}
71 | Download Training Log:
72 |
78 | {% endif %}
79 |
80 |
81 | Results Page
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/templates/about.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {% for item in nav.top %}
6 |
7 | {{ item.label }}
8 |
9 | {% endfor %}
10 |
11 |
12 |
13 | About Page
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | AutoOD: A Self-Tuning Anomaly Detection System
30 |
31 |
32 | About AutoOD:
33 |
34 | AutoOD is a self-tuning anomaly detection system designed to address the challenges of method selection and hyper-parameter tuning while remaining unsupervised.
35 | AutoOD frees users from the tedious manual tuning process often required for anomaly detection by intelligently identifying high likelihood inliers and outliers.
36 | AutoOD features a responsive visual interface allowing for seamless interaction providing the user with insightful knowledge of how AutoOD operates. AutoOD outperforms
37 | the best unsupervised anomaly detection methods, yielding results similar to supervised methods that have access to ground truth labels.
38 |
39 |
40 | This work has been accepted for publication at VLDB 2022 (48th International Conference on Very Large Databases) one of the most prestigious conferences in database systems.
41 |
42 |
43 | Getting Started:
44 | First, upload the dataset you are interested in examining. AutoOD currently accepts CSV and ARFF files. Next, select the unsupervised outlier detection methods you
45 | want to run AutoOD with, and provide the column names for the id column and label column from your dataset. Lastly, input the minimum and maximum percentage range for
46 | the number of outliers you expect are contained within your dataset.
47 |
48 |
49 | The Team: WPI Anomaly Detection
50 |
51 | GitHub AutoOD Demo
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/connect.py:
--------------------------------------------------------------------------------
1 | import pandas as pd
2 | import psycopg2
3 | from config import config
4 | import psycopg2.extras as extras
5 | import numpy as np
6 | from sklearn.manifold import TSNE
7 |
8 | # get data types of our columns
9 | def getColumnDtypes(dataTypes):
10 | dataList = []
11 | for x in dataTypes:
12 | if(x == 'int64'):
13 | dataList.append('int')
14 | elif (x == 'float64'):
15 | dataList.append('float')
16 | elif (x == 'bool'):
17 | dataList.append('boolean')
18 | else:
19 | dataList.append('varchar')
20 | return dataList
21 |
22 | # create input table in DB
23 | def create_input_table(data):
24 | conn = None
25 | try:
26 | # read connection parameters
27 | params = config() # get DB info from config.py
28 |
29 | # connect to the PostgreSQL server
30 | print('Connecting to the PostgreSQL database...')
31 | conn = psycopg2.connect(**params)
32 | cur = conn.cursor() # create a cursor
33 |
34 | cur.execute("""
35 | DROP TABLE
36 | detectors,
37 | predictions,
38 | reliable,
39 | tsne,
40 | input
41 | """)
42 |
43 | cur.execute('CREATE TABLE detectors (id integer, detector text, k integer, n integer, prediction integer, score float);')
44 | cur.execute('CREATE TABLE predictions (id integer, prediction integer, correct integer);')
45 | cur.execute('CREATE TABLE reliable (id integer, iteration integer, reliable integer);')
46 | cur.execute('CREATE TABLE tsne (id integer, tsne1 float, tsne2 float);')
47 |
48 |
49 | columnName = list(data.columns.values)
50 | columnDataType = getColumnDtypes(data.dtypes)
51 | createTableStatement = 'CREATE TABLE IF NOT EXISTS input ('
52 | for i in range(len(columnDataType)):
53 | createTableStatement = createTableStatement + str(columnName[i]) + ' ' + columnDataType[i] + ','
54 | createTableStatement = createTableStatement[:-1] + ' );'
55 | cur.execute(createTableStatement)
56 | conn.commit()
57 | cur.close() # close the communication with the PostgreSQL
58 |
59 | except (Exception, psycopg2.DatabaseError) as error:
60 | print(error)
61 |
62 | finally:
63 | if conn is not None:
64 | conn.close()
65 | print('Database connection closed, inserted successfully.')
66 |
67 |
68 | def insert_input(table, data): # we can use this fucntion to add to our databse. params: table name and values. THen call this functions from autood
69 | """ Takes df, connects to the PostgreSQL database server, uploads to postgres """
70 | conn = None
71 | try:
72 | # read connection parameters
73 | params = config() # get DB info from config.py
74 |
75 | # connect to the PostgreSQL server
76 | print('Connecting to the PostgreSQL database...')
77 | conn = psycopg2.connect(**params)
78 |
79 | cur = conn.cursor() # create a cursor
80 |
81 | cols = ','.join(list(data.columns))
82 | query = "INSERT INTO %s(%s) VALUES %%s" % (table, cols)
83 | tuples = [tuple(x) for x in data.to_numpy()]
84 | extras.execute_values(cur, query, tuples)
85 | conn.commit()
86 | cur.close() # close the communication with the PostgreSQL
87 |
88 | except (Exception, psycopg2.DatabaseError) as error:
89 | print(error)
90 |
91 | finally:
92 | if conn is not None:
93 | conn.close()
94 | print('Database connection closed, inserted successfully.')
95 |
96 | def insert_tsne(table, data, label_col_name, index_col_name):
97 | id = data[index_col_name]
98 | data = data.drop(index_col_name, 1)
99 | data = data.drop(label_col_name, 1)
100 | tsne = TSNE(n_components=2, learning_rate = "auto", perplexity = 5, verbose=1, early_exaggeration = 12, random_state=123) # perplexity for pagblocks: 30
101 | fit = tsne.fit_transform(data)
102 | fit_df = pd.DataFrame()
103 | fit_df["id"] = id
104 | fit_df["tsne1"] = fit[:,0]
105 | fit_df["tsne2"] = fit[:,1]
106 | insert_input(table, fit_df)
107 |
108 |
109 |
110 |
111 |
112 |
113 | # if __name__ == '__main__':
114 | # connect()
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {% for item in nav.top %}
6 |
7 | {{ item.label }}
8 |
9 | {% endfor %}
10 |
11 |
12 |
13 | AutoOD Results
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | Reliable Label:
33 |
34 |
35 |
36 |
37 |
38 |
Reliable labels by iteration
39 |
40 |
41 |
42 |
43 |
44 |
Filtering:
45 |
46 |
47 |
48 | Metric:
49 |
50 |
51 |
52 | Label:
53 |
54 |
55 |
56 | Correct Prediction?:
57 |
58 |
59 |
60 |
61 |
62 | Inlier
63 | Outlier
64 |
65 |
66 |
67 |
68 |
69 |
73 |
74 |
75 |
76 |
98 |
99 |
100 |
101 |
102 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/results/results_spambase_csv_1659113854.csv:
--------------------------------------------------------------------------------
1 | ,0
2 | 0,0
3 | 1,0
4 | 2,0
5 | 3,0
6 | 4,0
7 | 5,1
8 | 6,1
9 | 7,1
10 | 8,0
11 | 9,1
12 | 10,0
13 | 11,0
14 | 12,1
15 | 13,1
16 | 14,0
17 | 15,0
18 | 16,0
19 | 17,1
20 | 18,0
21 | 19,0
22 | 20,0
23 | 21,0
24 | 22,0
25 | 23,1
26 | 24,0
27 | 25,1
28 | 26,1
29 | 27,0
30 | 28,1
31 | 29,0
32 | 30,0
33 | 31,0
34 | 32,1
35 | 33,0
36 | 34,1
37 | 35,0
38 | 36,0
39 | 37,0
40 | 38,1
41 | 39,1
42 | 40,1
43 | 41,0
44 | 42,0
45 | 43,1
46 | 44,0
47 | 45,1
48 | 46,0
49 | 47,0
50 | 48,0
51 | 49,1
52 | 50,1
53 | 51,0
54 | 52,0
55 | 53,1
56 | 54,1
57 | 55,0
58 | 56,1
59 | 57,0
60 | 58,1
61 | 59,0
62 | 60,1
63 | 61,0
64 | 62,1
65 | 63,0
66 | 64,1
67 | 65,0
68 | 66,1
69 | 67,1
70 | 68,0
71 | 69,0
72 | 70,0
73 | 71,1
74 | 72,1
75 | 73,0
76 | 74,0
77 | 75,0
78 | 76,0
79 | 77,0
80 | 78,0
81 | 79,0
82 | 80,0
83 | 81,1
84 | 82,0
85 | 83,0
86 | 84,1
87 | 85,1
88 | 86,1
89 | 87,0
90 | 88,0
91 | 89,0
92 | 90,1
93 | 91,0
94 | 92,0
95 | 93,0
96 | 94,0
97 | 95,1
98 | 96,0
99 | 97,0
100 | 98,0
101 | 99,0
102 | 100,0
103 | 101,1
104 | 102,1
105 | 103,0
106 | 104,0
107 | 105,0
108 | 106,0
109 | 107,0
110 | 108,0
111 | 109,1
112 | 110,0
113 | 111,0
114 | 112,0
115 | 113,0
116 | 114,1
117 | 115,1
118 | 116,0
119 | 117,0
120 | 118,0
121 | 119,0
122 | 120,1
123 | 121,0
124 | 122,0
125 | 123,0
126 | 124,0
127 | 125,1
128 | 126,1
129 | 127,0
130 | 128,0
131 | 129,1
132 | 130,0
133 | 131,1
134 | 132,0
135 | 133,0
136 | 134,0
137 | 135,0
138 | 136,0
139 | 137,1
140 | 138,0
141 | 139,0
142 | 140,0
143 | 141,0
144 | 142,0
145 | 143,0
146 | 144,1
147 | 145,0
148 | 146,0
149 | 147,1
150 | 148,1
151 | 149,0
152 | 150,0
153 | 151,1
154 | 152,0
155 | 153,0
156 | 154,0
157 | 155,0
158 | 156,0
159 | 157,0
160 | 158,0
161 | 159,1
162 | 160,1
163 | 161,1
164 | 162,1
165 | 163,0
166 | 164,1
167 | 165,0
168 | 166,1
169 | 167,0
170 | 168,0
171 | 169,0
172 | 170,0
173 | 171,0
174 | 172,1
175 | 173,1
176 | 174,1
177 | 175,0
178 | 176,1
179 | 177,0
180 | 178,0
181 | 179,1
182 | 180,0
183 | 181,0
184 | 182,0
185 | 183,1
186 | 184,0
187 | 185,0
188 | 186,1
189 | 187,1
190 | 188,1
191 | 189,1
192 | 190,0
193 | 191,0
194 | 192,0
195 | 193,0
196 | 194,1
197 | 195,1
198 | 196,0
199 | 197,0
200 | 198,0
201 | 199,1
202 | 200,1
203 | 201,0
204 | 202,0
205 | 203,0
206 | 204,1
207 | 205,0
208 | 206,0
209 | 207,0
210 | 208,1
211 | 209,0
212 | 210,0
213 | 211,0
214 | 212,1
215 | 213,1
216 | 214,0
217 | 215,1
218 | 216,0
219 | 217,0
220 | 218,0
221 | 219,0
222 | 220,0
223 | 221,1
224 | 222,0
225 | 223,1
226 | 224,0
227 | 225,1
228 | 226,0
229 | 227,1
230 | 228,0
231 | 229,0
232 | 230,1
233 | 231,0
234 | 232,0
235 | 233,0
236 | 234,0
237 | 235,1
238 | 236,0
239 | 237,0
240 | 238,0
241 | 239,0
242 | 240,0
243 | 241,0
244 | 242,0
245 | 243,0
246 | 244,0
247 | 245,0
248 | 246,0
249 | 247,0
250 | 248,0
251 | 249,1
252 | 250,0
253 | 251,0
254 | 252,0
255 | 253,1
256 | 254,0
257 | 255,1
258 | 256,1
259 | 257,1
260 | 258,0
261 | 259,1
262 | 260,0
263 | 261,0
264 | 262,1
265 | 263,1
266 | 264,1
267 | 265,0
268 | 266,0
269 | 267,0
270 | 268,0
271 | 269,0
272 | 270,1
273 | 271,0
274 | 272,1
275 | 273,1
276 | 274,0
277 | 275,1
278 | 276,0
279 | 277,0
280 | 278,1
281 | 279,1
282 | 280,1
283 | 281,0
284 | 282,1
285 | 283,0
286 | 284,1
287 | 285,0
288 | 286,1
289 | 287,1
290 | 288,0
291 | 289,0
292 | 290,1
293 | 291,0
294 | 292,0
295 | 293,0
296 | 294,0
297 | 295,1
298 | 296,1
299 | 297,1
300 | 298,0
301 | 299,0
302 | 300,1
303 | 301,0
304 | 302,0
305 | 303,1
306 | 304,1
307 | 305,0
308 | 306,1
309 | 307,0
310 | 308,1
311 | 309,1
312 | 310,1
313 | 311,1
314 | 312,0
315 | 313,0
316 | 314,0
317 | 315,0
318 | 316,1
319 | 317,1
320 | 318,0
321 | 319,0
322 | 320,0
323 | 321,1
324 | 322,0
325 | 323,1
326 | 324,1
327 | 325,0
328 | 326,0
329 | 327,1
330 | 328,1
331 | 329,1
332 | 330,1
333 | 331,0
334 | 332,1
335 | 333,0
336 | 334,1
337 | 335,1
338 | 336,1
339 | 337,1
340 | 338,0
341 | 339,0
342 | 340,0
343 | 341,1
344 | 342,1
345 | 343,1
346 | 344,0
347 | 345,0
348 | 346,1
349 | 347,1
350 | 348,1
351 | 349,0
352 | 350,1
353 | 351,0
354 | 352,0
355 | 353,0
356 | 354,1
357 | 355,0
358 | 356,0
359 | 357,1
360 | 358,0
361 | 359,1
362 | 360,1
363 | 361,0
364 | 362,1
365 | 363,1
366 | 364,1
367 | 365,0
368 | 366,0
369 | 367,0
370 | 368,1
371 | 369,0
372 | 370,1
373 | 371,0
374 | 372,0
375 | 373,1
376 | 374,1
377 | 375,1
378 | 376,1
379 | 377,0
380 | 378,0
381 | 379,0
382 | 380,0
383 | 381,1
384 | 382,1
385 | 383,1
386 | 384,0
387 | 385,0
388 | 386,0
389 | 387,0
390 | 388,1
391 | 389,0
392 | 390,0
393 | 391,0
394 | 392,0
395 | 393,0
396 | 394,0
397 | 395,1
398 | 396,0
399 | 397,1
400 | 398,1
401 | 399,0
402 | 400,1
403 | 401,1
404 | 402,0
405 | 403,0
406 | 404,0
407 | 405,0
408 | 406,0
409 | 407,1
410 | 408,1
411 | 409,0
412 | 410,0
413 | 411,1
414 | 412,1
415 | 413,0
416 | 414,1
417 | 415,0
418 | 416,1
419 | 417,1
420 | 418,0
421 | 419,0
422 | 420,0
423 | 421,1
424 | 422,1
425 | 423,0
426 | 424,0
427 | 425,1
428 | 426,1
429 | 427,1
430 | 428,0
431 | 429,0
432 | 430,0
433 | 431,1
434 | 432,0
435 | 433,1
436 | 434,1
437 | 435,1
438 | 436,1
439 | 437,0
440 | 438,1
441 | 439,0
442 | 440,1
443 | 441,1
444 | 442,0
445 | 443,1
446 | 444,0
447 | 445,1
448 | 446,1
449 | 447,1
450 | 448,1
451 | 449,1
452 | 450,1
453 | 451,1
454 | 452,0
455 | 453,0
456 | 454,0
457 | 455,1
458 | 456,0
459 | 457,1
460 | 458,1
461 | 459,1
462 | 460,1
463 | 461,0
464 | 462,1
465 | 463,1
466 | 464,0
467 | 465,0
468 | 466,0
469 | 467,0
470 | 468,1
471 | 469,1
472 | 470,0
473 | 471,1
474 | 472,0
475 | 473,0
476 | 474,0
477 | 475,1
478 | 476,0
479 | 477,0
480 | 478,0
481 | 479,1
482 | 480,0
483 | 481,0
484 | 482,1
485 | 483,0
486 | 484,0
487 | 485,1
488 | 486,0
489 | 487,0
490 | 488,0
491 | 489,0
492 | 490,1
493 | 491,0
494 | 492,1
495 | 493,0
496 | 494,0
497 | 495,1
498 | 496,1
499 | 497,0
500 | 498,1
501 | 499,0
502 |
--------------------------------------------------------------------------------
/results/results_spambase_csv_1659116425.csv:
--------------------------------------------------------------------------------
1 | ,0
2 | 0,0
3 | 1,0
4 | 2,0
5 | 3,0
6 | 4,0
7 | 5,1
8 | 6,1
9 | 7,1
10 | 8,0
11 | 9,1
12 | 10,1
13 | 11,0
14 | 12,1
15 | 13,1
16 | 14,0
17 | 15,0
18 | 16,0
19 | 17,1
20 | 18,0
21 | 19,1
22 | 20,1
23 | 21,0
24 | 22,1
25 | 23,1
26 | 24,0
27 | 25,1
28 | 26,1
29 | 27,0
30 | 28,1
31 | 29,1
32 | 30,1
33 | 31,0
34 | 32,1
35 | 33,0
36 | 34,1
37 | 35,0
38 | 36,0
39 | 37,1
40 | 38,1
41 | 39,1
42 | 40,1
43 | 41,0
44 | 42,0
45 | 43,1
46 | 44,0
47 | 45,1
48 | 46,0
49 | 47,0
50 | 48,0
51 | 49,1
52 | 50,1
53 | 51,0
54 | 52,0
55 | 53,1
56 | 54,1
57 | 55,0
58 | 56,1
59 | 57,0
60 | 58,1
61 | 59,0
62 | 60,1
63 | 61,1
64 | 62,1
65 | 63,1
66 | 64,1
67 | 65,0
68 | 66,1
69 | 67,1
70 | 68,0
71 | 69,1
72 | 70,0
73 | 71,1
74 | 72,1
75 | 73,0
76 | 74,0
77 | 75,1
78 | 76,0
79 | 77,0
80 | 78,0
81 | 79,0
82 | 80,1
83 | 81,1
84 | 82,1
85 | 83,1
86 | 84,1
87 | 85,1
88 | 86,1
89 | 87,0
90 | 88,0
91 | 89,0
92 | 90,1
93 | 91,0
94 | 92,0
95 | 93,1
96 | 94,0
97 | 95,1
98 | 96,0
99 | 97,0
100 | 98,0
101 | 99,0
102 | 100,0
103 | 101,1
104 | 102,1
105 | 103,1
106 | 104,0
107 | 105,0
108 | 106,1
109 | 107,0
110 | 108,0
111 | 109,1
112 | 110,0
113 | 111,0
114 | 112,0
115 | 113,0
116 | 114,1
117 | 115,1
118 | 116,1
119 | 117,0
120 | 118,1
121 | 119,0
122 | 120,1
123 | 121,0
124 | 122,0
125 | 123,0
126 | 124,1
127 | 125,1
128 | 126,1
129 | 127,0
130 | 128,0
131 | 129,1
132 | 130,0
133 | 131,1
134 | 132,0
135 | 133,0
136 | 134,1
137 | 135,0
138 | 136,1
139 | 137,1
140 | 138,0
141 | 139,0
142 | 140,0
143 | 141,0
144 | 142,0
145 | 143,0
146 | 144,1
147 | 145,1
148 | 146,0
149 | 147,1
150 | 148,1
151 | 149,0
152 | 150,0
153 | 151,1
154 | 152,0
155 | 153,0
156 | 154,0
157 | 155,0
158 | 156,1
159 | 157,1
160 | 158,1
161 | 159,1
162 | 160,1
163 | 161,1
164 | 162,1
165 | 163,0
166 | 164,1
167 | 165,0
168 | 166,1
169 | 167,0
170 | 168,0
171 | 169,0
172 | 170,0
173 | 171,0
174 | 172,1
175 | 173,1
176 | 174,1
177 | 175,0
178 | 176,1
179 | 177,0
180 | 178,0
181 | 179,1
182 | 180,0
183 | 181,0
184 | 182,0
185 | 183,1
186 | 184,0
187 | 185,0
188 | 186,1
189 | 187,1
190 | 188,1
191 | 189,1
192 | 190,0
193 | 191,0
194 | 192,0
195 | 193,0
196 | 194,1
197 | 195,1
198 | 196,1
199 | 197,1
200 | 198,0
201 | 199,1
202 | 200,1
203 | 201,0
204 | 202,0
205 | 203,0
206 | 204,1
207 | 205,0
208 | 206,0
209 | 207,0
210 | 208,1
211 | 209,1
212 | 210,0
213 | 211,0
214 | 212,1
215 | 213,1
216 | 214,0
217 | 215,1
218 | 216,0
219 | 217,1
220 | 218,0
221 | 219,0
222 | 220,1
223 | 221,1
224 | 222,0
225 | 223,1
226 | 224,0
227 | 225,1
228 | 226,0
229 | 227,1
230 | 228,0
231 | 229,0
232 | 230,1
233 | 231,0
234 | 232,0
235 | 233,0
236 | 234,0
237 | 235,1
238 | 236,0
239 | 237,1
240 | 238,0
241 | 239,0
242 | 240,0
243 | 241,0
244 | 242,0
245 | 243,0
246 | 244,0
247 | 245,0
248 | 246,0
249 | 247,0
250 | 248,0
251 | 249,1
252 | 250,0
253 | 251,0
254 | 252,1
255 | 253,1
256 | 254,0
257 | 255,1
258 | 256,1
259 | 257,1
260 | 258,0
261 | 259,1
262 | 260,0
263 | 261,0
264 | 262,1
265 | 263,1
266 | 264,1
267 | 265,0
268 | 266,0
269 | 267,0
270 | 268,0
271 | 269,0
272 | 270,1
273 | 271,0
274 | 272,1
275 | 273,1
276 | 274,0
277 | 275,1
278 | 276,0
279 | 277,0
280 | 278,1
281 | 279,1
282 | 280,1
283 | 281,0
284 | 282,1
285 | 283,0
286 | 284,1
287 | 285,0
288 | 286,1
289 | 287,1
290 | 288,1
291 | 289,0
292 | 290,1
293 | 291,0
294 | 292,0
295 | 293,0
296 | 294,0
297 | 295,1
298 | 296,1
299 | 297,1
300 | 298,0
301 | 299,0
302 | 300,1
303 | 301,0
304 | 302,1
305 | 303,1
306 | 304,1
307 | 305,0
308 | 306,1
309 | 307,0
310 | 308,1
311 | 309,1
312 | 310,1
313 | 311,1
314 | 312,0
315 | 313,1
316 | 314,1
317 | 315,0
318 | 316,1
319 | 317,1
320 | 318,0
321 | 319,0
322 | 320,0
323 | 321,1
324 | 322,0
325 | 323,1
326 | 324,1
327 | 325,0
328 | 326,0
329 | 327,1
330 | 328,1
331 | 329,1
332 | 330,1
333 | 331,0
334 | 332,1
335 | 333,0
336 | 334,1
337 | 335,1
338 | 336,1
339 | 337,1
340 | 338,0
341 | 339,1
342 | 340,1
343 | 341,1
344 | 342,1
345 | 343,1
346 | 344,0
347 | 345,0
348 | 346,1
349 | 347,1
350 | 348,1
351 | 349,0
352 | 350,1
353 | 351,0
354 | 352,0
355 | 353,0
356 | 354,1
357 | 355,1
358 | 356,0
359 | 357,1
360 | 358,0
361 | 359,1
362 | 360,1
363 | 361,0
364 | 362,1
365 | 363,1
366 | 364,1
367 | 365,0
368 | 366,0
369 | 367,0
370 | 368,1
371 | 369,0
372 | 370,1
373 | 371,0
374 | 372,0
375 | 373,1
376 | 374,1
377 | 375,1
378 | 376,1
379 | 377,0
380 | 378,0
381 | 379,1
382 | 380,1
383 | 381,1
384 | 382,1
385 | 383,1
386 | 384,0
387 | 385,0
388 | 386,0
389 | 387,0
390 | 388,1
391 | 389,0
392 | 390,0
393 | 391,0
394 | 392,0
395 | 393,0
396 | 394,0
397 | 395,1
398 | 396,0
399 | 397,1
400 | 398,1
401 | 399,0
402 | 400,1
403 | 401,1
404 | 402,0
405 | 403,1
406 | 404,0
407 | 405,1
408 | 406,0
409 | 407,1
410 | 408,1
411 | 409,0
412 | 410,0
413 | 411,1
414 | 412,1
415 | 413,0
416 | 414,1
417 | 415,0
418 | 416,1
419 | 417,1
420 | 418,0
421 | 419,0
422 | 420,0
423 | 421,1
424 | 422,1
425 | 423,1
426 | 424,1
427 | 425,1
428 | 426,1
429 | 427,1
430 | 428,0
431 | 429,0
432 | 430,1
433 | 431,1
434 | 432,0
435 | 433,1
436 | 434,1
437 | 435,1
438 | 436,1
439 | 437,0
440 | 438,1
441 | 439,0
442 | 440,1
443 | 441,1
444 | 442,0
445 | 443,1
446 | 444,0
447 | 445,1
448 | 446,1
449 | 447,1
450 | 448,1
451 | 449,1
452 | 450,1
453 | 451,1
454 | 452,0
455 | 453,1
456 | 454,0
457 | 455,1
458 | 456,0
459 | 457,1
460 | 458,1
461 | 459,1
462 | 460,1
463 | 461,0
464 | 462,1
465 | 463,1
466 | 464,1
467 | 465,0
468 | 466,0
469 | 467,0
470 | 468,1
471 | 469,1
472 | 470,0
473 | 471,1
474 | 472,0
475 | 473,1
476 | 474,0
477 | 475,1
478 | 476,1
479 | 477,0
480 | 478,0
481 | 479,1
482 | 480,0
483 | 481,0
484 | 482,1
485 | 483,0
486 | 484,0
487 | 485,1
488 | 486,1
489 | 487,0
490 | 488,0
491 | 489,0
492 | 490,1
493 | 491,1
494 | 492,1
495 | 493,1
496 | 494,0
497 | 495,1
498 | 496,1
499 | 497,1
500 | 498,1
501 | 499,0
502 |
--------------------------------------------------------------------------------
/templates/form.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | AutoOD: A Self-Tuning Anomaly Detection System
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {% for item in nav.top %}
15 |
16 | {{ item.label }}
17 |
18 | {% endfor %}
19 |
20 |
21 |
22 |
23 |
25 |
26 |
27 |
32 |
63 |
64 |
67 |
68 | Enter Input File and Parameters
69 |
137 | {% with messages = get_flashed_messages() %}
138 | {% if messages %}
139 |
140 | {% for message in messages %}
141 | {{ message }}
142 | {% endfor %}
143 |
144 | {% endif %}
145 | {% endwith %}
146 |
147 |
Log Messages:
148 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/results/log_spambase_csv_csv_1659980531:
--------------------------------------------------------------------------------
1 | 2022-08-08T13:40:36.614556-0400 - selected methods = ['lof', 'knn', 'if', 'mahala']
2 | 2022-08-08T13:40:36.617567-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label
3 | 2022-08-08T13:40:36.620558-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0%
4 | 2022-08-08T13:40:36.623555-0400 - Dataset Name = spambase_csv
5 | 2022-08-08T13:40:36.626557-0400 - Outlier Range defined as [5.0%, 15.0%]
6 | 2022-08-08T13:40:59.328349-0400 - Dataset size = (4601, 57), dataset label size = (4601,)
7 | 2022-08-08T13:40:59.330349-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
8 | 2022-08-08T13:41:10.671781-0400 - Best LOF F-1 = 0.2516979624450659
9 | 2022-08-08T13:41:10.674781-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
10 | 2022-08-08T13:41:20.653890-0400 - Best KNN F-1 = 0.4083100279664402
11 | 2022-08-08T13:41:20.655891-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9]
12 | 2022-08-08T13:41:26.073262-0400 - Best IF F-1 = 0.17871576111360576
13 | 2022-08-08T13:41:26.075261-0400 - Start running Mahalanobis..
14 | 2022-08-08T13:41:26.754262-0400 - Best Mahala F-1 = 0.18777467039552537
15 | 2022-08-08T13:41:26.757260-0400 - Best Unsupervised F-1 Score = 0.4083100279664402
16 | 2022-08-08T13:41:26.758263-0400 - Best Unsupervised Outlier Detection Method = ['KNN']
17 | 2022-08-08T13:41:26.776261-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]]
18 | 2022-08-08T13:41:26.780260-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]]
19 | 2022-08-08T13:41:26.821259-0400 - F1 for Majority Vote:0.1387341772151899
20 | 2022-08-08T13:41:26.824259-0400 - ##################################################################
21 | 2022-08-08T13:41:26.827264-0400 - Start First-round AutoOD training...
22 | 2022-08-08T13:41:27.235295-0400 - Iteration = 0, F-1 score = 0.0033039647577092508
23 | 2022-08-08T13:41:27.662428-0400 - Iteration = 1, F-1 score = 0.0033039647577092508
24 | 2022-08-08T13:41:31.458566-0400 - Iteration = 2, F-1 score = 0.0033039647577092508
25 | 2022-08-08T13:41:31.856568-0400 - Iteration = 3, F-1 score = 0.0033039647577092508
26 | 2022-08-08T13:41:32.317533-0400 - Iteration = 4, F-1 score = 0.0033039647577092508
27 | 2022-08-08T13:41:32.808567-0400 - Iteration = 5, F-1 score = 0.005500550055005501
28 | 2022-08-08T13:41:33.320656-0400 - Iteration = 6, F-1 score = 0.005500550055005501
29 | 2022-08-08T13:41:33.897611-0400 - Iteration = 7, F-1 score = 0.005500550055005501
30 | 2022-08-08T13:41:34.511698-0400 - Iteration = 8, F-1 score = 0.08553326293558607
31 | 2022-08-08T13:41:35.245836-0400 - Iteration = 9, F-1 score = 0.228544776119403
32 | 2022-08-08T13:41:36.030836-0400 - Iteration = 10, F-1 score = 0.23474615742897068
33 | 2022-08-08T13:41:36.881869-0400 - Iteration = 11, F-1 score = 0.238073182028717
34 | 2022-08-08T13:41:37.737899-0400 - Iteration = 12, F-1 score = 0.24574321214910264
35 | 2022-08-08T13:41:38.587002-0400 - Iteration = 13, F-1 score = 0.24457775726811262
36 | 2022-08-08T13:41:39.441111-0400 - Iteration = 14, F-1 score = 0.24306839186691315
37 | 2022-08-08T13:41:40.310173-0400 - Iteration = 15, F-1 score = 0.2504604051565378
38 | 2022-08-08T13:41:41.193263-0400 - Iteration = 16, F-1 score = 0.24826949700046147
39 | 2022-08-08T13:41:42.022640-0400 - Iteration = 17, F-1 score = 0.24318076745261213
40 | 2022-08-08T13:41:42.863695-0400 - Iteration = 18, F-1 score = 0.24931002759889606
41 | 2022-08-08T13:41:43.686787-0400 - Iteration = 19, F-1 score = 0.24387990762124714
42 | 2022-08-08T13:41:44.534877-0400 - Iteration = 20, F-1 score = 0.24387990762124714
43 | 2022-08-08T13:41:45.398058-0400 - Iteration = 21, F-1 score = 0.24387990762124714
44 | 2022-08-08T13:41:46.239154-0400 - Iteration = 22, F-1 score = 0.24387990762124714
45 | 2022-08-08T13:41:47.079120-0400 - Iteration = 23, F-1 score = 0.24387990762124714
46 | 2022-08-08T13:41:49.058727-0400 - ##################################################################
47 | 2022-08-08T13:41:49.062145-0400 - Start Second-round AutoOD training...
48 | 2022-08-08T13:41:49.195143-0400 - Iteration = 0, F-1 score = 0.5358702432938242
49 | 2022-08-08T13:41:49.356143-0400 - Iteration = 1, F-1 score = 0.5879446640316206
50 | 2022-08-08T13:41:49.579146-0400 - Iteration = 2, F-1 score = 0.5768152866242038
51 | 2022-08-08T13:41:49.858143-0400 - Iteration = 3, F-1 score = 0.5654230162900683
52 | 2022-08-08T13:41:50.197144-0400 - Iteration = 4, F-1 score = 0.5609887157442235
53 | 2022-08-08T13:41:50.543146-0400 - Iteration = 5, F-1 score = 0.5495172413793104
54 | 2022-08-08T13:41:50.866144-0400 - Iteration = 6, F-1 score = 0.5391353489686351
55 | 2022-08-08T13:41:51.203144-0400 - Iteration = 7, F-1 score = 0.5349841635473653
56 | 2022-08-08T13:41:51.540181-0400 - Iteration = 8, F-1 score = 0.5268722466960353
57 | 2022-08-08T13:41:51.873144-0400 - Iteration = 9, F-1 score = 0.5239369610466846
58 | 2022-08-08T13:41:52.251145-0400 - Iteration = 10, F-1 score = 0.5151971110442372
59 | 2022-08-08T13:41:52.623181-0400 - Iteration = 11, F-1 score = 0.5062671965759706
60 | 2022-08-08T13:41:53.003186-0400 - Iteration = 12, F-1 score = 0.5013893176906452
61 | 2022-08-08T13:41:53.391144-0400 - Iteration = 13, F-1 score = 0.4904717275851297
62 | 2022-08-08T13:41:53.783142-0400 - Iteration = 14, F-1 score = 0.48149319835495097
63 | 2022-08-08T13:41:54.188540-0400 - Iteration = 15, F-1 score = 0.4740882917466411
64 | 2022-08-08T13:41:54.600539-0400 - Iteration = 16, F-1 score = 0.46849757673667203
65 | 2022-08-08T13:41:55.021506-0400 - Iteration = 17, F-1 score = 0.4649951155975252
66 | 2022-08-08T13:41:55.455234-0400 - Iteration = 18, F-1 score = 0.4596191726854892
67 | 2022-08-08T13:41:55.904234-0400 - Iteration = 19, F-1 score = 0.45300564596479576
68 | 2022-08-08T13:41:56.339236-0400 - Iteration = 20, F-1 score = 0.4446680080482897
69 | 2022-08-08T13:41:56.783241-0400 - Iteration = 21, F-1 score = 0.43941950725615925
70 | 2022-08-08T13:41:57.228326-0400 - Iteration = 22, F-1 score = 0.4378176889190105
71 | 2022-08-08T13:41:57.675326-0400 - Iteration = 23, F-1 score = 0.43300375042618483
72 | 2022-08-08T13:41:58.163422-0400 - Iteration = 24, F-1 score = 0.42532690984170685
73 | 2022-08-08T13:41:58.662422-0400 - Iteration = 25, F-1 score = 0.42537056187521544
74 | 2022-08-08T13:41:59.145437-0400 - Iteration = 26, F-1 score = 0.4254583189207886
75 | 2022-08-08T13:41:59.628415-0400 - Iteration = 27, F-1 score = 0.4245152354570637
76 | 2022-08-08T13:42:00.101074-0400 - Iteration = 28, F-1 score = 0.4236760124610592
77 | 2022-08-08T13:42:00.618109-0400 - Iteration = 29, F-1 score = 0.4253990284524636
78 | 2022-08-08T13:42:01.102066-0400 - Iteration = 30, F-1 score = 0.4228491814698711
79 | 2022-08-08T13:42:01.632399-0400 - Iteration = 31, F-1 score = 0.42233856893542754
80 | 2022-08-08T13:42:02.112399-0400 - Iteration = 32, F-1 score = 0.42219120725750175
81 | 2022-08-08T13:42:02.626397-0400 - Iteration = 33, F-1 score = 0.42299651567944246
82 | 2022-08-08T13:42:03.109196-0400 - Iteration = 34, F-1 score = 0.4217543859649123
83 | 2022-08-08T13:42:03.600233-0400 - Iteration = 35, F-1 score = 0.4187522030313712
84 | 2022-08-08T13:42:04.133327-0400 - Iteration = 36, F-1 score = 0.4226441631504923
85 | 2022-08-08T13:42:04.634323-0400 - Iteration = 37, F-1 score = 0.4177840508115737
86 | 2022-08-08T13:42:05.165415-0400 - Iteration = 38, F-1 score = 0.4184897671136203
87 | 2022-08-08T13:42:05.672492-0400 - Iteration = 39, F-1 score = 0.4176678445229682
88 | 2022-08-08T13:42:06.182583-0400 - Iteration = 40, F-1 score = 0.41725601131541723
89 | 2022-08-08T13:42:06.704584-0400 - Iteration = 41, F-1 score = 0.41433132316424265
90 | 2022-08-08T13:42:07.219671-0400 - Iteration = 42, F-1 score = 0.4127886323268206
91 | 2022-08-08T13:42:07.716672-0400 - Iteration = 43, F-1 score = 0.41433132316424265
92 | 2022-08-08T13:42:08.228811-0400 - Iteration = 44, F-1 score = 0.41406249999999994
93 | 2022-08-08T13:42:08.758772-0400 - Iteration = 45, F-1 score = 0.4132290184921764
94 | 2022-08-08T13:42:09.301941-0400 - Iteration = 46, F-1 score = 0.4129353233830846
95 | 2022-08-08T13:42:09.826941-0400 - Iteration = 47, F-1 score = 0.4130821187344472
96 | 2022-08-08T13:42:10.339078-0400 - Iteration = 48, F-1 score = 0.4088476632179807
97 | 2022-08-08T13:42:10.875078-0400 - Iteration = 49, F-1 score = 0.4088476632179807
98 | 2022-08-08T13:42:11.087042-0400 - Length of prediction results = 4601
99 | 2022-08-08T13:42:11.092044-0400 - Final AutoOD F-1 Score= 0.4088476632179807
100 |
--------------------------------------------------------------------------------
/results/log_spambase_csv_csv_1659980693:
--------------------------------------------------------------------------------
1 | 2022-08-08T13:43:21.362272-0400 - selected methods = ['lof', 'knn', 'if', 'mahala']
2 | 2022-08-08T13:43:21.365274-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label
3 | 2022-08-08T13:43:21.368270-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0%
4 | 2022-08-08T13:43:21.370270-0400 - Dataset Name = spambase_csv
5 | 2022-08-08T13:43:21.373270-0400 - Outlier Range defined as [5.0%, 15.0%]
6 | 2022-08-08T13:43:44.226709-0400 - Dataset size = (4601, 57), dataset label size = (4601,)
7 | 2022-08-08T13:43:44.228710-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
8 | 2022-08-08T13:43:55.506127-0400 - Best LOF F-1 = 0.2516979624450659
9 | 2022-08-08T13:43:55.510124-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
10 | 2022-08-08T13:44:06.654262-0400 - Best KNN F-1 = 0.4083100279664402
11 | 2022-08-08T13:44:06.657231-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9]
12 | 2022-08-08T13:44:11.963222-0400 - Best IF F-1 = 0.17871576111360576
13 | 2022-08-08T13:44:11.965223-0400 - Start running Mahalanobis..
14 | 2022-08-08T13:44:12.602223-0400 - Best Mahala F-1 = 0.18777467039552537
15 | 2022-08-08T13:44:12.605223-0400 - Best Unsupervised F-1 Score = 0.4083100279664402
16 | 2022-08-08T13:44:12.607223-0400 - Best Unsupervised Outlier Detection Method = ['KNN']
17 | 2022-08-08T13:44:12.623224-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]]
18 | 2022-08-08T13:44:12.625222-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]]
19 | 2022-08-08T13:44:12.669224-0400 - F1 for Majority Vote:0.1387341772151899
20 | 2022-08-08T13:44:12.673224-0400 - ##################################################################
21 | 2022-08-08T13:44:12.675222-0400 - Start First-round AutoOD training...
22 | 2022-08-08T13:44:13.077226-0400 - Iteration = 0, F-1 score = 0.0033039647577092508
23 | 2022-08-08T13:44:13.505222-0400 - Iteration = 1, F-1 score = 0.0033039647577092508
24 | 2022-08-08T13:44:13.924257-0400 - Iteration = 2, F-1 score = 0.0033039647577092508
25 | 2022-08-08T13:44:14.352258-0400 - Iteration = 3, F-1 score = 0.0033039647577092508
26 | 2022-08-08T13:44:14.800259-0400 - Iteration = 4, F-1 score = 0.0033039647577092508
27 | 2022-08-08T13:44:15.255407-0400 - Iteration = 5, F-1 score = 0.005500550055005501
28 | 2022-08-08T13:44:15.793373-0400 - Iteration = 6, F-1 score = 0.005500550055005501
29 | 2022-08-08T13:44:16.354370-0400 - Iteration = 7, F-1 score = 0.005500550055005501
30 | 2022-08-08T13:44:16.937413-0400 - Iteration = 8, F-1 score = 0.08553326293558607
31 | 2022-08-08T13:44:17.617290-0400 - Iteration = 9, F-1 score = 0.228544776119403
32 | 2022-08-08T13:44:18.423290-0400 - Iteration = 10, F-1 score = 0.23474615742897068
33 | 2022-08-08T13:44:19.233289-0400 - Iteration = 11, F-1 score = 0.238073182028717
34 | 2022-08-08T13:44:20.031023-0400 - Iteration = 12, F-1 score = 0.24574321214910264
35 | 2022-08-08T13:44:20.985019-0400 - Iteration = 13, F-1 score = 0.24457775726811262
36 | 2022-08-08T13:44:21.870056-0400 - Iteration = 14, F-1 score = 0.24306839186691315
37 | 2022-08-08T13:44:22.734021-0400 - Iteration = 15, F-1 score = 0.2504604051565378
38 | 2022-08-08T13:44:23.565019-0400 - Iteration = 16, F-1 score = 0.24826949700046147
39 | 2022-08-08T13:44:24.384017-0400 - Iteration = 17, F-1 score = 0.24318076745261213
40 | 2022-08-08T13:44:25.205057-0400 - Iteration = 18, F-1 score = 0.24931002759889606
41 | 2022-08-08T13:44:26.024055-0400 - Iteration = 19, F-1 score = 0.24387990762124714
42 | 2022-08-08T13:44:26.819851-0400 - Iteration = 20, F-1 score = 0.24387990762124714
43 | 2022-08-08T13:44:27.673816-0400 - Iteration = 21, F-1 score = 0.24387990762124714
44 | 2022-08-08T13:44:28.503862-0400 - Iteration = 22, F-1 score = 0.24387990762124714
45 | 2022-08-08T13:44:29.353814-0400 - Iteration = 23, F-1 score = 0.24387990762124714
46 | 2022-08-08T13:44:31.366220-0400 - ##################################################################
47 | 2022-08-08T13:44:31.369440-0400 - Start Second-round AutoOD training...
48 | 2022-08-08T13:44:31.508438-0400 - Iteration = 0, F-1 score = 0.5358702432938242
49 | 2022-08-08T13:44:31.678441-0400 - Iteration = 1, F-1 score = 0.5879446640316206
50 | 2022-08-08T13:44:31.933473-0400 - Iteration = 2, F-1 score = 0.5768152866242038
51 | 2022-08-08T13:44:32.212475-0400 - Iteration = 3, F-1 score = 0.5654230162900683
52 | 2022-08-08T13:44:32.499475-0400 - Iteration = 4, F-1 score = 0.5609887157442235
53 | 2022-08-08T13:44:32.794475-0400 - Iteration = 5, F-1 score = 0.5495172413793104
54 | 2022-08-08T13:44:33.153475-0400 - Iteration = 6, F-1 score = 0.5391353489686351
55 | 2022-08-08T13:44:33.476444-0400 - Iteration = 7, F-1 score = 0.5349841635473653
56 | 2022-08-08T13:44:33.826441-0400 - Iteration = 8, F-1 score = 0.5268722466960353
57 | 2022-08-08T13:44:34.188441-0400 - Iteration = 9, F-1 score = 0.5239369610466846
58 | 2022-08-08T13:44:34.525474-0400 - Iteration = 10, F-1 score = 0.5151971110442372
59 | 2022-08-08T13:44:34.883474-0400 - Iteration = 11, F-1 score = 0.5062671965759706
60 | 2022-08-08T13:44:35.282475-0400 - Iteration = 12, F-1 score = 0.5013893176906452
61 | 2022-08-08T13:44:35.646225-0400 - Iteration = 13, F-1 score = 0.4904717275851297
62 | 2022-08-08T13:44:36.057193-0400 - Iteration = 14, F-1 score = 0.48149319835495097
63 | 2022-08-08T13:44:36.438873-0400 - Iteration = 15, F-1 score = 0.4740882917466411
64 | 2022-08-08T13:44:36.825871-0400 - Iteration = 16, F-1 score = 0.46849757673667203
65 | 2022-08-08T13:44:37.263873-0400 - Iteration = 17, F-1 score = 0.4649951155975252
66 | 2022-08-08T13:44:37.691840-0400 - Iteration = 18, F-1 score = 0.4596191726854892
67 | 2022-08-08T13:44:38.126837-0400 - Iteration = 19, F-1 score = 0.45300564596479576
68 | 2022-08-08T13:44:38.547840-0400 - Iteration = 20, F-1 score = 0.4446680080482897
69 | 2022-08-08T13:44:39.011873-0400 - Iteration = 21, F-1 score = 0.43941950725615925
70 | 2022-08-08T13:44:39.478874-0400 - Iteration = 22, F-1 score = 0.4378176889190105
71 | 2022-08-08T13:44:39.942839-0400 - Iteration = 23, F-1 score = 0.43300375042618483
72 | 2022-08-08T13:44:40.407872-0400 - Iteration = 24, F-1 score = 0.42532690984170685
73 | 2022-08-08T13:44:40.868872-0400 - Iteration = 25, F-1 score = 0.42537056187521544
74 | 2022-08-08T13:44:41.360872-0400 - Iteration = 26, F-1 score = 0.4254583189207886
75 | 2022-08-08T13:44:41.838876-0400 - Iteration = 27, F-1 score = 0.4245152354570637
76 | 2022-08-08T13:44:42.321873-0400 - Iteration = 28, F-1 score = 0.4236760124610592
77 | 2022-08-08T13:44:42.806876-0400 - Iteration = 29, F-1 score = 0.4253990284524636
78 | 2022-08-08T13:44:43.324872-0400 - Iteration = 30, F-1 score = 0.4228491814698711
79 | 2022-08-08T13:44:43.789837-0400 - Iteration = 31, F-1 score = 0.42233856893542754
80 | 2022-08-08T13:44:44.285836-0400 - Iteration = 32, F-1 score = 0.42219120725750175
81 | 2022-08-08T13:44:44.782532-0400 - Iteration = 33, F-1 score = 0.42299651567944246
82 | 2022-08-08T13:44:45.277532-0400 - Iteration = 34, F-1 score = 0.4217543859649123
83 | 2022-08-08T13:44:45.785531-0400 - Iteration = 35, F-1 score = 0.4187522030313712
84 | 2022-08-08T13:44:46.283537-0400 - Iteration = 36, F-1 score = 0.4226441631504923
85 | 2022-08-08T13:44:46.798537-0400 - Iteration = 37, F-1 score = 0.4177840508115737
86 | 2022-08-08T13:44:47.287573-0400 - Iteration = 38, F-1 score = 0.4184897671136203
87 | 2022-08-08T13:44:47.787572-0400 - Iteration = 39, F-1 score = 0.4176678445229682
88 | 2022-08-08T13:44:48.342541-0400 - Iteration = 40, F-1 score = 0.41725601131541723
89 | 2022-08-08T13:44:48.852574-0400 - Iteration = 41, F-1 score = 0.41433132316424265
90 | 2022-08-08T13:44:49.350574-0400 - Iteration = 42, F-1 score = 0.4127886323268206
91 | 2022-08-08T13:44:49.856537-0400 - Iteration = 43, F-1 score = 0.41433132316424265
92 | 2022-08-08T13:44:50.375537-0400 - Iteration = 44, F-1 score = 0.41406249999999994
93 | 2022-08-08T13:44:50.907539-0400 - Iteration = 45, F-1 score = 0.4132290184921764
94 | 2022-08-08T13:44:51.404539-0400 - Iteration = 46, F-1 score = 0.4129353233830846
95 | 2022-08-08T13:44:51.941541-0400 - Iteration = 47, F-1 score = 0.4130821187344472
96 | 2022-08-08T13:44:52.485541-0400 - Iteration = 48, F-1 score = 0.4088476632179807
97 | 2022-08-08T13:44:52.987574-0400 - Iteration = 49, F-1 score = 0.4088476632179807
98 | 2022-08-08T13:44:53.176539-0400 - Length of prediction results = 4601
99 | 2022-08-08T13:44:53.181537-0400 - Final AutoOD F-1 Score= 0.4088476632179807
100 |
--------------------------------------------------------------------------------
/static/css/d3_visualization.css:
--------------------------------------------------------------------------------
1 | #body_results{
2 | background-color: #efeef1cb;
3 | z-index: 100;
4 | }
5 |
6 | html{
7 | /* font-family: 'Open Sans', sans-serif; */
8 | overflow: scroll;
9 | }
10 |
11 |
12 | h1{
13 | position: absolute;
14 | left: 0;
15 | right: 0;
16 | margin-left: auto;
17 | margin-right: auto;
18 | width: 700px;
19 | font-family: sans-serif;
20 | padding-left: .5%;
21 | top: 2.5%;
22 | white-space: nowrap;
23 | color: black;
24 | /* font-size: 30px; */
25 | }
26 |
27 | center{
28 | position: absolute;
29 | position: absolute;
30 | left: 0;
31 | right: 0;
32 | margin-left: auto;
33 | margin-right: auto;
34 | width: 100%;
35 | top: 10%;
36 | }
37 |
38 | /* Main tsne chart */
39 | #dataviz_axisZoom{
40 | position:absolute;
41 | left:15px;
42 | top:190px;
43 | height: 500px;
44 | width: 700px;
45 | z-index: 1;
46 | }
47 |
48 | #dataviz_axisZoom svg{
49 | position: relative;
50 | background-color: white;
51 | border-radius:12px;
52 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
53 | height: 550px
54 |
55 | }
56 |
57 | #pred_but{
58 | position: absolute;
59 | left: 22px;
60 | bottom: 50px;
61 | font-size: 17px;
62 | }
63 |
64 | /* autoOD pred filter button */
65 | #metric{
66 | position: absolute;
67 | width:175px;
68 | height: 30px;
69 | border-radius:5px;
70 | left: 0px;
71 | bottom: -30px;
72 | font-size: 15px;
73 | }
74 |
75 | #correct_but{
76 | position: absolute;
77 | left: 576px;
78 | bottom: 50px;
79 | font-size: 17px;
80 | }
81 |
82 | /* Correct filter button */
83 | #selectButton_correct{
84 | position: absolute;
85 | left: 0px;
86 | bottom: -30px;
87 | width:175px;
88 | height: 30px;
89 | border-radius:5px;
90 | font-size: 15px;
91 | }
92 |
93 | #label_but{
94 | position: absolute;
95 | left: 298px;
96 | bottom: 50px;
97 | font-size: 17px;
98 | }
99 |
100 | /* Ground truth filter button */
101 | #selectButton_label{
102 | position: absolute;
103 | width:175px;
104 | height: 30px;
105 | border-radius:5px;
106 | left: 0px;
107 | bottom: -30px;
108 | font-size: 15px;
109 | }
110 |
111 | /* round relibale labels filter button */
112 | #selectButton_round{
113 | width:75px;
114 | border-radius:5px;
115 |
116 |
117 | }
118 |
119 | /* Slider for reliable labels */
120 | #slider-step{
121 |
122 | }
123 |
124 | /* barplot for param. */
125 | #barplot{
126 | height: 715px;
127 | float: right;
128 | left:400px;
129 | bottom:-304px;
130 | background-color: white;
131 | border-radius:10px;
132 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
133 | }
134 |
135 | #barplot2{
136 | height: 715px;
137 | float: left;
138 | background-color: white;
139 | border-radius:10px;
140 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
141 | }
142 |
143 | #temp{
144 | position:relative;
145 | left:-5px;
146 | bottom:5px;
147 | width: 1790px;
148 | }
149 |
150 | /* table for each data point att. */
151 | #table_wrapper{
152 | position:absolute;
153 | left:1300px;
154 | bottom:-790px;
155 | width: 15%;
156 | }
157 |
158 | #table2_wrapper{
159 | position:absolute;
160 | left:900px;
161 | bottom:-790px;
162 | width: 15%;
163 | }
164 |
165 | #popup_chart{
166 | position:relative;
167 | left:840px;
168 | bottom:-145px;
169 | width:760px;
170 | }
171 |
172 | /* Control panel (filter dropdowns) */
173 | #filter{
174 | position:absolute;
175 | left:15px;
176 | top:6%;
177 | background-color: white;
178 | width: 760px;
179 | height: 100px;
180 | border-radius:10px;
181 | padding-left: .5%;
182 | padding-top: .2%;
183 | padding-bottom: .2%;
184 | font-family: 'Open Sans', sans-serif;
185 | vertical-align: baseline;
186 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
187 |
188 | }
189 |
190 | #reliable_inout_div{
191 | font-family: 'Open Sans', sans-serif;
192 |
193 | }
194 |
195 | #reliable_inout{
196 | width:140px;
197 | border-radius:5px;
198 | }
199 |
200 | #filtertitle{
201 | font-size: 21px;
202 | font-family: 'Open Sans', sans-serif;
203 |
204 | }
205 |
206 | #reliable_output{
207 | position:absolute;
208 | left:485px;
209 | top:12%;
210 | }
211 |
212 | #reliable_labels{
213 | font-family: 'Open Sans', sans-serif;
214 | position:absolute;
215 | left:15px;
216 | /* top: 85%; */
217 | top: 770px;
218 | background-color: white;
219 | border-radius:12px;
220 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
221 | width:760px;
222 | padding-left: .5%;
223 | padding-top: .2%;
224 | padding-bottom: .2%;
225 | height: 130px;
226 |
227 | }
228 |
229 | select{
230 | font-family: 'Open Sans', sans-serif;
231 | }
232 |
233 | /* hor. line */
234 | /* .vl{
235 | border-left: 1px solid black;
236 | height: 900px;
237 | position: absolute;
238 | left: 800px;
239 | top: 35px;
240 | z-index: -3;
241 | } */
242 |
243 |
244 | .legend{
245 | list-style: none;
246 | position: absolute;
247 | left: 664px;
248 | top: 193px;
249 | font-family: 'Open Sans', sans-serif;
250 | font-size: 15px;
251 | background-color: white;
252 | width: 112px;
253 | height: 50px;
254 | border-radius:12px;
255 | padding-left: .5%;
256 | padding-top: .2%;
257 | padding-bottom: .2%;
258 | z-index: 1;
259 | opacity: 0.9;
260 | /* box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); */
261 | vertical-align: baseline;
262 |
263 | }
264 |
265 | .legend li{
266 | float: left;
267 | margin-right: 10px;
268 | }
269 |
270 | .legend span{
271 | border: 1px solid #ccc;
272 | float: left;
273 | width: 12px;
274 | height: 12px;
275 | margin: 5px;
276 | }
277 |
278 | .legend .inlier{
279 | background-color: SteelBlue;
280 | width: 10px;
281 | height: 10px;
282 | border-radius:50px;
283 | }
284 |
285 | .legend .outlier{
286 | background-color: #FFA500;
287 | width: 10px;
288 | height: 10px;
289 | border-radius:50px;
290 | }
291 |
292 | .legend .incorrect{
293 | border-color: black;
294 | width: 17px;
295 | height: 17px;
296 | border-radius:50px;
297 | }
298 |
299 | /* li{
300 | font-size: 15px;
301 | } */
302 |
303 | #ul_nav{
304 | position: fixed;
305 | top: 0;
306 | left: 0;
307 | width: 100%;
308 | list-style-type: none;
309 | margin: 0;
310 | padding: 0;
311 | overflow: hidden;
312 | background-color: #333;
313 | font-family: sans-serif; /* This is what is causing the different sizing in bar */
314 | font-size: 20px;
315 | z-index: 100;
316 | }
317 |
318 | #nav{
319 | float: left;
320 | border-right:1px solid #bbb;
321 | }
322 |
323 | #nav:last-child {
324 | border-right: none;
325 | }
326 |
327 | #li_a_nav {
328 | display: block;
329 | color: white;
330 | text-align: center;
331 | padding: 8px 16px;
332 | text-decoration: none;
333 | }
334 |
335 | /* Change the link color to #111 (black) on hover */
336 | li a:hover {
337 | background-color: #111;
338 | }
339 |
340 | .active {
341 | background-color: maroon;
342 | }
343 |
344 | #change_reliable_div{
345 | position: relative;
346 | bottom: -828px;
347 | left: 587px;
348 | }
349 |
350 | #change_reliable1{
351 | position: absolute;
352 | width: 175px;
353 | height: 30px;
354 | border-radius:5px;
355 | font-size: 15px;
356 | bottom: -30px;
357 | left: 750px;
358 | }
359 |
360 | #change_reliable2{
361 | position: absolute;
362 | width: 175px;
363 | height: 30px;
364 | border-radius:5px;
365 | font-size: 15px;
366 | }
367 |
368 | #radio1{
369 | position: absolute;
370 | bottom: 7px;
371 | left: 789px;
372 | font-family: 'Open Sans', sans-serif;
373 | font-size: 20px;
374 | }
375 |
376 | #radio2{
377 | position: absolute;
378 | bottom: 7px;
379 | left: 398px;
380 | font-family: 'Open Sans', sans-serif;
381 | font-size: 20px;
382 | }
383 |
384 | input[type=checkbox] {
385 | transform: scale(1.2);
386 | }
387 |
388 | #myButton{
389 | font-family: 'Open Sans', sans-serif;
390 | font-size: 20px;
391 | }
392 |
393 | #about_para{
394 | position: absolute;
395 | margin-left: 5%;
396 | margin-right: 5%;
397 | background-color: white;
398 | top: 110px;
399 | border-radius:10px;
400 | padding: 20px;
401 | font-family: 'Open Sans', sans-serif;
402 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
403 | }
404 |
405 | #download_results{
406 | position: relative;
407 | left: -85px;
408 |
409 |
410 | }
411 |
412 | #download_log{
413 | position: relative;
414 | left: -48px;
415 |
416 | }
417 |
418 |
419 |
420 |
--------------------------------------------------------------------------------
/app.py:
--------------------------------------------------------------------------------
1 | from cgi import test
2 | from flask import Flask
3 | from flask import Flask, request, render_template, flash, redirect, url_for, Response, send_file
4 | from werkzeug.utils import secure_filename
5 | import os
6 | from loguru import logger
7 | import time
8 | from shutil import copyfile
9 | from autood import run_autood, AutoODResults, get_default_detection_method_list,OutlierDetectionMethod
10 | import psycopg2
11 | from flask import jsonify
12 | from config import config
13 |
14 | results_global = None
15 | final_log_filename_global = None
16 |
17 | LOGGING_PATH = "static/job.log"
18 | # configure logger
19 | logger.add(LOGGING_PATH, format="{time} - {message}")
20 |
21 | UPLOAD_FOLDER = 'files'
22 | DOWNLOAD_FOLDER = 'results/'
23 | app = Flask(__name__)
24 | app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
25 | app.config['DEBUG'] = True # start debugging
26 | app.secret_key = "super secret key"
27 |
28 | ALLOWED_EXTENSIONS = {'arff', 'csv'}
29 |
30 | @app.route('/', methods=['GET', 'POST'])
31 | def home():
32 | return redirect('/autood/index')
33 |
34 | @app.route('/autood/results_summary', methods=['GET']) #DH
35 | def results1():
36 | results = results_global
37 | final_log_filename = final_log_filename_global
38 | try:
39 | return render_template('result_summary.html', best_f1=results.best_unsupervised_f1_score,
40 | autood_f1=results.autood_f1_score, mv_f1=results.mv_f1_score,
41 | best_method=",".join(results.best_unsupervised_methods),
42 | final_results=results.results_file_name, training_log=final_log_filename)
43 | except:
44 | return render_template('result_summary.html')
45 |
46 | @app.route('/autood/index', methods=['GET'])
47 | def autood_form():
48 | return render_template('form.html')
49 |
50 | @app.route('/autood/index', methods=['GET'])
51 | def autood_form2():
52 | return render_template('form.html')
53 |
54 |
55 | def allowed_file(filename):
56 | return '.' in filename and \
57 | filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
58 |
59 |
60 | def flask_logger():
61 | """creates logging information"""
62 | with open(LOGGING_PATH) as log_info:
63 | while True:
64 | data = log_info.read()
65 | yield data.encode()
66 | time.sleep(1)
67 |
68 |
69 | @app.route("/running_logs", methods=["GET"])
70 | def running_logs():
71 | """returns logging information"""
72 | return Response(flask_logger(), mimetype="text/plain", content_type="text/event-stream")
73 |
74 | def get_detection_methods(methods):
75 | logger.info(f"selected methods = {methods}")
76 | name_to_method_map = {
77 | "lof": OutlierDetectionMethod.LOF,
78 | "knn": OutlierDetectionMethod.KNN,
79 | "if": OutlierDetectionMethod.IsolationForest,
80 | "mahala": OutlierDetectionMethod.Manalanobis
81 | }
82 | selected_methods = [name_to_method_map[method] for method in methods]
83 | return selected_methods
84 |
85 | @app.route('/autood/index', methods=['POST'])
86 | def autood_input():
87 | if 'file' not in request.files:
88 | flash('Please provide an input file or select a dataset.')
89 | return redirect(request.url)
90 | file = request.files['file']
91 | # If the user does not select a file, the browser submits an
92 | # empty file without a filename.
93 | if file.filename == '':
94 | flash('Please provide an input file or select a dataset.')
95 | return redirect(request.url)
96 | if file and allowed_file(file.filename):
97 | filename = secure_filename(file.filename)
98 | file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
99 | # start autoOD computation
100 | index_col_name = request.form['indexColName']
101 | label_col_name = request.form['labelColName']
102 | outlier_range_min = float(request.form['outlierRangeMin'])
103 | outlier_range_max = float(request.form['outlierRangeMax'])
104 | detection_methods = get_detection_methods(request.form.getlist('detectionMethods'))
105 | if not detection_methods:
106 | flash('Please choose at least one detection method.')
107 | return redirect(request.url)
108 | results = call_autood(filename, outlier_range_min, outlier_range_max, detection_methods, index_col_name, label_col_name)
109 | if results.error_message:
110 | flash(results.error_message)
111 | return redirect(request.url)
112 | else:
113 | # Create empty job.log, old logging will be deleted
114 | final_log_filename = f"log_{file.filename.replace('.', '_')}_{int(time.time())}"
115 | copyfile(LOGGING_PATH, DOWNLOAD_FOLDER + final_log_filename)
116 | open(LOGGING_PATH, 'w').close()
117 | global results_global, final_log_filename_global
118 | results_global = results
119 | final_log_filename_global = final_log_filename
120 | return render_template('result_summary.html', best_f1=results.best_unsupervised_f1_score,
121 | autood_f1=results.autood_f1_score, mv_f1=results.mv_f1_score,
122 | best_method=",".join(results.best_unsupervised_methods),
123 | final_results=results.results_file_name, training_log=final_log_filename)
124 | else:
125 | flash('File type is not supported.')
126 | return redirect(request.url)
127 |
128 |
129 | @app.route('/return-files/')
130 | def return_files_tut(filename):
131 | file_path = DOWNLOAD_FOLDER + filename
132 | return send_file(file_path, as_attachment=False, attachment_filename='')
133 |
134 |
135 | def call_autood(filename, outlier_percentage_min, outlier_percentage_max, detection_methods, index_col_name, label_col_name):
136 | filepath = os.path.join(UPLOAD_FOLDER, filename)
137 | logger.info(f"Start calling autood with file {filename}...indexColName = {index_col_name}, labelColName = {label_col_name}")
138 | logger.info(
139 | f"Parameters: outlier_percentage_min = {outlier_percentage_min}%, outlier_percentage_max = {outlier_percentage_max}%")
140 | return run_autood(filepath, logger, outlier_percentage_min, outlier_percentage_max, detection_methods, index_col_name, label_col_name)
141 |
142 | #### DH
143 | from flask_navigation import Navigation
144 | nav = Navigation(app)
145 |
146 | nav.Bar('top', [
147 | nav.Item('Input Page', 'autood_form'),
148 | nav.Item('Results Summary', 'results1'),
149 | nav.Item('Result Page', 'result_index'),
150 | nav.Item('Rerun', 'autood_form2'),
151 | nav.Item('About', 'about_form')
152 | ])
153 |
154 | @app.route('/autood/about', methods=['GET'])
155 | def about_form():
156 | return render_template('about.html')
157 |
158 | @app.route('/autood/result', methods=['GET'])
159 | def result_index():
160 | return render_template('index.html')
161 |
162 | @app.route('/data') # get data from DB as json
163 | def send_data():
164 | params = config() # get DB info from config.py
165 | conn = psycopg2.connect(**params)
166 | cur = conn.cursor()
167 | # we can use multiple execute statements to get the data how we need it
168 | cur.execute("SELECT max(iteration) FROM reliable") # number of iterations for reliable labels
169 | iteration = cur.fetchall()[0][0] + 1
170 | cur.close()
171 | cur = conn.cursor()
172 |
173 | #drop all tables on each run
174 | cur.execute("""
175 | DROP TABLE
176 | temp_lof,
177 | temp_knn,
178 | temp_if,
179 | temp_mahalanobis;
180 | """)
181 |
182 | # create temp tabels so that we can pass the data in a way that JS/D3 needs it
183 | cur.execute("""
184 | CREATE TABLE temp_lof AS (
185 | SELECT id, ROUND(AVG(prediction)) AS Prediction_LOF, AVG(score) AS SCORE_LOF
186 | FROM detectors
187 | WHERE detector = 'LOF'
188 | GROUP BY id
189 | )
190 | """)
191 |
192 | cur.execute("""
193 | CREATE TABLE temp_knn AS (
194 | SELECT id, ROUND(AVG(prediction)) AS Prediction_KNN, AVG(score) AS SCORE_KNN
195 | FROM detectors
196 | WHERE detector = 'KNN'
197 | GROUP BY id
198 | )
199 | """)
200 |
201 | cur.execute("""
202 | CREATE TABLE temp_if AS (
203 | SELECT id, ROUND(AVG(prediction)) AS Prediction_if, AVG(score) AS SCORE_if
204 | FROM detectors
205 | WHERE detector = 'IF'
206 | GROUP BY id
207 | )
208 | """)
209 |
210 | cur.execute("""
211 | CREATE TABLE temp_mahalanobis AS (
212 | SELECT id, ROUND(AVG(prediction)) AS Prediction_mahalanobis, AVG(score) AS SCORE_mahalanobis
213 | FROM detectors
214 | WHERE detector = 'mahalanobis'
215 | GROUP BY id
216 | )
217 | """)
218 |
219 | for i in range(iteration): # one table for each iteration
220 | cur.execute(f"""
221 | CREATE TABLE reliable_{i} AS (
222 | SELECT id, reliable as reliable_{i}
223 | FROM reliable
224 | WHERE iteration = {i}
225 | )
226 | """)
227 |
228 | # Join all tabels together
229 | SQL_statement = """
230 | SELECT *
231 | FROM input
232 | FULL JOIN tsne using (id)
233 | FULL JOIN temp_lof using (id)
234 | FULL JOIN temp_knn using (id)
235 | FULL JOIN temp_if using (id)
236 | FULL JOIN temp_mahalanobis using (id)
237 | FULL JOIN predictions using (id)
238 | """
239 | join_reliable = "" # join relibale labels
240 | for i in range(iteration):
241 | join_reliable = f"{join_reliable} FULL JOIN reliable_{i} using (id)"
242 |
243 | cur.execute(f"{SQL_statement}{join_reliable}")
244 |
245 | #data = [col for col in cur]
246 | field_names = [i[0] for i in cur.description]
247 | result = [dict(zip(field_names,row)) for row in cur.fetchall()]
248 | #conn.commit()
249 | cur.close()
250 | conn.close()
251 | return jsonify(result)
252 |
253 | #### DH
254 |
255 |
256 | if __name__ == '__main__':
257 | app.run(host='127.0.0.1', port=8080)
258 |
--------------------------------------------------------------------------------
/results/log_spambase_csv_csv_1659113854:
--------------------------------------------------------------------------------
1 | 2022-07-29T12:57:26.700058-0400 - selected methods = ['lof', 'mahala']
2 | 2022-07-29T12:57:26.704061-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label
3 | 2022-07-29T12:57:26.708058-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0%
4 | 2022-07-29T12:57:26.711057-0400 - Dataset Name = spambase_csv
5 | 2022-07-29T12:57:26.713060-0400 - Outlier Range defined as [5.0%, 15.0%]
6 | 2022-07-29T12:57:29.100999-0400 - Dataset size = (500, 57), dataset label size = (500,)
7 | 2022-07-29T12:57:29.102998-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
8 | 2022-07-29T12:57:30.293399-0400 - Best LOF F-1 = 0.4106463878326996
9 | 2022-07-29T12:57:30.295397-0400 - Start running Mahalanobis..
10 | 2022-07-29T12:57:30.466395-0400 - Best Mahala F-1 = 0.20849420849420852
11 | 2022-07-29T12:57:30.468396-0400 - Best Unsupervised F-1 Score = 0.4106463878326996
12 | 2022-07-29T12:57:30.470397-0400 - Best Unsupervised Outlier Detection Method = ['LOF']
13 | 2022-07-29T12:57:30.473394-0400 - Instance Index Ranges: [[0, 60], [60, 66]]
14 | 2022-07-29T12:57:30.475393-0400 - Detector Index Ranges: [[0, 10], [10, 11]]
15 | 2022-07-29T12:57:30.479396-0400 - F1 for Majority Vote:0.27192982456140347
16 | 2022-07-29T12:57:30.481395-0400 - ##################################################################
17 | 2022-07-29T12:57:30.484394-0400 - Start First-round AutoOD training...
18 | 2022-07-29T12:57:30.543394-0400 - Iteration = 0, F-1 score = 0.010582010582010583
19 | 2022-07-29T12:57:30.624396-0400 - Iteration = 1, F-1 score = 0.08
20 | 2022-07-29T12:57:30.683394-0400 - Iteration = 2, F-1 score = 0.12560386473429952
21 | 2022-07-29T12:57:30.751395-0400 - Iteration = 3, F-1 score = 0.4317460317460317
22 | 2022-07-29T12:57:30.804393-0400 - Iteration = 4, F-1 score = 0.5373961218836565
23 | 2022-07-29T12:57:30.853397-0400 - Iteration = 5, F-1 score = 0.555256064690027
24 | 2022-07-29T12:57:30.887396-0400 - Iteration = 6, F-1 score = 0.5684210526315789
25 | 2022-07-29T12:57:30.921394-0400 - Iteration = 7, F-1 score = 0.5959595959595959
26 | 2022-07-29T12:57:30.953395-0400 - Iteration = 8, F-1 score = 0.621923937360179
27 | 2022-07-29T12:57:30.987395-0400 - Iteration = 9, F-1 score = 0.6265938069216758
28 | 2022-07-29T12:57:31.024395-0400 - Iteration = 10, F-1 score = 0.6374695863746959
29 | 2022-07-29T12:57:31.058856-0400 - Iteration = 11, F-1 score = 0.6320754716981133
30 | 2022-07-29T12:57:31.092548-0400 - Iteration = 12, F-1 score = 0.6345733041575492
31 | 2022-07-29T12:57:31.123511-0400 - Iteration = 13, F-1 score = 0.6440677966101696
32 | 2022-07-29T12:57:31.160515-0400 - Iteration = 14, F-1 score = 0.5848563968668407
33 | 2022-07-29T12:57:31.197514-0400 - Iteration = 15, F-1 score = 0.6045340050377833
34 | 2022-07-29T12:57:31.238511-0400 - Iteration = 16, F-1 score = 0.6246973365617434
35 | 2022-07-29T12:57:31.281512-0400 - Iteration = 17, F-1 score = 0.6287015945330295
36 | 2022-07-29T12:57:31.321555-0400 - Iteration = 18, F-1 score = 0.6454352441613589
37 | 2022-07-29T12:57:31.365539-0400 - Iteration = 19, F-1 score = 0.5989583333333334
38 | 2022-07-29T12:57:31.407554-0400 - Iteration = 20, F-1 score = 0.606516290726817
39 | 2022-07-29T12:57:31.450546-0400 - Iteration = 21, F-1 score = 0.6080760095011876
40 | 2022-07-29T12:57:31.489568-0400 - Iteration = 22, F-1 score = 0.6382022471910113
41 | 2022-07-29T12:57:31.528546-0400 - Iteration = 23, F-1 score = 0.6416666666666666
42 | 2022-07-29T12:57:31.573511-0400 - Iteration = 24, F-1 score = 0.6020408163265305
43 | 2022-07-29T12:57:31.611552-0400 - Iteration = 25, F-1 score = 0.6134663341645885
44 | 2022-07-29T12:57:31.649517-0400 - Iteration = 26, F-1 score = 0.6179245283018868
45 | 2022-07-29T12:57:31.682547-0400 - Iteration = 27, F-1 score = 0.6385809312638581
46 | 2022-07-29T12:57:31.715611-0400 - Iteration = 28, F-1 score = 0.6344294003868473
47 | 2022-07-29T12:57:31.753614-0400 - Iteration = 29, F-1 score = 0.6218905472636816
48 | 2022-07-29T12:57:31.788439-0400 - Iteration = 30, F-1 score = 0.6258823529411764
49 | 2022-07-29T12:57:31.822472-0400 - Iteration = 31, F-1 score = 0.642696629213483
50 | 2022-07-29T12:57:31.857437-0400 - Iteration = 32, F-1 score = 0.6459627329192547
51 | 2022-07-29T12:57:31.895725-0400 - Iteration = 33, F-1 score = 0.6055979643765903
52 | 2022-07-29T12:57:31.930719-0400 - Iteration = 34, F-1 score = 0.6203473945409429
53 | 2022-07-29T12:57:31.970722-0400 - Iteration = 35, F-1 score = 0.6244131455399062
54 | 2022-07-29T12:57:32.006725-0400 - Iteration = 36, F-1 score = 0.6383928571428571
55 | 2022-07-29T12:57:32.043745-0400 - Iteration = 37, F-1 score = 0.6344294003868473
56 | 2022-07-29T12:57:32.080747-0400 - Iteration = 38, F-1 score = 0.6218905472636816
57 | 2022-07-29T12:57:32.116745-0400 - Iteration = 39, F-1 score = 0.6258823529411764
58 | 2022-07-29T12:57:32.150715-0400 - Iteration = 40, F-1 score = 0.642696629213483
59 | 2022-07-29T12:57:32.182711-0400 - Iteration = 41, F-1 score = 0.6459627329192547
60 | 2022-07-29T12:57:32.223747-0400 - Iteration = 42, F-1 score = 0.6055979643765903
61 | 2022-07-29T12:57:32.259747-0400 - Iteration = 43, F-1 score = 0.6203473945409429
62 | 2022-07-29T12:57:32.293709-0400 - Iteration = 44, F-1 score = 0.6244131455399062
63 | 2022-07-29T12:57:32.328746-0400 - Iteration = 45, F-1 score = 0.6383928571428571
64 | 2022-07-29T12:57:32.361768-0400 - Iteration = 46, F-1 score = 0.6344294003868473
65 | 2022-07-29T12:57:32.400801-0400 - Iteration = 47, F-1 score = 0.6218905472636816
66 | 2022-07-29T12:57:32.436763-0400 - Iteration = 48, F-1 score = 0.6258823529411764
67 | 2022-07-29T12:57:32.473765-0400 - Iteration = 49, F-1 score = 0.642696629213483
68 | 2022-07-29T12:57:32.830965-0400 - ##################################################################
69 | 2022-07-29T12:57:32.832964-0400 - Start Second-round AutoOD training...
70 | 2022-07-29T12:57:32.858964-0400 - Iteration = 0, F-1 score = 0.601851851851852
71 | 2022-07-29T12:57:32.894975-0400 - Iteration = 1, F-1 score = 0.49853372434017595
72 | 2022-07-29T12:57:32.935006-0400 - Iteration = 2, F-1 score = 0.532608695652174
73 | 2022-07-29T12:57:32.970968-0400 - Iteration = 3, F-1 score = 0.5662337662337663
74 | 2022-07-29T12:57:33.004971-0400 - Iteration = 4, F-1 score = 0.5772151898734177
75 | 2022-07-29T12:57:33.036594-0400 - Iteration = 5, F-1 score = 0.5775656324582338
76 | 2022-07-29T12:57:33.064271-0400 - Iteration = 6, F-1 score = 0.6406926406926408
77 | 2022-07-29T12:57:33.100787-0400 - Iteration = 7, F-1 score = 0.5804749340369394
78 | 2022-07-29T12:57:33.137086-0400 - Iteration = 8, F-1 score = 0.5939086294416244
79 | 2022-07-29T12:57:33.168050-0400 - Iteration = 9, F-1 score = 0.6057692307692308
80 | 2022-07-29T12:57:33.196646-0400 - Iteration = 10, F-1 score = 0.6164383561643836
81 | 2022-07-29T12:57:33.224646-0400 - Iteration = 11, F-1 score = 0.6384778012684988
82 | 2022-07-29T12:57:33.259648-0400 - Iteration = 12, F-1 score = 0.5891472868217055
83 | 2022-07-29T12:57:33.291645-0400 - Iteration = 13, F-1 score = 0.6153846153846154
84 | 2022-07-29T12:57:33.326643-0400 - Iteration = 14, F-1 score = 0.6179245283018868
85 | 2022-07-29T12:57:33.355370-0400 - Iteration = 15, F-1 score = 0.6353467561521252
86 | 2022-07-29T12:57:33.384001-0400 - Iteration = 16, F-1 score = 0.6443514644351465
87 | 2022-07-29T12:57:33.424969-0400 - Iteration = 17, F-1 score = 0.6020408163265305
88 | 2022-07-29T12:57:33.456965-0400 - Iteration = 18, F-1 score = 0.6222222222222222
89 | 2022-07-29T12:57:33.487409-0400 - Iteration = 19, F-1 score = 0.619385342789598
90 | 2022-07-29T12:57:33.517409-0400 - Iteration = 20, F-1 score = 0.6367713004484306
91 | 2022-07-29T12:57:33.548374-0400 - Iteration = 21, F-1 score = 0.6446280991735537
92 | 2022-07-29T12:57:33.583409-0400 - Iteration = 22, F-1 score = 0.6025316455696202
93 | 2022-07-29T12:57:33.614376-0400 - Iteration = 23, F-1 score = 0.6153846153846154
94 | 2022-07-29T12:57:33.645380-0400 - Iteration = 24, F-1 score = 0.6211764705882352
95 | 2022-07-29T12:57:33.676409-0400 - Iteration = 25, F-1 score = 0.6385809312638581
96 | 2022-07-29T12:57:33.705376-0400 - Iteration = 26, F-1 score = 0.6344294003868473
97 | 2022-07-29T12:57:33.739373-0400 - Iteration = 27, F-1 score = 0.6218905472636816
98 | 2022-07-29T12:57:33.771409-0400 - Iteration = 28, F-1 score = 0.6258823529411764
99 | 2022-07-29T12:57:33.800429-0400 - Iteration = 29, F-1 score = 0.642696629213483
100 | 2022-07-29T12:57:33.828373-0400 - Iteration = 30, F-1 score = 0.6459627329192547
101 | 2022-07-29T12:57:33.874381-0400 - Iteration = 31, F-1 score = 0.6055979643765903
102 | 2022-07-29T12:57:33.918377-0400 - Iteration = 32, F-1 score = 0.6203473945409429
103 | 2022-07-29T12:57:33.955378-0400 - Iteration = 33, F-1 score = 0.6244131455399062
104 | 2022-07-29T12:57:33.994375-0400 - Iteration = 34, F-1 score = 0.6383928571428571
105 | 2022-07-29T12:57:34.031374-0400 - Iteration = 35, F-1 score = 0.6344294003868473
106 | 2022-07-29T12:57:34.072374-0400 - Iteration = 36, F-1 score = 0.6218905472636816
107 | 2022-07-29T12:57:34.112379-0400 - Iteration = 37, F-1 score = 0.6258823529411764
108 | 2022-07-29T12:57:34.147379-0400 - Iteration = 38, F-1 score = 0.642696629213483
109 | 2022-07-29T12:57:34.181378-0400 - Iteration = 39, F-1 score = 0.6459627329192547
110 | 2022-07-29T12:57:34.219376-0400 - Iteration = 40, F-1 score = 0.6055979643765903
111 | 2022-07-29T12:57:34.249372-0400 - Iteration = 41, F-1 score = 0.6203473945409429
112 | 2022-07-29T12:57:34.278373-0400 - Iteration = 42, F-1 score = 0.6244131455399062
113 | 2022-07-29T12:57:34.306378-0400 - Iteration = 43, F-1 score = 0.6383928571428571
114 | 2022-07-29T12:57:34.332409-0400 - Iteration = 44, F-1 score = 0.6344294003868473
115 | 2022-07-29T12:57:34.363410-0400 - Iteration = 45, F-1 score = 0.6218905472636816
116 | 2022-07-29T12:57:34.393412-0400 - Iteration = 46, F-1 score = 0.6258823529411764
117 | 2022-07-29T12:57:34.440751-0400 - Iteration = 47, F-1 score = 0.642696629213483
118 | 2022-07-29T12:57:34.468743-0400 - Iteration = 48, F-1 score = 0.6459627329192547
119 | 2022-07-29T12:57:34.506745-0400 - Iteration = 49, F-1 score = 0.6055979643765903
120 | 2022-07-29T12:57:34.614744-0400 - Length of prediction results = 500
121 | 2022-07-29T12:57:34.618743-0400 - Final AutoOD F-1 Score= 0.6055979643765903
122 |
--------------------------------------------------------------------------------
/results/log_spambase_csv_csv_1659116425:
--------------------------------------------------------------------------------
1 | 2022-07-29T13:40:02.512245-0400 - selected methods = ['lof', 'knn', 'if', 'mahala']
2 | 2022-07-29T13:40:02.516246-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label
3 | 2022-07-29T13:40:02.519247-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0%
4 | 2022-07-29T13:40:02.522262-0400 - Dataset Name = spambase_csv
5 | 2022-07-29T13:40:02.532246-0400 - Outlier Range defined as [5.0%, 15.0%]
6 | 2022-07-29T13:40:07.945498-0400 - Dataset size = (500, 57), dataset label size = (500,)
7 | 2022-07-29T13:40:07.950499-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
8 | 2022-07-29T13:40:10.377495-0400 - Best LOF F-1 = 0.4106463878326996
9 | 2022-07-29T13:40:10.384504-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
10 | 2022-07-29T13:40:12.870516-0400 - Best KNN F-1 = 0.42585551330798477
11 | 2022-07-29T13:40:12.879500-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9]
12 | 2022-07-29T13:40:16.194503-0400 - Best IF F-1 = 0.16309012875536483
13 | 2022-07-29T13:40:16.197503-0400 - Start running Mahalanobis..
14 | 2022-07-29T13:40:16.512498-0400 - Best Mahala F-1 = 0.20849420849420852
15 | 2022-07-29T13:40:16.516503-0400 - Best Unsupervised F-1 Score = 0.42585551330798477
16 | 2022-07-29T13:40:16.519501-0400 - Best Unsupervised Outlier Detection Method = ['KNN']
17 | 2022-07-29T13:40:16.524505-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]]
18 | 2022-07-29T13:40:16.528497-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]]
19 | 2022-07-29T13:40:16.543316-0400 - F1 for Majority Vote:0.25225225225225223
20 | 2022-07-29T13:40:16.546319-0400 - ##################################################################
21 | 2022-07-29T13:40:16.549322-0400 - Start First-round AutoOD training...
22 | 2022-07-29T13:40:16.683316-0400 - Iteration = 0, F-1 score = 0.34408602150537626
23 | 2022-07-29T13:40:16.868314-0400 - Iteration = 1, F-1 score = 0.373134328358209
24 | 2022-07-29T13:40:17.012326-0400 - Iteration = 2, F-1 score = 0.4551282051282051
25 | 2022-07-29T13:40:17.130325-0400 - Iteration = 3, F-1 score = 0.48275862068965514
26 | 2022-07-29T13:40:17.227315-0400 - Iteration = 4, F-1 score = 0.5139664804469274
27 | 2022-07-29T13:40:17.341317-0400 - Iteration = 5, F-1 score = 0.5824742268041238
28 | 2022-07-29T13:40:17.427318-0400 - Iteration = 6, F-1 score = 0.5885167464114833
29 | 2022-07-29T13:40:17.510317-0400 - Iteration = 7, F-1 score = 0.6404958677685951
30 | 2022-07-29T13:40:17.629313-0400 - Iteration = 8, F-1 score = 0.5691489361702128
31 | 2022-07-29T13:40:17.721312-0400 - Iteration = 9, F-1 score = 0.5861182519280205
32 | 2022-07-29T13:40:17.814315-0400 - Iteration = 10, F-1 score = 0.5864661654135338
33 | 2022-07-29T13:40:17.896316-0400 - Iteration = 11, F-1 score = 0.5961538461538461
34 | 2022-07-29T13:40:17.980314-0400 - Iteration = 12, F-1 score = 0.6139954853273137
35 | 2022-07-29T13:40:18.064314-0400 - Iteration = 13, F-1 score = 0.5429362880886428
36 | 2022-07-29T13:40:18.135314-0400 - Iteration = 14, F-1 score = 0.5669291338582678
37 | 2022-07-29T13:40:18.205317-0400 - Iteration = 15, F-1 score = 0.5809768637532133
38 | 2022-07-29T13:40:18.268314-0400 - Iteration = 16, F-1 score = 0.5819070904645476
39 | 2022-07-29T13:40:18.333316-0400 - Iteration = 17, F-1 score = 0.5995316159250585
40 | 2022-07-29T13:40:18.394319-0400 - Iteration = 18, F-1 score = 0.6271929824561404
41 | 2022-07-29T13:40:18.472320-0400 - Iteration = 19, F-1 score = 0.5489130434782608
42 | 2022-07-29T13:40:18.547312-0400 - Iteration = 20, F-1 score = 0.5699481865284974
43 | 2022-07-29T13:40:18.622317-0400 - Iteration = 21, F-1 score = 0.576530612244898
44 | 2022-07-29T13:40:18.680313-0400 - Iteration = 22, F-1 score = 0.5825242718446602
45 | 2022-07-29T13:40:18.743314-0400 - Iteration = 23, F-1 score = 0.5849056603773585
46 | 2022-07-29T13:40:18.801355-0400 - Iteration = 24, F-1 score = 0.6103896103896104
47 | 2022-07-29T13:40:18.872313-0400 - Iteration = 25, F-1 score = 0.5561497326203209
48 | 2022-07-29T13:40:18.945312-0400 - Iteration = 26, F-1 score = 0.5538461538461539
49 | 2022-07-29T13:40:19.011315-0400 - Iteration = 27, F-1 score = 0.5700000000000001
50 | 2022-07-29T13:40:19.087319-0400 - Iteration = 28, F-1 score = 0.5819070904645476
51 | 2022-07-29T13:40:19.159321-0400 - Iteration = 29, F-1 score = 0.611111111111111
52 | 2022-07-29T13:40:19.231320-0400 - Iteration = 30, F-1 score = 0.620253164556962
53 | 2022-07-29T13:40:19.315314-0400 - Iteration = 31, F-1 score = 0.5599999999999999
54 | 2022-07-29T13:40:19.394318-0400 - Iteration = 32, F-1 score = 0.5604113110539845
55 | 2022-07-29T13:40:19.474315-0400 - Iteration = 33, F-1 score = 0.5792079207920793
56 | 2022-07-29T13:40:19.558315-0400 - Iteration = 34, F-1 score = 0.5783132530120483
57 | 2022-07-29T13:40:19.638358-0400 - Iteration = 35, F-1 score = 0.6160919540229884
58 | 2022-07-29T13:40:19.728320-0400 - Iteration = 36, F-1 score = 0.5582655826558265
59 | 2022-07-29T13:40:19.807315-0400 - Iteration = 37, F-1 score = 0.5638297872340425
60 | 2022-07-29T13:40:19.882315-0400 - Iteration = 38, F-1 score = 0.5639686684073107
61 | 2022-07-29T13:40:19.953319-0400 - Iteration = 39, F-1 score = 0.5778894472361809
62 | 2022-07-29T13:40:20.018317-0400 - Iteration = 40, F-1 score = 0.5896226415094339
63 | 2022-07-29T13:40:20.081312-0400 - Iteration = 41, F-1 score = 0.6122448979591837
64 | 2022-07-29T13:40:20.205316-0400 - Iteration = 42, F-1 score = 0.5489130434782608
65 | 2022-07-29T13:40:20.289313-0400 - Iteration = 43, F-1 score = 0.5684210526315789
66 | 2022-07-29T13:40:20.356317-0400 - Iteration = 44, F-1 score = 0.5803108808290155
67 | 2022-07-29T13:40:20.428313-0400 - Iteration = 45, F-1 score = 0.5864661654135338
68 | 2022-07-29T13:40:20.498319-0400 - Iteration = 46, F-1 score = 0.5879518072289157
69 | 2022-07-29T13:40:20.572330-0400 - Iteration = 47, F-1 score = 0.6139954853273137
70 | 2022-07-29T13:40:20.645317-0400 - Iteration = 48, F-1 score = 0.5464480874316939
71 | 2022-07-29T13:40:20.718350-0400 - Iteration = 49, F-1 score = 0.5706806282722513
72 | 2022-07-29T13:40:21.390317-0400 - ##################################################################
73 | 2022-07-29T13:40:21.394317-0400 - Start Second-round AutoOD training...
74 | 2022-07-29T13:40:21.462314-0400 - Iteration = 0, F-1 score = 0.5985401459854015
75 | 2022-07-29T13:40:21.544330-0400 - Iteration = 1, F-1 score = 0.592964824120603
76 | 2022-07-29T13:40:21.610314-0400 - Iteration = 2, F-1 score = 0.611111111111111
77 | 2022-07-29T13:40:21.664325-0400 - Iteration = 3, F-1 score = 0.636
78 | 2022-07-29T13:40:21.754325-0400 - Iteration = 4, F-1 score = 0.575197889182058
79 | 2022-07-29T13:40:21.849317-0400 - Iteration = 5, F-1 score = 0.5861182519280205
80 | 2022-07-29T13:40:21.937838-0400 - Iteration = 6, F-1 score = 0.5939086294416244
81 | 2022-07-29T13:40:22.009834-0400 - Iteration = 7, F-1 score = 0.6223277909738718
82 | 2022-07-29T13:40:22.068841-0400 - Iteration = 8, F-1 score = 0.6376237623762376
83 | 2022-07-29T13:40:22.137845-0400 - Iteration = 9, F-1 score = 0.5879265091863517
84 | 2022-07-29T13:40:22.221842-0400 - Iteration = 10, F-1 score = 0.5861182519280205
85 | 2022-07-29T13:40:22.337839-0400 - Iteration = 11, F-1 score = 0.582716049382716
86 | 2022-07-29T13:40:22.417836-0400 - Iteration = 12, F-1 score = 0.6086956521739131
87 | 2022-07-29T13:40:22.498839-0400 - Iteration = 13, F-1 score = 0.6100917431192661
88 | 2022-07-29T13:40:22.619837-0400 - Iteration = 14, F-1 score = 0.547945205479452
89 | 2022-07-29T13:40:22.714840-0400 - Iteration = 15, F-1 score = 0.543010752688172
90 | 2022-07-29T13:40:22.807838-0400 - Iteration = 16, F-1 score = 0.5654450261780105
91 | 2022-07-29T13:40:22.887839-0400 - Iteration = 17, F-1 score = 0.5801526717557253
92 | 2022-07-29T13:40:22.965838-0400 - Iteration = 18, F-1 score = 0.574938574938575
93 | 2022-07-29T13:40:23.043838-0400 - Iteration = 19, F-1 score = 0.6090909090909091
94 | 2022-07-29T13:40:23.125838-0400 - Iteration = 20, F-1 score = 0.5424657534246574
95 | 2022-07-29T13:40:23.197836-0400 - Iteration = 21, F-1 score = 0.5608465608465608
96 | 2022-07-29T13:40:23.263838-0400 - Iteration = 22, F-1 score = 0.5677083333333334
97 | 2022-07-29T13:40:23.321842-0400 - Iteration = 23, F-1 score = 0.5612244897959183
98 | 2022-07-29T13:40:23.387843-0400 - Iteration = 24, F-1 score = 0.5658536585365853
99 | 2022-07-29T13:40:23.445838-0400 - Iteration = 25, F-1 score = 0.5977011494252874
100 | 2022-07-29T13:40:23.527842-0400 - Iteration = 26, F-1 score = 0.5409836065573771
101 | 2022-07-29T13:40:23.618838-0400 - Iteration = 27, F-1 score = 0.5454545454545454
102 | 2022-07-29T13:40:23.676839-0400 - Iteration = 28, F-1 score = 0.5602094240837696
103 | 2022-07-29T13:40:23.737838-0400 - Iteration = 29, F-1 score = 0.5772151898734177
104 | 2022-07-29T13:40:23.799843-0400 - Iteration = 30, F-1 score = 0.5851318944844125
105 | 2022-07-29T13:40:23.863838-0400 - Iteration = 31, F-1 score = 0.6022988505747127
106 | 2022-07-29T13:40:23.936841-0400 - Iteration = 32, F-1 score = 0.5528455284552845
107 | 2022-07-29T13:40:24.008839-0400 - Iteration = 33, F-1 score = 0.5493333333333333
108 | 2022-07-29T13:40:24.073840-0400 - Iteration = 34, F-1 score = 0.5677083333333334
109 | 2022-07-29T13:40:24.153837-0400 - Iteration = 35, F-1 score = 0.5793450881612091
110 | 2022-07-29T13:40:24.231840-0400 - Iteration = 36, F-1 score = 0.5871121718377089
111 | 2022-07-29T13:40:24.314846-0400 - Iteration = 37, F-1 score = 0.6139954853273137
112 | 2022-07-29T13:40:24.407844-0400 - Iteration = 38, F-1 score = 0.5464480874316939
113 | 2022-07-29T13:40:24.500839-0400 - Iteration = 39, F-1 score = 0.5631578947368421
114 | 2022-07-29T13:40:24.593841-0400 - Iteration = 40, F-1 score = 0.5788113695090439
115 | 2022-07-29T13:40:24.690367-0400 - Iteration = 41, F-1 score = 0.5864661654135338
116 | 2022-07-29T13:40:24.806367-0400 - Iteration = 42, F-1 score = 0.5913461538461539
117 | 2022-07-29T13:40:24.885367-0400 - Iteration = 43, F-1 score = 0.618510158013544
118 | 2022-07-29T13:40:24.988365-0400 - Iteration = 44, F-1 score = 0.5464480874316939
119 | 2022-07-29T13:40:25.074365-0400 - Iteration = 45, F-1 score = 0.5706806282722513
120 | 2022-07-29T13:40:25.152364-0400 - Iteration = 46, F-1 score = 0.5824742268041238
121 | 2022-07-29T13:40:25.246367-0400 - Iteration = 47, F-1 score = 0.5864661654135338
122 | 2022-07-29T13:40:25.312363-0400 - Iteration = 48, F-1 score = 0.5913461538461539
123 | 2022-07-29T13:40:25.435367-0400 - Iteration = 49, F-1 score = 0.625
124 | 2022-07-29T13:40:25.632369-0400 - Length of prediction results = 500
125 | 2022-07-29T13:40:25.640369-0400 - Final AutoOD F-1 Score= 0.625
126 |
--------------------------------------------------------------------------------
/static/css/style.css:
--------------------------------------------------------------------------------
1 | /* table related */
2 | table {
3 | width: 60%;
4 | }
5 |
6 | .table-full {
7 | width: 95%;
8 | }
9 |
10 | .table-small {
11 | width: 30%
12 | }
13 |
14 | a.active {
15 | color: white;
16 | background-color: #4CAF50;
17 | }
18 |
19 | .clickable {
20 | cursor: pointer;
21 | }
22 |
23 | .clickable:hover {
24 | color: #990000;
25 | }
26 |
27 | .redirect {
28 | cursor: pointer;
29 | }
30 |
31 | .redirect:hover {
32 | color: #990000;
33 | }
34 |
35 | th, td {
36 | padding: 8px 15px;
37 | text-align: left;
38 | }
39 |
40 | .collapse-table {
41 | width: 100%;
42 | }
43 |
44 | tr:nth-child(even) {
45 | background-color: #f2f2f2;
46 | }
47 |
48 | .annotation-font {
49 | color: #606060;
50 | font-size: 12px;
51 | }
52 |
53 | /* link related */
54 | a:link {
55 | text-decoration: none;
56 | color: #606060;
57 | }
58 |
59 | a:active, a:hover {
60 | text-decoration: none;
61 | color: #990000;
62 | }
63 |
64 | /** modify input */
65 | input[type=text] {
66 | padding: 3px 7px;
67 | margin: 5px 0;
68 | box-sizing: border-box;
69 | font-size: 15px;
70 | }
71 |
72 | .sansserif {
73 | font-family: Arial, Helvetica, sans-serif;
74 | }
75 |
76 | .button {
77 | background-color: white;
78 | color: black;
79 | border: 2px solid #e7e7e7;
80 | padding: 10px 21px;
81 | text-align: center;
82 | text-decoration: none;
83 | display: inline-block;
84 | font-size: 15px;
85 | }
86 |
87 | .button:hover {
88 | background-color: #e7e7e7;
89 | color: white;
90 | }
91 |
92 | input[type="file"] {
93 | display: none;
94 | }
95 |
96 | .custom-file-upload {
97 | border: 1px solid #ccc;
98 | display: inline-block;
99 | padding: 6px 12px;
100 | cursor: pointer;
101 | }
102 |
103 | .custom-file-upload:hover {
104 | background-color: #e7e7e7;
105 | color: white;
106 | }
107 |
108 | .inputfile-box {
109 | position: relative;
110 | }
111 |
112 | .inputfile {
113 | display: none;
114 | }
115 |
116 | .container {
117 | display: inline-block;
118 | width: 100%;
119 | }
120 |
121 | .file-box {
122 | display: inline-block;
123 | width: 100%;
124 | border: 1px solid #ccc;
125 | padding: 5px 0px 5px 5px;
126 | box-sizing: border-box;
127 | height: calc(2rem - 2px);
128 | }
129 |
130 | .file-button {
131 | /* background: white; */
132 | padding: 5px;
133 | position: absolute;
134 | border: 1px solid #ccc;
135 | top: 0px;
136 | right: 0px;
137 | }
138 |
139 | .file-button:hover {
140 | color: #990000;
141 | }
142 |
143 | .header {
144 | background-color: #eeeeee;
145 | color: #404040;
146 | /* text-align: center; */
147 | padding: 0.01em;
148 | }
149 |
150 | .header-image {
151 | /* display: inline-block; */
152 | width: 120px;
153 | /* border: 1px solid #ccc; */
154 | padding: 5px 0px 5px 5px;
155 | box-sizing: border-box;
156 | }
157 |
158 | .header-text {
159 | /* background: white; */
160 | padding: 5px 0px 5px 5px;
161 | position: absolute;
162 | /* border: 1px solid #ccc; */
163 | /* top: 0px; */
164 | right: 80%;
165 | font-family: "Segoe UI", Arial, sans-serif
166 | }
167 |
168 | /* Style the header */
169 | .header {
170 | background-color: #f1f1f1;
171 | padding: 10px;
172 | text-align: center;
173 | }
174 |
175 |
176 | .footer {
177 | position: fixed;
178 | height: 50px;
179 | width: 100%;
180 | background-color: #eeeeee;
181 | bottom: 0;
182 | }
183 |
184 | p.copyright {
185 | position: fixed;
186 | width: 100%;
187 | color: black;
188 | /* line-height: 40px; */
189 | font-size: 0.7em;
190 | text-align: center;
191 | bottom: 0;
192 | }
193 |
194 | /* Style the top navigation bar */
195 | .topnav {
196 | overflow: hidden;
197 | background-color: #333;
198 | }
199 |
200 | /* Style the topnav links */
201 | .topnav a {
202 | float: left;
203 | display: block;
204 | color: #f2f2f2;
205 | text-align: center;
206 | padding: 14px 16px;
207 | text-decoration: none;
208 | font-size: 17px;
209 | }
210 |
211 | /* Hide the link that should open and close the topnav on small screens */
212 | .topnav .icon {
213 | display: none;
214 | }
215 |
216 | /* Dropdown container - needed to position the dropdown content */
217 | .dropdown {
218 | float: left;
219 | overflow: hidden;
220 | }
221 |
222 | /* Style the dropdown button to fit inside the topnav */
223 | .dropdown .dropbtn {
224 | font-size: 17px;
225 | border: none;
226 | outline: none;
227 | color: white;
228 | padding: 14px 16px;
229 | background-color: inherit;
230 | font-family: inherit;
231 | margin: 0;
232 | }
233 |
234 | /* Style the dropdown content (hidden by default) */
235 | .dropdown-content {
236 | display: none;
237 | position: absolute;
238 | background-color: #f9f9f9;
239 | min-width: 160px;
240 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
241 | z-index: 1;
242 | }
243 |
244 | /* Style the links inside the dropdown */
245 | .dropdown-content a {
246 | float: none;
247 | color: black;
248 | padding: 12px 16px;
249 | text-decoration: none;
250 | display: block;
251 | text-align: left;
252 | }
253 |
254 | /* Add a dark background on topnav links and the dropdown button on hover */
255 | .topnav a:hover, .dropdown:hover .dropbtn {
256 | background-color: #555;
257 | color: white;
258 | }
259 |
260 | /* Add a grey background to dropdown links on hover */
261 | .dropdown-content a:hover {
262 | background-color: #ddd;
263 | color: black;
264 | }
265 |
266 | /* Show the dropdown menu when the user moves the mouse over the dropdown button */
267 | .dropdown:hover .dropdown-content {
268 | display: block;
269 | }
270 |
271 | /* When the screen is less than 600 pixels wide, hide all links, except for the first one ("Home"). Show the link that contains should open and close the topnav (.icon) */
272 | @media screen and (max-width: 600px) {
273 | .topnav a:not(:first-child), .dropdown .dropbtn {
274 | display: none;
275 | }
276 |
277 | .topnav a.icon {
278 | float: right;
279 | display: block;
280 | }
281 | }
282 |
283 | /* The "responsive" class is added to the topnav with JavaScript when the user clicks on the icon. This class makes the topnav look good on small screens (display the links vertically instead of horizontally) */
284 | @media screen and (max-width: 600px) {
285 | .topnav.responsive {
286 | position: relative;
287 | }
288 |
289 | .topnav.responsive a.icon {
290 | position: absolute;
291 | right: 0;
292 | top: 0;
293 | }
294 |
295 | .topnav.responsive a {
296 | float: none;
297 | display: block;
298 | text-align: left;
299 | }
300 |
301 | .topnav.responsive .dropdown {
302 | float: none;
303 | }
304 |
305 | .topnav.responsive .dropdown-content {
306 | position: relative;
307 | }
308 |
309 | .topnav.responsive .dropdown .dropbtn {
310 | display: block;
311 | width: 100%;
312 | text-align: left;
313 | }
314 | }
315 |
316 | .tooltip {
317 | position: relative;
318 | display: inline-block;
319 | /*border-bottom: 1px dotted black;*/
320 | }
321 |
322 | .tooltip .tooltiptext {
323 | visibility: hidden;
324 | width: 400px;
325 | background-color: black;
326 | color: #fff;
327 | text-align: left;
328 | border-radius: 6px;
329 | padding: 5px 5px;
330 | position: absolute;
331 | z-index: 1;
332 | top: -5px;
333 | left: 110%;
334 | }
335 |
336 | .tooltip .tooltiptext::after {
337 | content: "";
338 | position: absolute;
339 | top: 50%;
340 | right: 100%;
341 | margin-top: -5px;
342 | border-width: 5px;
343 | border-style: solid;
344 | border-color: transparent black transparent transparent;
345 | }
346 |
347 | .tooltip:hover .tooltiptext {
348 | visibility: visible;
349 | }
350 |
351 | /* Create three equal columns that floats next to each other */
352 | .column {
353 | float: left;
354 | width: 30%;
355 | padding: 15px;
356 | }
357 |
358 | /* Create three equal columns that floats next to each other */
359 | .column_main {
360 | float: left;
361 | width: 60%;
362 | padding: 15px;
363 | }
364 |
365 | /* Clear floats after the columns */
366 | .row:after {
367 | content: "";
368 | display: table;
369 | clear: both;
370 | }
371 |
372 | .select-style {
373 | border: 2px solid #ccc;
374 | width: 150px;
375 | font-size: 15px;
376 | border-radius: 1px;
377 | overflow: hidden;
378 | text-overflow: ellipsis;
379 | /*background: #fafafa url("img/icon-select.png") no-repeat;*/
380 | }
381 |
382 | .select-style select {
383 | padding: 10px 10px;
384 | width: 150%;
385 | border: none;
386 | box-shadow: none;
387 | background: transparent;
388 | background-image: none;
389 | -webkit-appearance: none;
390 | }
391 |
392 | .select-style select:focus {
393 | outline: none;
394 | }
395 | .logging_window{
396 | display: block;
397 | padding: 9.5px;
398 | font-size: 13px;
399 | line-height: 1.42857143;
400 | color: #333;
401 | word-break: break-all;
402 | word-wrap: break-word;
403 | background-color: #f5f5f5;
404 | border: 1px solid #ccc;
405 | border-radius: 4px;
406 | width: 80%;
407 | margin: auto;
408 | }
409 |
410 | /*!* -------------------- Select Box Styles: stackoverflow.com Method *!*/
411 | /*!* -------------------- Source: http://stackoverflow.com/a/5809186 *!*/
412 | /*select#soflow, select#soflow-color {*/
413 |
414 | /*background-image: url(http://i62.tinypic.com/15xvbd5.png), -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);*/
415 | /*background-position: 97% center;*/
416 | /*background-repeat: no-repeat;*/
417 | /*border: 1px solid #AAA;*/
418 | /*color: #555;*/
419 | /*font-size: inherit;*/
420 | /*margin: 10px;*/
421 | /*overflow: hidden;*/
422 | /*padding: 5px 10px;*/
423 | /*text-overflow: ellipsis;*/
424 | /*white-space: nowrap;*/
425 | /*width: 200px;*/
426 | /*}*/
427 |
428 | /*select#soflow-color {*/
429 | /*color: #fff;*/
430 | /*background-image: url(http://i62.tinypic.com/15xvbd5.png), -webkit-linear-gradient(#779126, #779126 40%, #779126);*/
431 | /*background-color: #779126;*/
432 | /*-webkit-border-radius: 20px;*/
433 | /*-moz-border-radius: 20px;*/
434 | /*border-radius: 20px;*/
435 | /*padding-left: 15px;*/
436 | /*}*/
437 | /*!* Responsive layout - makes the three columns stack on top of each other instead of next to each other *!*/
438 | /*@media screen and (max-width:600px) {*/
439 | /*.column {*/
440 | /*width: 100%;*/
441 | /*}*/
442 | /*}*/
--------------------------------------------------------------------------------
/static/css/bootstrap.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.4 (http://getbootstrap.com)
3 | * Copyright 2011-2015 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */
6 |
7 | select {
8 | text-transform: none
9 | }
10 |
11 | input[type=checkbox] {
12 | -webkit-box-sizing: border-box;
13 | -moz-box-sizing: border-box;
14 | box-sizing: border-box;
15 | padding: 0
16 | }
17 |
18 | select {
19 | font-family: inherit;
20 | font-size: inherit;
21 | line-height: inherit
22 | }
23 |
24 | input[type=checkbox] {
25 | margin: 4px 0 0;
26 | margin-top: 1px \9;
27 | line-height: normal
28 | }
29 |
30 | select[multiple], select[size] {
31 | height: auto
32 | }
33 |
34 | input[type=checkbox]:focus, input[type=radio]:focus {
35 | outline: thin dotted;
36 | outline: 5px auto -webkit-focus-ring-color;
37 | outline-offset: -2px
38 | }
39 |
40 | .form-group {
41 | margin-bottom: 15px
42 | }
43 |
44 | .checkbox, .radio {
45 | position: relative;
46 | display: block;
47 | margin-top: 10px;
48 | margin-bottom: 10px
49 | }
50 |
51 | .checkbox label, .radio label {
52 | min-height: 20px;
53 | padding-left: 20px;
54 | margin-bottom: 0;
55 | font-weight: 400;
56 | cursor: pointer
57 | }
58 |
59 | .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] {
60 | position: absolute;
61 | margin-top: 4px \9;
62 | margin-left: -20px
63 | }
64 |
65 | .checkbox + .checkbox, .radio + .radio {
66 | margin-top: -5px
67 | }
68 |
69 | .checkbox-inline, .radio-inline {
70 | position: relative;
71 | display: inline-block;
72 | padding-left: 20px;
73 | margin-bottom: 0;
74 | font-weight: 400;
75 | vertical-align: middle;
76 | cursor: pointer
77 | }
78 |
79 | .checkbox-inline + .checkbox-inline, .radio-inline + .radio-inline {
80 | margin-top: 0;
81 | margin-left: 10px
82 | }
83 |
84 | .checkbox-inline.disabled, .radio-inline.disabled, fieldset[disabled] .checkbox-inline, fieldset[disabled] .radio-inline {
85 | cursor: not-allowed
86 | }
87 |
88 | .checkbox.disabled label, .radio.disabled label, fieldset[disabled] .checkbox label, fieldset[disabled] .radio label {
89 | cursor: not-allowed
90 | }
91 |
92 | select[multiple].form-group-sm .form-control, textarea.form-group-sm .form-control {
93 | height: auto
94 | }
95 |
96 | .form-group-sm .form-control-static {
97 | height: 30px;
98 | min-height: 32px;
99 | padding: 5px 10px;
100 | font-size: 12px;
101 | line-height: 1.5
102 | }
103 |
104 | .form-group-lg .form-control {
105 | height: 46px;
106 | padding: 10px 16px;
107 | font-size: 18px;
108 | line-height: 1.3333333;
109 | border-radius: 6px
110 | }
111 |
112 | select.form-group-lg .form-control {
113 | height: 46px;
114 | line-height: 46px
115 | }
116 |
117 | select[multiple].form-group-lg .form-control, textarea.form-group-lg .form-control {
118 | height: auto
119 | }
120 |
121 | .form-group-lg .form-control-static {
122 | height: 46px;
123 | min-height: 38px;
124 | padding: 10px 16px;
125 | font-size: 18px;
126 | line-height: 1.3333333
127 | }
128 |
129 |
130 | .form-horizontal .checkbox, .form-horizontal .checkbox-inline, .form-horizontal .radio, .form-horizontal .radio-inline {
131 | padding-top: 7px;
132 | margin-top: 0;
133 | margin-bottom: 0
134 | }
135 |
136 | .form-horizontal .checkbox, .form-horizontal .radio {
137 | min-height: 27px
138 | }
139 |
140 | .form-horizontal .form-group {
141 | margin-right: -15px;
142 | margin-left: -15px
143 | }
144 |
145 | @media (min-width: 768px) {
146 | .form-horizontal .control-label {
147 | padding-top: 7px;
148 | margin-bottom: 0;
149 | text-align: right
150 | }
151 | }
152 |
153 | .form-horizontal .has-feedback .form-control-feedback {
154 | right: 15px
155 | }
156 |
157 | .btn {
158 | display: inline-block;
159 | padding: 6px 12px;
160 | margin-bottom: 0;
161 | font-size: 14px;
162 | font-weight: 400;
163 | line-height: 1.42857143;
164 | text-align: center;
165 | white-space: nowrap;
166 | vertical-align: middle;
167 | -ms-touch-action: manipulation;
168 | touch-action: manipulation;
169 | cursor: pointer;
170 | -webkit-user-select: none;
171 | -moz-user-select: none;
172 | -ms-user-select: none;
173 | user-select: none;
174 | background-image: none;
175 | border: 1px solid transparent;
176 | border-radius: 4px
177 | }
178 |
179 | .btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus {
180 | outline: thin dotted;
181 | outline: 5px auto -webkit-focus-ring-color;
182 | outline-offset: -2px
183 | }
184 |
185 | .btn.focus, .btn:focus, .btn:hover {
186 | color: #333;
187 | text-decoration: none
188 | }
189 |
190 | .btn.active, .btn:active {
191 | background-image: none;
192 | outline: 0;
193 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
194 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
195 | }
196 |
197 | .btn.disabled, .btn[disabled], fieldset[disabled] .btn {
198 | pointer-events: none;
199 | cursor: not-allowed;
200 | filter: alpha(opacity=65);
201 | -webkit-box-shadow: none;
202 | box-shadow: none;
203 | opacity: .65
204 | }
205 |
206 | .btn-default {
207 | color: #333;
208 | background-color: #fff;
209 | border-color: #ccc
210 | }
211 |
212 | .btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open > .dropdown-toggle.btn-default {
213 | color: #333;
214 | background-color: #e6e6e6;
215 | border-color: #adadad
216 | }
217 |
218 | .btn-default.active, .btn-default:active, .open > .dropdown-toggle.btn-default {
219 | background-image: none
220 | }
221 |
222 | .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 {
223 | background-color: #fff;
224 | border-color: #ccc
225 | }
226 |
227 | .btn-default .badge {
228 | color: #fff;
229 | background-color: #333
230 | }
231 |
232 | .btn-primary {
233 | color: #fff;
234 | background-color: #337ab7;
235 | border-color: #2e6da4
236 | }
237 |
238 | .btn-primary.active, .btn-primary.focus, .btn-primary:active, .btn-primary:focus, .btn-primary:hover, .open > .dropdown-toggle.btn-primary {
239 | color: #fff;
240 | background-color: #286090;
241 | border-color: #204d74
242 | }
243 |
244 | .btn-primary.active, .btn-primary:active, .open > .dropdown-toggle.btn-primary {
245 | background-image: none
246 | }
247 |
248 | .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 {
249 | background-color: #337ab7;
250 | border-color: #2e6da4
251 | }
252 |
253 | .btn-primary .badge {
254 | color: #337ab7;
255 | background-color: #fff
256 | }
257 |
258 | .btn-link {
259 | font-weight: 400;
260 | color: #337ab7;
261 | border-radius: 0
262 | }
263 |
264 | .btn-link, .btn-link.active, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
265 | background-color: transparent;
266 | -webkit-box-shadow: none;
267 | box-shadow: none
268 | }
269 |
270 | .btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover {
271 | border-color: transparent
272 | }
273 |
274 | .btn-link:focus, .btn-link:hover {
275 | color: #23527c;
276 | text-decoration: underline;
277 | background-color: transparent
278 | }
279 |
280 | .btn-link[disabled]:focus, .btn-link[disabled]:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:hover {
281 | color: #777;
282 | text-decoration: none
283 | }
284 |
285 | .btn-group-lg > .btn, .btn-lg {
286 | padding: 10px 16px;
287 | font-size: 18px;
288 | line-height: 1.3333333;
289 | border-radius: 6px
290 | }
291 |
292 | .btn-group-sm > .btn, .btn-sm {
293 | padding: 5px 10px;
294 | font-size: 12px;
295 | line-height: 1.5;
296 | border-radius: 3px
297 | }
298 |
299 | .btn-group-xs > .btn, .btn-xs {
300 | padding: 1px 5px;
301 | font-size: 12px;
302 | line-height: 1.5;
303 | border-radius: 3px
304 | }
305 |
306 | .btn-block {
307 | display: block;
308 | width: 100%
309 | }
310 |
311 | .btn-block + .btn-block {
312 | margin-top: 5px
313 | }
314 |
315 | input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block {
316 | width: 100%
317 | }
318 |
319 | .fade {
320 | opacity: 0;
321 | -webkit-transition: opacity .15s linear;
322 | -o-transition: opacity .15s linear;
323 | transition: opacity .15s linear
324 | }
325 |
326 | .fade.in {
327 | opacity: 1
328 | }
329 |
330 | .collapse {
331 | display: none
332 | }
333 |
334 | .collapse.in {
335 | display: block
336 | }
337 |
338 | tr.collapse.in {
339 | display: table-row
340 | }
341 |
342 | tbody.collapse.in {
343 | display: table-row-group
344 | }
345 |
346 | .collapsing {
347 | position: relative;
348 | height: 0;
349 | overflow: hidden;
350 | -webkit-transition-timing-function: ease;
351 | -o-transition-timing-function: ease;
352 | transition-timing-function: ease;
353 | -webkit-transition-duration: .35s;
354 | -o-transition-duration: .35s;
355 | transition-duration: .35s;
356 | -webkit-transition-property: height, visibility;
357 | -o-transition-property: height, visibility;
358 | transition-property: height, visibility
359 | }
360 |
361 | .caret {
362 | display: inline-block;
363 | width: 0;
364 | height: 0;
365 | margin-left: 2px;
366 | vertical-align: middle;
367 | border-top: 4px dashed;
368 | border-right: 4px solid transparent;
369 | border-left: 4px solid transparent
370 | }
371 |
372 | .dropdown, .dropup {
373 | position: relative
374 | }
375 |
376 | .dropdown-toggle:focus {
377 | outline: 0
378 | }
379 |
380 | .dropdown-menu {
381 | position: absolute;
382 | top: 100%;
383 | left: 0;
384 | z-index: 1000;
385 | display: none;
386 | float: left;
387 | min-width: 160px;
388 | padding: 5px 0;
389 | margin: 2px 0 0;
390 | font-size: 14px;
391 | text-align: left;
392 | list-style: none;
393 | background-color: #fff;
394 | -webkit-background-clip: padding-box;
395 | background-clip: padding-box;
396 | border: 1px solid #ccc;
397 | border: 1px solid rgba(0, 0, 0, .15);
398 | border-radius: 4px;
399 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
400 | box-shadow: 0 6px 12px rgba(0, 0, 0, .175)
401 | }
402 |
403 | .dropdown-menu.pull-right {
404 | right: 0;
405 | left: auto
406 | }
407 |
408 | .dropdown-menu .divider {
409 | height: 1px;
410 | margin: 9px 0;
411 | overflow: hidden;
412 | background-color: #e5e5e5
413 | }
414 |
415 | .dropdown-menu > li > a {
416 | display: block;
417 | padding: 3px 20px;
418 | clear: both;
419 | font-weight: 400;
420 | line-height: 1.42857143;
421 | color: #333;
422 | white-space: nowrap
423 | }
424 |
425 | .dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover {
426 | color: #262626;
427 | text-decoration: none;
428 | background-color: #f5f5f5
429 | }
430 |
431 | .dropdown-menu > .active > a, .dropdown-menu > .active > a:focus, .dropdown-menu > .active > a:hover {
432 | color: #fff;
433 | text-decoration: none;
434 | background-color: #337ab7;
435 | outline: 0
436 | }
437 |
438 | .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:focus, .dropdown-menu > .disabled > a:hover {
439 | color: #777
440 | }
441 |
442 | .dropdown-menu > .disabled > a:focus, .dropdown-menu > .disabled > a:hover {
443 | text-decoration: none;
444 | cursor: not-allowed;
445 | background-color: transparent;
446 | background-image: none;
447 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false)
448 | }
449 |
450 | .open > .dropdown-menu {
451 | display: block
452 | }
453 |
454 | .open > a {
455 | outline: 0
456 | }
457 |
458 | .dropdown-menu-right {
459 | right: 0;
460 | left: auto
461 | }
462 |
463 | .dropdown-menu-left {
464 | right: auto;
465 | left: 0
466 | }
467 |
468 | .dropdown-header {
469 | display: block;
470 | padding: 3px 20px;
471 | font-size: 12px;
472 | line-height: 1.42857143;
473 | color: #777;
474 | white-space: nowrap
475 | }
476 |
477 | .dropdown-backdrop {
478 | position: fixed;
479 | top: 0;
480 | right: 0;
481 | bottom: 0;
482 | left: 0;
483 | z-index: 990
484 | }
485 |
486 | .pull-right > .dropdown-menu {
487 | right: 0;
488 | left: auto
489 | }
490 |
491 | .dropup .caret, .navbar-fixed-bottom .dropdown .caret {
492 | content: "";
493 | border-top: 0;
494 | border-bottom: 4px solid
495 | }
496 |
497 | .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
498 | top: auto;
499 | bottom: 100%;
500 | margin-bottom: 2px
501 | }
502 |
503 | .btn-group, .btn-group-vertical {
504 | position: relative;
505 | display: inline-block;
506 | vertical-align: middle
507 | }
508 |
509 | .btn-group-vertical > .btn, .btn-group > .btn {
510 | position: relative;
511 | float: left
512 | }
513 |
514 | .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 {
515 | z-index: 2
516 | }
517 |
518 | .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
519 | margin-left: -1px
520 | }
521 |
522 | .btn-toolbar {
523 | margin-left: -5px
524 | }
525 |
526 | .btn-toolbar .btn-group, .btn-toolbar .input-group {
527 | float: left
528 | }
529 |
530 | .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group {
531 | margin-left: 5px
532 | }
533 |
534 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
535 | border-radius: 0
536 | }
537 |
538 | .btn-group > .btn:first-child {
539 | margin-left: 0
540 | }
541 |
542 | .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
543 | border-top-right-radius: 0;
544 | border-bottom-right-radius: 0
545 | }
546 |
547 | .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
548 | border-top-left-radius: 0;
549 | border-bottom-left-radius: 0
550 | }
551 |
552 | .btn-group > .btn-group {
553 | float: left
554 | }
555 |
556 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
557 | border-radius: 0
558 | }
559 |
560 | .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
561 | border-top-right-radius: 0;
562 | border-bottom-right-radius: 0
563 | }
564 |
565 | .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
566 | border-top-left-radius: 0;
567 | border-bottom-left-radius: 0
568 | }
569 |
570 | .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
571 | outline: 0
572 | }
573 |
574 | .btn-group > .btn + .dropdown-toggle {
575 | padding-right: 8px;
576 | padding-left: 8px
577 | }
578 |
579 | .btn-group > .btn-lg + .dropdown-toggle {
580 | padding-right: 12px;
581 | padding-left: 12px
582 | }
583 |
584 | .btn-group.open .dropdown-toggle {
585 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
586 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
587 | }
588 |
589 | .btn-group.open .dropdown-toggle.btn-link {
590 | -webkit-box-shadow: none;
591 | box-shadow: none
592 | }
593 |
594 | .btn .caret {
595 | margin-left: 0
596 | }
597 |
598 | .btn-lg .caret {
599 | border-width: 5px 5px 0;
600 | border-bottom-width: 0
601 | }
602 |
603 | .dropup .btn-lg .caret {
604 | border-width: 0 5px 5px
605 | }
606 |
607 |
608 | [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] {
609 | position: absolute;
610 | clip: rect(0, 0, 0, 0);
611 | pointer-events: none
612 | }
613 |
614 | .input-group {
615 | position: relative;
616 | display: table;
617 | border-collapse: separate
618 | }
619 |
620 | .input-group[class*=col-] {
621 | float: none;
622 | padding-right: 0;
623 | padding-left: 0
624 | }
625 |
626 | .input-group .form-control {
627 | position: relative;
628 | z-index: 2;
629 | float: left;
630 | width: 100%;
631 | margin-bottom: 0
632 | }
633 |
634 | .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn {
635 | height: 46px;
636 | padding: 10px 16px;
637 | font-size: 18px;
638 | line-height: 1.3333333;
639 | border-radius: 6px
640 | }
641 |
642 | select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn {
643 | height: 46px;
644 | line-height: 46px
645 | }
646 |
647 | 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 {
648 | height: auto
649 | }
650 |
651 | .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn {
652 | height: 30px;
653 | padding: 5px 10px;
654 | font-size: 12px;
655 | line-height: 1.5;
656 | border-radius: 3px
657 | }
658 |
659 | select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn {
660 | height: 30px;
661 | line-height: 30px
662 | }
663 |
664 | 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 {
665 | height: auto
666 | }
667 |
668 | .input-group .form-control, .input-group-addon, .input-group-btn {
669 | display: table-cell
670 | }
671 |
672 | .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) {
673 | border-radius: 0
674 | }
675 |
676 | .input-group-addon, .input-group-btn {
677 | width: 1%;
678 | white-space: nowrap;
679 | vertical-align: middle
680 | }
681 |
682 | .input-group-addon {
683 | padding: 6px 12px;
684 | font-size: 14px;
685 | font-weight: 400;
686 | line-height: 1;
687 | color: #555;
688 | text-align: center;
689 | background-color: #eee;
690 | border: 1px solid #ccc;
691 | border-radius: 4px
692 | }
693 |
694 | .input-group-addon.input-sm {
695 | padding: 5px 10px;
696 | font-size: 12px;
697 | border-radius: 3px
698 | }
699 |
700 | .input-group-addon.input-lg {
701 | padding: 10px 16px;
702 | font-size: 18px;
703 | border-radius: 6px
704 | }
705 |
706 | .input-group-addon input[type=checkbox], .input-group-addon input[type=radio] {
707 | margin-top: 0
708 | }
709 |
710 | .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) {
711 | border-top-right-radius: 0;
712 | border-bottom-right-radius: 0
713 | }
714 |
715 | .input-group-addon:first-child {
716 | border-right: 0
717 | }
718 |
719 | .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 {
720 | border-top-left-radius: 0;
721 | border-bottom-left-radius: 0
722 | }
723 |
724 | .input-group-addon:last-child {
725 | border-left: 0
726 | }
727 |
728 | .input-group-btn {
729 | position: relative;
730 | font-size: 0;
731 | white-space: nowrap
732 | }
733 |
734 | .input-group-btn > .btn {
735 | position: relative
736 | }
737 |
738 | .input-group-btn > .btn + .btn {
739 | margin-left: -1px
740 | }
741 |
742 | .input-group-btn > .btn:active, .input-group-btn > .btn:focus, .input-group-btn > .btn:hover {
743 | z-index: 2
744 | }
745 |
746 | .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group {
747 | margin-right: -1px
748 | }
749 |
750 | .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group {
751 | margin-left: -1px
752 | }
753 |
754 | .tab-content > .tab-pane {
755 | display: none
756 | }
757 |
758 | .tab-content > .active {
759 | display: block
760 | }
761 |
762 |
763 | .btn .badge {
764 | position: relative;
765 | top: -1px
766 | }
767 |
768 | .btn-group-xs > .btn .badge, .btn-xs .badge {
769 | top: 0;
770 | padding: 1px 5px
771 | }
772 |
773 | .list-group-item.active > .badge, .nav-pills > .active > a > .badge {
774 | color: #337ab7;
775 | background-color: #fff
776 | }
777 |
778 | .list-group-item > .badge {
779 | float: right
780 | }
781 |
782 | .list-group-item > .badge + .badge {
783 | margin-right: 5px
784 | }
785 |
786 | .list-group {
787 | padding-left: 0;
788 | margin-bottom: 20px
789 | }
790 |
791 | .list-group-item {
792 | position: relative;
793 | display: block;
794 | padding: 10px 15px;
795 | margin-bottom: -1px;
796 | background-color: #fff;
797 | border: 1px solid #ddd
798 | }
799 |
800 | .list-group-item:first-child {
801 | border-top-left-radius: 4px;
802 | border-top-right-radius: 4px
803 | }
804 |
805 | .list-group-item:last-child {
806 | margin-bottom: 0;
807 | border-bottom-right-radius: 4px;
808 | border-bottom-left-radius: 4px
809 | }
810 |
811 | a.list-group-item {
812 | color: #555
813 | }
814 |
815 | a.list-group-item .list-group-item-heading {
816 | color: #333
817 | }
818 |
819 | a.list-group-item:focus, a.list-group-item:hover {
820 | color: #555;
821 | text-decoration: none;
822 | background-color: #f5f5f5
823 | }
824 |
825 | .list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover {
826 | color: #777;
827 | cursor: not-allowed;
828 | background-color: #eee
829 | }
830 |
831 | .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 {
832 | color: inherit
833 | }
834 |
835 | .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 {
836 | color: #777
837 | }
838 |
839 | .list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover {
840 | z-index: 2;
841 | color: #fff;
842 | background-color: #337ab7;
843 | border-color: #337ab7
844 | }
845 |
846 | .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 {
847 | color: inherit
848 | }
849 |
850 | .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 {
851 | color: #c7ddef
852 | }
853 |
854 | .list-group-item-info {
855 | color: #31708f;
856 | background-color: #d9edf7
857 | }
858 |
859 | a.list-group-item-info {
860 | color: #31708f
861 | }
862 |
863 | a.list-group-item-info .list-group-item-heading {
864 | color: inherit
865 | }
866 |
867 | a.list-group-item-info:focus, a.list-group-item-info:hover {
868 | color: #31708f;
869 | background-color: #c4e3f3
870 | }
871 |
872 | a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover {
873 | color: #fff;
874 | background-color: #31708f;
875 | border-color: #31708f
876 | }
877 |
878 | .list-group-item-heading {
879 | margin-top: 0;
880 | margin-bottom: 5px
881 | }
882 |
883 | .list-group-item-text {
884 | margin-bottom: 0;
885 | line-height: 1.3
886 | }
887 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/less/variables.less:
--------------------------------------------------------------------------------
1 | // Variables
2 | // --------------------------
3 |
4 | @fa-font-path: "../fonts";
5 | @fa-font-size-base: 14px;
6 | @fa-line-height-base: 1;
7 | //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly
8 | @fa-css-prefix: fa;
9 | @fa-version: "4.7.0";
10 | @fa-border-color: #eee;
11 | @fa-inverse: #fff;
12 | @fa-li-width: (30em / 14);
13 |
14 | @fa-var-500px: "\f26e";
15 | @fa-var-address-book: "\f2b9";
16 | @fa-var-address-book-o: "\f2ba";
17 | @fa-var-address-card: "\f2bb";
18 | @fa-var-address-card-o: "\f2bc";
19 | @fa-var-adjust: "\f042";
20 | @fa-var-adn: "\f170";
21 | @fa-var-align-center: "\f037";
22 | @fa-var-align-justify: "\f039";
23 | @fa-var-align-left: "\f036";
24 | @fa-var-align-right: "\f038";
25 | @fa-var-amazon: "\f270";
26 | @fa-var-ambulance: "\f0f9";
27 | @fa-var-american-sign-language-interpreting: "\f2a3";
28 | @fa-var-anchor: "\f13d";
29 | @fa-var-android: "\f17b";
30 | @fa-var-angellist: "\f209";
31 | @fa-var-angle-double-down: "\f103";
32 | @fa-var-angle-double-left: "\f100";
33 | @fa-var-angle-double-right: "\f101";
34 | @fa-var-angle-double-up: "\f102";
35 | @fa-var-angle-down: "\f107";
36 | @fa-var-angle-left: "\f104";
37 | @fa-var-angle-right: "\f105";
38 | @fa-var-angle-up: "\f106";
39 | @fa-var-apple: "\f179";
40 | @fa-var-archive: "\f187";
41 | @fa-var-area-chart: "\f1fe";
42 | @fa-var-arrow-circle-down: "\f0ab";
43 | @fa-var-arrow-circle-left: "\f0a8";
44 | @fa-var-arrow-circle-o-down: "\f01a";
45 | @fa-var-arrow-circle-o-left: "\f190";
46 | @fa-var-arrow-circle-o-right: "\f18e";
47 | @fa-var-arrow-circle-o-up: "\f01b";
48 | @fa-var-arrow-circle-right: "\f0a9";
49 | @fa-var-arrow-circle-up: "\f0aa";
50 | @fa-var-arrow-down: "\f063";
51 | @fa-var-arrow-left: "\f060";
52 | @fa-var-arrow-right: "\f061";
53 | @fa-var-arrow-up: "\f062";
54 | @fa-var-arrows: "\f047";
55 | @fa-var-arrows-alt: "\f0b2";
56 | @fa-var-arrows-h: "\f07e";
57 | @fa-var-arrows-v: "\f07d";
58 | @fa-var-asl-interpreting: "\f2a3";
59 | @fa-var-assistive-listening-systems: "\f2a2";
60 | @fa-var-asterisk: "\f069";
61 | @fa-var-at: "\f1fa";
62 | @fa-var-audio-description: "\f29e";
63 | @fa-var-automobile: "\f1b9";
64 | @fa-var-backward: "\f04a";
65 | @fa-var-balance-scale: "\f24e";
66 | @fa-var-ban: "\f05e";
67 | @fa-var-bandcamp: "\f2d5";
68 | @fa-var-bank: "\f19c";
69 | @fa-var-bar-chart: "\f080";
70 | @fa-var-bar-chart-o: "\f080";
71 | @fa-var-barcode: "\f02a";
72 | @fa-var-bars: "\f0c9";
73 | @fa-var-bath: "\f2cd";
74 | @fa-var-bathtub: "\f2cd";
75 | @fa-var-battery: "\f240";
76 | @fa-var-battery-0: "\f244";
77 | @fa-var-battery-1: "\f243";
78 | @fa-var-battery-2: "\f242";
79 | @fa-var-battery-3: "\f241";
80 | @fa-var-battery-4: "\f240";
81 | @fa-var-battery-empty: "\f244";
82 | @fa-var-battery-full: "\f240";
83 | @fa-var-battery-half: "\f242";
84 | @fa-var-battery-quarter: "\f243";
85 | @fa-var-battery-three-quarters: "\f241";
86 | @fa-var-bed: "\f236";
87 | @fa-var-beer: "\f0fc";
88 | @fa-var-behance: "\f1b4";
89 | @fa-var-behance-square: "\f1b5";
90 | @fa-var-bell: "\f0f3";
91 | @fa-var-bell-o: "\f0a2";
92 | @fa-var-bell-slash: "\f1f6";
93 | @fa-var-bell-slash-o: "\f1f7";
94 | @fa-var-bicycle: "\f206";
95 | @fa-var-binoculars: "\f1e5";
96 | @fa-var-birthday-cake: "\f1fd";
97 | @fa-var-bitbucket: "\f171";
98 | @fa-var-bitbucket-square: "\f172";
99 | @fa-var-bitcoin: "\f15a";
100 | @fa-var-black-tie: "\f27e";
101 | @fa-var-blind: "\f29d";
102 | @fa-var-bluetooth: "\f293";
103 | @fa-var-bluetooth-b: "\f294";
104 | @fa-var-bold: "\f032";
105 | @fa-var-bolt: "\f0e7";
106 | @fa-var-bomb: "\f1e2";
107 | @fa-var-book: "\f02d";
108 | @fa-var-bookmark: "\f02e";
109 | @fa-var-bookmark-o: "\f097";
110 | @fa-var-braille: "\f2a1";
111 | @fa-var-briefcase: "\f0b1";
112 | @fa-var-btc: "\f15a";
113 | @fa-var-bug: "\f188";
114 | @fa-var-building: "\f1ad";
115 | @fa-var-building-o: "\f0f7";
116 | @fa-var-bullhorn: "\f0a1";
117 | @fa-var-bullseye: "\f140";
118 | @fa-var-bus: "\f207";
119 | @fa-var-buysellads: "\f20d";
120 | @fa-var-cab: "\f1ba";
121 | @fa-var-calculator: "\f1ec";
122 | @fa-var-calendar: "\f073";
123 | @fa-var-calendar-check-o: "\f274";
124 | @fa-var-calendar-minus-o: "\f272";
125 | @fa-var-calendar-o: "\f133";
126 | @fa-var-calendar-plus-o: "\f271";
127 | @fa-var-calendar-times-o: "\f273";
128 | @fa-var-camera: "\f030";
129 | @fa-var-camera-retro: "\f083";
130 | @fa-var-car: "\f1b9";
131 | @fa-var-caret-down: "\f0d7";
132 | @fa-var-caret-left: "\f0d9";
133 | @fa-var-caret-right: "\f0da";
134 | @fa-var-caret-square-o-down: "\f150";
135 | @fa-var-caret-square-o-left: "\f191";
136 | @fa-var-caret-square-o-right: "\f152";
137 | @fa-var-caret-square-o-up: "\f151";
138 | @fa-var-caret-up: "\f0d8";
139 | @fa-var-cart-arrow-down: "\f218";
140 | @fa-var-cart-plus: "\f217";
141 | @fa-var-cc: "\f20a";
142 | @fa-var-cc-amex: "\f1f3";
143 | @fa-var-cc-diners-club: "\f24c";
144 | @fa-var-cc-discover: "\f1f2";
145 | @fa-var-cc-jcb: "\f24b";
146 | @fa-var-cc-mastercard: "\f1f1";
147 | @fa-var-cc-paypal: "\f1f4";
148 | @fa-var-cc-stripe: "\f1f5";
149 | @fa-var-cc-visa: "\f1f0";
150 | @fa-var-certificate: "\f0a3";
151 | @fa-var-chain: "\f0c1";
152 | @fa-var-chain-broken: "\f127";
153 | @fa-var-check: "\f00c";
154 | @fa-var-check-circle: "\f058";
155 | @fa-var-check-circle-o: "\f05d";
156 | @fa-var-check-square: "\f14a";
157 | @fa-var-check-square-o: "\f046";
158 | @fa-var-chevron-circle-down: "\f13a";
159 | @fa-var-chevron-circle-left: "\f137";
160 | @fa-var-chevron-circle-right: "\f138";
161 | @fa-var-chevron-circle-up: "\f139";
162 | @fa-var-chevron-down: "\f078";
163 | @fa-var-chevron-left: "\f053";
164 | @fa-var-chevron-right: "\f054";
165 | @fa-var-chevron-up: "\f077";
166 | @fa-var-child: "\f1ae";
167 | @fa-var-chrome: "\f268";
168 | @fa-var-circle: "\f111";
169 | @fa-var-circle-o: "\f10c";
170 | @fa-var-circle-o-notch: "\f1ce";
171 | @fa-var-circle-thin: "\f1db";
172 | @fa-var-clipboard: "\f0ea";
173 | @fa-var-clock-o: "\f017";
174 | @fa-var-clone: "\f24d";
175 | @fa-var-close: "\f00d";
176 | @fa-var-cloud: "\f0c2";
177 | @fa-var-cloud-download: "\f0ed";
178 | @fa-var-cloud-upload: "\f0ee";
179 | @fa-var-cny: "\f157";
180 | @fa-var-code: "\f121";
181 | @fa-var-code-fork: "\f126";
182 | @fa-var-codepen: "\f1cb";
183 | @fa-var-codiepie: "\f284";
184 | @fa-var-coffee: "\f0f4";
185 | @fa-var-cog: "\f013";
186 | @fa-var-cogs: "\f085";
187 | @fa-var-columns: "\f0db";
188 | @fa-var-comment: "\f075";
189 | @fa-var-comment-o: "\f0e5";
190 | @fa-var-commenting: "\f27a";
191 | @fa-var-commenting-o: "\f27b";
192 | @fa-var-comments: "\f086";
193 | @fa-var-comments-o: "\f0e6";
194 | @fa-var-compass: "\f14e";
195 | @fa-var-compress: "\f066";
196 | @fa-var-connectdevelop: "\f20e";
197 | @fa-var-contao: "\f26d";
198 | @fa-var-copy: "\f0c5";
199 | @fa-var-copyright: "\f1f9";
200 | @fa-var-creative-commons: "\f25e";
201 | @fa-var-credit-card: "\f09d";
202 | @fa-var-credit-card-alt: "\f283";
203 | @fa-var-crop: "\f125";
204 | @fa-var-crosshairs: "\f05b";
205 | @fa-var-css3: "\f13c";
206 | @fa-var-cube: "\f1b2";
207 | @fa-var-cubes: "\f1b3";
208 | @fa-var-cut: "\f0c4";
209 | @fa-var-cutlery: "\f0f5";
210 | @fa-var-dashboard: "\f0e4";
211 | @fa-var-dashcube: "\f210";
212 | @fa-var-database: "\f1c0";
213 | @fa-var-deaf: "\f2a4";
214 | @fa-var-deafness: "\f2a4";
215 | @fa-var-dedent: "\f03b";
216 | @fa-var-delicious: "\f1a5";
217 | @fa-var-desktop: "\f108";
218 | @fa-var-deviantart: "\f1bd";
219 | @fa-var-diamond: "\f219";
220 | @fa-var-digg: "\f1a6";
221 | @fa-var-dollar: "\f155";
222 | @fa-var-dot-circle-o: "\f192";
223 | @fa-var-download: "\f019";
224 | @fa-var-dribbble: "\f17d";
225 | @fa-var-drivers-license: "\f2c2";
226 | @fa-var-drivers-license-o: "\f2c3";
227 | @fa-var-dropbox: "\f16b";
228 | @fa-var-drupal: "\f1a9";
229 | @fa-var-edge: "\f282";
230 | @fa-var-edit: "\f044";
231 | @fa-var-eercast: "\f2da";
232 | @fa-var-eject: "\f052";
233 | @fa-var-ellipsis-h: "\f141";
234 | @fa-var-ellipsis-v: "\f142";
235 | @fa-var-empire: "\f1d1";
236 | @fa-var-envelope: "\f0e0";
237 | @fa-var-envelope-o: "\f003";
238 | @fa-var-envelope-open: "\f2b6";
239 | @fa-var-envelope-open-o: "\f2b7";
240 | @fa-var-envelope-square: "\f199";
241 | @fa-var-envira: "\f299";
242 | @fa-var-eraser: "\f12d";
243 | @fa-var-etsy: "\f2d7";
244 | @fa-var-eur: "\f153";
245 | @fa-var-euro: "\f153";
246 | @fa-var-exchange: "\f0ec";
247 | @fa-var-exclamation: "\f12a";
248 | @fa-var-exclamation-circle: "\f06a";
249 | @fa-var-exclamation-triangle: "\f071";
250 | @fa-var-expand: "\f065";
251 | @fa-var-expeditedssl: "\f23e";
252 | @fa-var-external-link: "\f08e";
253 | @fa-var-external-link-square: "\f14c";
254 | @fa-var-eye: "\f06e";
255 | @fa-var-eye-slash: "\f070";
256 | @fa-var-eyedropper: "\f1fb";
257 | @fa-var-fa: "\f2b4";
258 | @fa-var-facebook: "\f09a";
259 | @fa-var-facebook-f: "\f09a";
260 | @fa-var-facebook-official: "\f230";
261 | @fa-var-facebook-square: "\f082";
262 | @fa-var-fast-backward: "\f049";
263 | @fa-var-fast-forward: "\f050";
264 | @fa-var-fax: "\f1ac";
265 | @fa-var-feed: "\f09e";
266 | @fa-var-female: "\f182";
267 | @fa-var-fighter-jet: "\f0fb";
268 | @fa-var-file: "\f15b";
269 | @fa-var-file-archive-o: "\f1c6";
270 | @fa-var-file-audio-o: "\f1c7";
271 | @fa-var-file-code-o: "\f1c9";
272 | @fa-var-file-excel-o: "\f1c3";
273 | @fa-var-file-image-o: "\f1c5";
274 | @fa-var-file-movie-o: "\f1c8";
275 | @fa-var-file-o: "\f016";
276 | @fa-var-file-pdf-o: "\f1c1";
277 | @fa-var-file-photo-o: "\f1c5";
278 | @fa-var-file-picture-o: "\f1c5";
279 | @fa-var-file-powerpoint-o: "\f1c4";
280 | @fa-var-file-sound-o: "\f1c7";
281 | @fa-var-file-text: "\f15c";
282 | @fa-var-file-text-o: "\f0f6";
283 | @fa-var-file-video-o: "\f1c8";
284 | @fa-var-file-word-o: "\f1c2";
285 | @fa-var-file-zip-o: "\f1c6";
286 | @fa-var-files-o: "\f0c5";
287 | @fa-var-film: "\f008";
288 | @fa-var-filter: "\f0b0";
289 | @fa-var-fire: "\f06d";
290 | @fa-var-fire-extinguisher: "\f134";
291 | @fa-var-firefox: "\f269";
292 | @fa-var-first-order: "\f2b0";
293 | @fa-var-flag: "\f024";
294 | @fa-var-flag-checkered: "\f11e";
295 | @fa-var-flag-o: "\f11d";
296 | @fa-var-flash: "\f0e7";
297 | @fa-var-flask: "\f0c3";
298 | @fa-var-flickr: "\f16e";
299 | @fa-var-floppy-o: "\f0c7";
300 | @fa-var-folder: "\f07b";
301 | @fa-var-folder-o: "\f114";
302 | @fa-var-folder-open: "\f07c";
303 | @fa-var-folder-open-o: "\f115";
304 | @fa-var-font: "\f031";
305 | @fa-var-font-awesome: "\f2b4";
306 | @fa-var-fonticons: "\f280";
307 | @fa-var-fort-awesome: "\f286";
308 | @fa-var-forumbee: "\f211";
309 | @fa-var-forward: "\f04e";
310 | @fa-var-foursquare: "\f180";
311 | @fa-var-free-code-camp: "\f2c5";
312 | @fa-var-frown-o: "\f119";
313 | @fa-var-futbol-o: "\f1e3";
314 | @fa-var-gamepad: "\f11b";
315 | @fa-var-gavel: "\f0e3";
316 | @fa-var-gbp: "\f154";
317 | @fa-var-ge: "\f1d1";
318 | @fa-var-gear: "\f013";
319 | @fa-var-gears: "\f085";
320 | @fa-var-genderless: "\f22d";
321 | @fa-var-get-pocket: "\f265";
322 | @fa-var-gg: "\f260";
323 | @fa-var-gg-circle: "\f261";
324 | @fa-var-gift: "\f06b";
325 | @fa-var-git: "\f1d3";
326 | @fa-var-git-square: "\f1d2";
327 | @fa-var-github: "\f09b";
328 | @fa-var-github-alt: "\f113";
329 | @fa-var-github-square: "\f092";
330 | @fa-var-gitlab: "\f296";
331 | @fa-var-gittip: "\f184";
332 | @fa-var-glass: "\f000";
333 | @fa-var-glide: "\f2a5";
334 | @fa-var-glide-g: "\f2a6";
335 | @fa-var-globe: "\f0ac";
336 | @fa-var-google: "\f1a0";
337 | @fa-var-google-plus: "\f0d5";
338 | @fa-var-google-plus-circle: "\f2b3";
339 | @fa-var-google-plus-official: "\f2b3";
340 | @fa-var-google-plus-square: "\f0d4";
341 | @fa-var-google-wallet: "\f1ee";
342 | @fa-var-graduation-cap: "\f19d";
343 | @fa-var-gratipay: "\f184";
344 | @fa-var-grav: "\f2d6";
345 | @fa-var-group: "\f0c0";
346 | @fa-var-h-square: "\f0fd";
347 | @fa-var-hacker-news: "\f1d4";
348 | @fa-var-hand-grab-o: "\f255";
349 | @fa-var-hand-lizard-o: "\f258";
350 | @fa-var-hand-o-down: "\f0a7";
351 | @fa-var-hand-o-left: "\f0a5";
352 | @fa-var-hand-o-right: "\f0a4";
353 | @fa-var-hand-o-up: "\f0a6";
354 | @fa-var-hand-paper-o: "\f256";
355 | @fa-var-hand-peace-o: "\f25b";
356 | @fa-var-hand-pointer-o: "\f25a";
357 | @fa-var-hand-rock-o: "\f255";
358 | @fa-var-hand-scissors-o: "\f257";
359 | @fa-var-hand-spock-o: "\f259";
360 | @fa-var-hand-stop-o: "\f256";
361 | @fa-var-handshake-o: "\f2b5";
362 | @fa-var-hard-of-hearing: "\f2a4";
363 | @fa-var-hashtag: "\f292";
364 | @fa-var-hdd-o: "\f0a0";
365 | @fa-var-header: "\f1dc";
366 | @fa-var-headphones: "\f025";
367 | @fa-var-heart: "\f004";
368 | @fa-var-heart-o: "\f08a";
369 | @fa-var-heartbeat: "\f21e";
370 | @fa-var-history: "\f1da";
371 | @fa-var-home: "\f015";
372 | @fa-var-hospital-o: "\f0f8";
373 | @fa-var-hotel: "\f236";
374 | @fa-var-hourglass: "\f254";
375 | @fa-var-hourglass-1: "\f251";
376 | @fa-var-hourglass-2: "\f252";
377 | @fa-var-hourglass-3: "\f253";
378 | @fa-var-hourglass-end: "\f253";
379 | @fa-var-hourglass-half: "\f252";
380 | @fa-var-hourglass-o: "\f250";
381 | @fa-var-hourglass-start: "\f251";
382 | @fa-var-houzz: "\f27c";
383 | @fa-var-html5: "\f13b";
384 | @fa-var-i-cursor: "\f246";
385 | @fa-var-id-badge: "\f2c1";
386 | @fa-var-id-card: "\f2c2";
387 | @fa-var-id-card-o: "\f2c3";
388 | @fa-var-ils: "\f20b";
389 | @fa-var-image: "\f03e";
390 | @fa-var-imdb: "\f2d8";
391 | @fa-var-inbox: "\f01c";
392 | @fa-var-indent: "\f03c";
393 | @fa-var-industry: "\f275";
394 | @fa-var-info: "\f129";
395 | @fa-var-info-circle: "\f05a";
396 | @fa-var-inr: "\f156";
397 | @fa-var-instagram: "\f16d";
398 | @fa-var-institution: "\f19c";
399 | @fa-var-internet-explorer: "\f26b";
400 | @fa-var-intersex: "\f224";
401 | @fa-var-ioxhost: "\f208";
402 | @fa-var-italic: "\f033";
403 | @fa-var-joomla: "\f1aa";
404 | @fa-var-jpy: "\f157";
405 | @fa-var-jsfiddle: "\f1cc";
406 | @fa-var-key: "\f084";
407 | @fa-var-keyboard-o: "\f11c";
408 | @fa-var-krw: "\f159";
409 | @fa-var-language: "\f1ab";
410 | @fa-var-laptop: "\f109";
411 | @fa-var-lastfm: "\f202";
412 | @fa-var-lastfm-square: "\f203";
413 | @fa-var-leaf: "\f06c";
414 | @fa-var-leanpub: "\f212";
415 | @fa-var-legal: "\f0e3";
416 | @fa-var-lemon-o: "\f094";
417 | @fa-var-level-down: "\f149";
418 | @fa-var-level-up: "\f148";
419 | @fa-var-life-bouy: "\f1cd";
420 | @fa-var-life-buoy: "\f1cd";
421 | @fa-var-life-ring: "\f1cd";
422 | @fa-var-life-saver: "\f1cd";
423 | @fa-var-lightbulb-o: "\f0eb";
424 | @fa-var-line-chart: "\f201";
425 | @fa-var-link: "\f0c1";
426 | @fa-var-linkedin: "\f0e1";
427 | @fa-var-linkedin-square: "\f08c";
428 | @fa-var-linode: "\f2b8";
429 | @fa-var-linux: "\f17c";
430 | @fa-var-list: "\f03a";
431 | @fa-var-list-alt: "\f022";
432 | @fa-var-list-ol: "\f0cb";
433 | @fa-var-list-ul: "\f0ca";
434 | @fa-var-location-arrow: "\f124";
435 | @fa-var-lock: "\f023";
436 | @fa-var-long-arrow-down: "\f175";
437 | @fa-var-long-arrow-left: "\f177";
438 | @fa-var-long-arrow-right: "\f178";
439 | @fa-var-long-arrow-up: "\f176";
440 | @fa-var-low-vision: "\f2a8";
441 | @fa-var-magic: "\f0d0";
442 | @fa-var-magnet: "\f076";
443 | @fa-var-mail-forward: "\f064";
444 | @fa-var-mail-reply: "\f112";
445 | @fa-var-mail-reply-all: "\f122";
446 | @fa-var-male: "\f183";
447 | @fa-var-map: "\f279";
448 | @fa-var-map-marker: "\f041";
449 | @fa-var-map-o: "\f278";
450 | @fa-var-map-pin: "\f276";
451 | @fa-var-map-signs: "\f277";
452 | @fa-var-mars: "\f222";
453 | @fa-var-mars-double: "\f227";
454 | @fa-var-mars-stroke: "\f229";
455 | @fa-var-mars-stroke-h: "\f22b";
456 | @fa-var-mars-stroke-v: "\f22a";
457 | @fa-var-maxcdn: "\f136";
458 | @fa-var-meanpath: "\f20c";
459 | @fa-var-medium: "\f23a";
460 | @fa-var-medkit: "\f0fa";
461 | @fa-var-meetup: "\f2e0";
462 | @fa-var-meh-o: "\f11a";
463 | @fa-var-mercury: "\f223";
464 | @fa-var-microchip: "\f2db";
465 | @fa-var-microphone: "\f130";
466 | @fa-var-microphone-slash: "\f131";
467 | @fa-var-minus: "\f068";
468 | @fa-var-minus-circle: "\f056";
469 | @fa-var-minus-square: "\f146";
470 | @fa-var-minus-square-o: "\f147";
471 | @fa-var-mixcloud: "\f289";
472 | @fa-var-mobile: "\f10b";
473 | @fa-var-mobile-phone: "\f10b";
474 | @fa-var-modx: "\f285";
475 | @fa-var-money: "\f0d6";
476 | @fa-var-moon-o: "\f186";
477 | @fa-var-mortar-board: "\f19d";
478 | @fa-var-motorcycle: "\f21c";
479 | @fa-var-mouse-pointer: "\f245";
480 | @fa-var-music: "\f001";
481 | @fa-var-navicon: "\f0c9";
482 | @fa-var-neuter: "\f22c";
483 | @fa-var-newspaper-o: "\f1ea";
484 | @fa-var-object-group: "\f247";
485 | @fa-var-object-ungroup: "\f248";
486 | @fa-var-odnoklassniki: "\f263";
487 | @fa-var-odnoklassniki-square: "\f264";
488 | @fa-var-opencart: "\f23d";
489 | @fa-var-openid: "\f19b";
490 | @fa-var-opera: "\f26a";
491 | @fa-var-optin-monster: "\f23c";
492 | @fa-var-outdent: "\f03b";
493 | @fa-var-pagelines: "\f18c";
494 | @fa-var-paint-brush: "\f1fc";
495 | @fa-var-paper-plane: "\f1d8";
496 | @fa-var-paper-plane-o: "\f1d9";
497 | @fa-var-paperclip: "\f0c6";
498 | @fa-var-paragraph: "\f1dd";
499 | @fa-var-paste: "\f0ea";
500 | @fa-var-pause: "\f04c";
501 | @fa-var-pause-circle: "\f28b";
502 | @fa-var-pause-circle-o: "\f28c";
503 | @fa-var-paw: "\f1b0";
504 | @fa-var-paypal: "\f1ed";
505 | @fa-var-pencil: "\f040";
506 | @fa-var-pencil-square: "\f14b";
507 | @fa-var-pencil-square-o: "\f044";
508 | @fa-var-percent: "\f295";
509 | @fa-var-phone: "\f095";
510 | @fa-var-phone-square: "\f098";
511 | @fa-var-photo: "\f03e";
512 | @fa-var-picture-o: "\f03e";
513 | @fa-var-pie-chart: "\f200";
514 | @fa-var-pied-piper: "\f2ae";
515 | @fa-var-pied-piper-alt: "\f1a8";
516 | @fa-var-pied-piper-pp: "\f1a7";
517 | @fa-var-pinterest: "\f0d2";
518 | @fa-var-pinterest-p: "\f231";
519 | @fa-var-pinterest-square: "\f0d3";
520 | @fa-var-plane: "\f072";
521 | @fa-var-play: "\f04b";
522 | @fa-var-play-circle: "\f144";
523 | @fa-var-play-circle-o: "\f01d";
524 | @fa-var-plug: "\f1e6";
525 | @fa-var-plus: "\f067";
526 | @fa-var-plus-circle: "\f055";
527 | @fa-var-plus-square: "\f0fe";
528 | @fa-var-plus-square-o: "\f196";
529 | @fa-var-podcast: "\f2ce";
530 | @fa-var-power-off: "\f011";
531 | @fa-var-print: "\f02f";
532 | @fa-var-product-hunt: "\f288";
533 | @fa-var-puzzle-piece: "\f12e";
534 | @fa-var-qq: "\f1d6";
535 | @fa-var-qrcode: "\f029";
536 | @fa-var-question: "\f128";
537 | @fa-var-question-circle: "\f059";
538 | @fa-var-question-circle-o: "\f29c";
539 | @fa-var-quora: "\f2c4";
540 | @fa-var-quote-left: "\f10d";
541 | @fa-var-quote-right: "\f10e";
542 | @fa-var-ra: "\f1d0";
543 | @fa-var-random: "\f074";
544 | @fa-var-ravelry: "\f2d9";
545 | @fa-var-rebel: "\f1d0";
546 | @fa-var-recycle: "\f1b8";
547 | @fa-var-reddit: "\f1a1";
548 | @fa-var-reddit-alien: "\f281";
549 | @fa-var-reddit-square: "\f1a2";
550 | @fa-var-refresh: "\f021";
551 | @fa-var-registered: "\f25d";
552 | @fa-var-remove: "\f00d";
553 | @fa-var-renren: "\f18b";
554 | @fa-var-reorder: "\f0c9";
555 | @fa-var-repeat: "\f01e";
556 | @fa-var-reply: "\f112";
557 | @fa-var-reply-all: "\f122";
558 | @fa-var-resistance: "\f1d0";
559 | @fa-var-retweet: "\f079";
560 | @fa-var-rmb: "\f157";
561 | @fa-var-road: "\f018";
562 | @fa-var-rocket: "\f135";
563 | @fa-var-rotate-left: "\f0e2";
564 | @fa-var-rotate-right: "\f01e";
565 | @fa-var-rouble: "\f158";
566 | @fa-var-rss: "\f09e";
567 | @fa-var-rss-square: "\f143";
568 | @fa-var-rub: "\f158";
569 | @fa-var-ruble: "\f158";
570 | @fa-var-rupee: "\f156";
571 | @fa-var-s15: "\f2cd";
572 | @fa-var-safari: "\f267";
573 | @fa-var-save: "\f0c7";
574 | @fa-var-scissors: "\f0c4";
575 | @fa-var-scribd: "\f28a";
576 | @fa-var-search: "\f002";
577 | @fa-var-search-minus: "\f010";
578 | @fa-var-search-plus: "\f00e";
579 | @fa-var-sellsy: "\f213";
580 | @fa-var-send: "\f1d8";
581 | @fa-var-send-o: "\f1d9";
582 | @fa-var-server: "\f233";
583 | @fa-var-share: "\f064";
584 | @fa-var-share-alt: "\f1e0";
585 | @fa-var-share-alt-square: "\f1e1";
586 | @fa-var-share-square: "\f14d";
587 | @fa-var-share-square-o: "\f045";
588 | @fa-var-shekel: "\f20b";
589 | @fa-var-sheqel: "\f20b";
590 | @fa-var-shield: "\f132";
591 | @fa-var-ship: "\f21a";
592 | @fa-var-shirtsinbulk: "\f214";
593 | @fa-var-shopping-bag: "\f290";
594 | @fa-var-shopping-basket: "\f291";
595 | @fa-var-shopping-cart: "\f07a";
596 | @fa-var-shower: "\f2cc";
597 | @fa-var-sign-in: "\f090";
598 | @fa-var-sign-language: "\f2a7";
599 | @fa-var-sign-out: "\f08b";
600 | @fa-var-signal: "\f012";
601 | @fa-var-signing: "\f2a7";
602 | @fa-var-simplybuilt: "\f215";
603 | @fa-var-sitemap: "\f0e8";
604 | @fa-var-skyatlas: "\f216";
605 | @fa-var-skype: "\f17e";
606 | @fa-var-slack: "\f198";
607 | @fa-var-sliders: "\f1de";
608 | @fa-var-slideshare: "\f1e7";
609 | @fa-var-smile-o: "\f118";
610 | @fa-var-snapchat: "\f2ab";
611 | @fa-var-snapchat-ghost: "\f2ac";
612 | @fa-var-snapchat-square: "\f2ad";
613 | @fa-var-snowflake-o: "\f2dc";
614 | @fa-var-soccer-ball-o: "\f1e3";
615 | @fa-var-sort: "\f0dc";
616 | @fa-var-sort-alpha-asc: "\f15d";
617 | @fa-var-sort-alpha-desc: "\f15e";
618 | @fa-var-sort-amount-asc: "\f160";
619 | @fa-var-sort-amount-desc: "\f161";
620 | @fa-var-sort-asc: "\f0de";
621 | @fa-var-sort-desc: "\f0dd";
622 | @fa-var-sort-down: "\f0dd";
623 | @fa-var-sort-numeric-asc: "\f162";
624 | @fa-var-sort-numeric-desc: "\f163";
625 | @fa-var-sort-up: "\f0de";
626 | @fa-var-soundcloud: "\f1be";
627 | @fa-var-space-shuttle: "\f197";
628 | @fa-var-spinner: "\f110";
629 | @fa-var-spoon: "\f1b1";
630 | @fa-var-spotify: "\f1bc";
631 | @fa-var-square: "\f0c8";
632 | @fa-var-square-o: "\f096";
633 | @fa-var-stack-exchange: "\f18d";
634 | @fa-var-stack-overflow: "\f16c";
635 | @fa-var-star: "\f005";
636 | @fa-var-star-half: "\f089";
637 | @fa-var-star-half-empty: "\f123";
638 | @fa-var-star-half-full: "\f123";
639 | @fa-var-star-half-o: "\f123";
640 | @fa-var-star-o: "\f006";
641 | @fa-var-steam: "\f1b6";
642 | @fa-var-steam-square: "\f1b7";
643 | @fa-var-step-backward: "\f048";
644 | @fa-var-step-forward: "\f051";
645 | @fa-var-stethoscope: "\f0f1";
646 | @fa-var-sticky-note: "\f249";
647 | @fa-var-sticky-note-o: "\f24a";
648 | @fa-var-stop: "\f04d";
649 | @fa-var-stop-circle: "\f28d";
650 | @fa-var-stop-circle-o: "\f28e";
651 | @fa-var-street-view: "\f21d";
652 | @fa-var-strikethrough: "\f0cc";
653 | @fa-var-stumbleupon: "\f1a4";
654 | @fa-var-stumbleupon-circle: "\f1a3";
655 | @fa-var-subscript: "\f12c";
656 | @fa-var-subway: "\f239";
657 | @fa-var-suitcase: "\f0f2";
658 | @fa-var-sun-o: "\f185";
659 | @fa-var-superpowers: "\f2dd";
660 | @fa-var-superscript: "\f12b";
661 | @fa-var-support: "\f1cd";
662 | @fa-var-table: "\f0ce";
663 | @fa-var-tablet: "\f10a";
664 | @fa-var-tachometer: "\f0e4";
665 | @fa-var-tag: "\f02b";
666 | @fa-var-tags: "\f02c";
667 | @fa-var-tasks: "\f0ae";
668 | @fa-var-taxi: "\f1ba";
669 | @fa-var-telegram: "\f2c6";
670 | @fa-var-television: "\f26c";
671 | @fa-var-tencent-weibo: "\f1d5";
672 | @fa-var-terminal: "\f120";
673 | @fa-var-text-height: "\f034";
674 | @fa-var-text-width: "\f035";
675 | @fa-var-th: "\f00a";
676 | @fa-var-th-large: "\f009";
677 | @fa-var-th-list: "\f00b";
678 | @fa-var-themeisle: "\f2b2";
679 | @fa-var-thermometer: "\f2c7";
680 | @fa-var-thermometer-0: "\f2cb";
681 | @fa-var-thermometer-1: "\f2ca";
682 | @fa-var-thermometer-2: "\f2c9";
683 | @fa-var-thermometer-3: "\f2c8";
684 | @fa-var-thermometer-4: "\f2c7";
685 | @fa-var-thermometer-empty: "\f2cb";
686 | @fa-var-thermometer-full: "\f2c7";
687 | @fa-var-thermometer-half: "\f2c9";
688 | @fa-var-thermometer-quarter: "\f2ca";
689 | @fa-var-thermometer-three-quarters: "\f2c8";
690 | @fa-var-thumb-tack: "\f08d";
691 | @fa-var-thumbs-down: "\f165";
692 | @fa-var-thumbs-o-down: "\f088";
693 | @fa-var-thumbs-o-up: "\f087";
694 | @fa-var-thumbs-up: "\f164";
695 | @fa-var-ticket: "\f145";
696 | @fa-var-times: "\f00d";
697 | @fa-var-times-circle: "\f057";
698 | @fa-var-times-circle-o: "\f05c";
699 | @fa-var-times-rectangle: "\f2d3";
700 | @fa-var-times-rectangle-o: "\f2d4";
701 | @fa-var-tint: "\f043";
702 | @fa-var-toggle-down: "\f150";
703 | @fa-var-toggle-left: "\f191";
704 | @fa-var-toggle-off: "\f204";
705 | @fa-var-toggle-on: "\f205";
706 | @fa-var-toggle-right: "\f152";
707 | @fa-var-toggle-up: "\f151";
708 | @fa-var-trademark: "\f25c";
709 | @fa-var-train: "\f238";
710 | @fa-var-transgender: "\f224";
711 | @fa-var-transgender-alt: "\f225";
712 | @fa-var-trash: "\f1f8";
713 | @fa-var-trash-o: "\f014";
714 | @fa-var-tree: "\f1bb";
715 | @fa-var-trello: "\f181";
716 | @fa-var-tripadvisor: "\f262";
717 | @fa-var-trophy: "\f091";
718 | @fa-var-truck: "\f0d1";
719 | @fa-var-try: "\f195";
720 | @fa-var-tty: "\f1e4";
721 | @fa-var-tumblr: "\f173";
722 | @fa-var-tumblr-square: "\f174";
723 | @fa-var-turkish-lira: "\f195";
724 | @fa-var-tv: "\f26c";
725 | @fa-var-twitch: "\f1e8";
726 | @fa-var-twitter: "\f099";
727 | @fa-var-twitter-square: "\f081";
728 | @fa-var-umbrella: "\f0e9";
729 | @fa-var-underline: "\f0cd";
730 | @fa-var-undo: "\f0e2";
731 | @fa-var-universal-access: "\f29a";
732 | @fa-var-university: "\f19c";
733 | @fa-var-unlink: "\f127";
734 | @fa-var-unlock: "\f09c";
735 | @fa-var-unlock-alt: "\f13e";
736 | @fa-var-unsorted: "\f0dc";
737 | @fa-var-upload: "\f093";
738 | @fa-var-usb: "\f287";
739 | @fa-var-usd: "\f155";
740 | @fa-var-user: "\f007";
741 | @fa-var-user-circle: "\f2bd";
742 | @fa-var-user-circle-o: "\f2be";
743 | @fa-var-user-md: "\f0f0";
744 | @fa-var-user-o: "\f2c0";
745 | @fa-var-user-plus: "\f234";
746 | @fa-var-user-secret: "\f21b";
747 | @fa-var-user-times: "\f235";
748 | @fa-var-users: "\f0c0";
749 | @fa-var-vcard: "\f2bb";
750 | @fa-var-vcard-o: "\f2bc";
751 | @fa-var-venus: "\f221";
752 | @fa-var-venus-double: "\f226";
753 | @fa-var-venus-mars: "\f228";
754 | @fa-var-viacoin: "\f237";
755 | @fa-var-viadeo: "\f2a9";
756 | @fa-var-viadeo-square: "\f2aa";
757 | @fa-var-video-camera: "\f03d";
758 | @fa-var-vimeo: "\f27d";
759 | @fa-var-vimeo-square: "\f194";
760 | @fa-var-vine: "\f1ca";
761 | @fa-var-vk: "\f189";
762 | @fa-var-volume-control-phone: "\f2a0";
763 | @fa-var-volume-down: "\f027";
764 | @fa-var-volume-off: "\f026";
765 | @fa-var-volume-up: "\f028";
766 | @fa-var-warning: "\f071";
767 | @fa-var-wechat: "\f1d7";
768 | @fa-var-weibo: "\f18a";
769 | @fa-var-weixin: "\f1d7";
770 | @fa-var-whatsapp: "\f232";
771 | @fa-var-wheelchair: "\f193";
772 | @fa-var-wheelchair-alt: "\f29b";
773 | @fa-var-wifi: "\f1eb";
774 | @fa-var-wikipedia-w: "\f266";
775 | @fa-var-window-close: "\f2d3";
776 | @fa-var-window-close-o: "\f2d4";
777 | @fa-var-window-maximize: "\f2d0";
778 | @fa-var-window-minimize: "\f2d1";
779 | @fa-var-window-restore: "\f2d2";
780 | @fa-var-windows: "\f17a";
781 | @fa-var-won: "\f159";
782 | @fa-var-wordpress: "\f19a";
783 | @fa-var-wpbeginner: "\f297";
784 | @fa-var-wpexplorer: "\f2de";
785 | @fa-var-wpforms: "\f298";
786 | @fa-var-wrench: "\f0ad";
787 | @fa-var-xing: "\f168";
788 | @fa-var-xing-square: "\f169";
789 | @fa-var-y-combinator: "\f23b";
790 | @fa-var-y-combinator-square: "\f1d4";
791 | @fa-var-yahoo: "\f19e";
792 | @fa-var-yc: "\f23b";
793 | @fa-var-yc-square: "\f1d4";
794 | @fa-var-yelp: "\f1e9";
795 | @fa-var-yen: "\f157";
796 | @fa-var-yoast: "\f2b1";
797 | @fa-var-youtube: "\f167";
798 | @fa-var-youtube-play: "\f16a";
799 | @fa-var-youtube-square: "\f166";
800 |
801 |
--------------------------------------------------------------------------------
/static/font-awesome-4.7.0/scss/_variables.scss:
--------------------------------------------------------------------------------
1 | // Variables
2 | // --------------------------
3 |
4 | $fa-font-path: "../fonts" !default;
5 | $fa-font-size-base: 14px !default;
6 | $fa-line-height-base: 1 !default;
7 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
8 | $fa-css-prefix: fa !default;
9 | $fa-version: "4.7.0" !default;
10 | $fa-border-color: #eee !default;
11 | $fa-inverse: #fff !default;
12 | $fa-li-width: (30em / 14) !default;
13 |
14 | $fa-var-500px: "\f26e";
15 | $fa-var-address-book: "\f2b9";
16 | $fa-var-address-book-o: "\f2ba";
17 | $fa-var-address-card: "\f2bb";
18 | $fa-var-address-card-o: "\f2bc";
19 | $fa-var-adjust: "\f042";
20 | $fa-var-adn: "\f170";
21 | $fa-var-align-center: "\f037";
22 | $fa-var-align-justify: "\f039";
23 | $fa-var-align-left: "\f036";
24 | $fa-var-align-right: "\f038";
25 | $fa-var-amazon: "\f270";
26 | $fa-var-ambulance: "\f0f9";
27 | $fa-var-american-sign-language-interpreting: "\f2a3";
28 | $fa-var-anchor: "\f13d";
29 | $fa-var-android: "\f17b";
30 | $fa-var-angellist: "\f209";
31 | $fa-var-angle-double-down: "\f103";
32 | $fa-var-angle-double-left: "\f100";
33 | $fa-var-angle-double-right: "\f101";
34 | $fa-var-angle-double-up: "\f102";
35 | $fa-var-angle-down: "\f107";
36 | $fa-var-angle-left: "\f104";
37 | $fa-var-angle-right: "\f105";
38 | $fa-var-angle-up: "\f106";
39 | $fa-var-apple: "\f179";
40 | $fa-var-archive: "\f187";
41 | $fa-var-area-chart: "\f1fe";
42 | $fa-var-arrow-circle-down: "\f0ab";
43 | $fa-var-arrow-circle-left: "\f0a8";
44 | $fa-var-arrow-circle-o-down: "\f01a";
45 | $fa-var-arrow-circle-o-left: "\f190";
46 | $fa-var-arrow-circle-o-right: "\f18e";
47 | $fa-var-arrow-circle-o-up: "\f01b";
48 | $fa-var-arrow-circle-right: "\f0a9";
49 | $fa-var-arrow-circle-up: "\f0aa";
50 | $fa-var-arrow-down: "\f063";
51 | $fa-var-arrow-left: "\f060";
52 | $fa-var-arrow-right: "\f061";
53 | $fa-var-arrow-up: "\f062";
54 | $fa-var-arrows: "\f047";
55 | $fa-var-arrows-alt: "\f0b2";
56 | $fa-var-arrows-h: "\f07e";
57 | $fa-var-arrows-v: "\f07d";
58 | $fa-var-asl-interpreting: "\f2a3";
59 | $fa-var-assistive-listening-systems: "\f2a2";
60 | $fa-var-asterisk: "\f069";
61 | $fa-var-at: "\f1fa";
62 | $fa-var-audio-description: "\f29e";
63 | $fa-var-automobile: "\f1b9";
64 | $fa-var-backward: "\f04a";
65 | $fa-var-balance-scale: "\f24e";
66 | $fa-var-ban: "\f05e";
67 | $fa-var-bandcamp: "\f2d5";
68 | $fa-var-bank: "\f19c";
69 | $fa-var-bar-chart: "\f080";
70 | $fa-var-bar-chart-o: "\f080";
71 | $fa-var-barcode: "\f02a";
72 | $fa-var-bars: "\f0c9";
73 | $fa-var-bath: "\f2cd";
74 | $fa-var-bathtub: "\f2cd";
75 | $fa-var-battery: "\f240";
76 | $fa-var-battery-0: "\f244";
77 | $fa-var-battery-1: "\f243";
78 | $fa-var-battery-2: "\f242";
79 | $fa-var-battery-3: "\f241";
80 | $fa-var-battery-4: "\f240";
81 | $fa-var-battery-empty: "\f244";
82 | $fa-var-battery-full: "\f240";
83 | $fa-var-battery-half: "\f242";
84 | $fa-var-battery-quarter: "\f243";
85 | $fa-var-battery-three-quarters: "\f241";
86 | $fa-var-bed: "\f236";
87 | $fa-var-beer: "\f0fc";
88 | $fa-var-behance: "\f1b4";
89 | $fa-var-behance-square: "\f1b5";
90 | $fa-var-bell: "\f0f3";
91 | $fa-var-bell-o: "\f0a2";
92 | $fa-var-bell-slash: "\f1f6";
93 | $fa-var-bell-slash-o: "\f1f7";
94 | $fa-var-bicycle: "\f206";
95 | $fa-var-binoculars: "\f1e5";
96 | $fa-var-birthday-cake: "\f1fd";
97 | $fa-var-bitbucket: "\f171";
98 | $fa-var-bitbucket-square: "\f172";
99 | $fa-var-bitcoin: "\f15a";
100 | $fa-var-black-tie: "\f27e";
101 | $fa-var-blind: "\f29d";
102 | $fa-var-bluetooth: "\f293";
103 | $fa-var-bluetooth-b: "\f294";
104 | $fa-var-bold: "\f032";
105 | $fa-var-bolt: "\f0e7";
106 | $fa-var-bomb: "\f1e2";
107 | $fa-var-book: "\f02d";
108 | $fa-var-bookmark: "\f02e";
109 | $fa-var-bookmark-o: "\f097";
110 | $fa-var-braille: "\f2a1";
111 | $fa-var-briefcase: "\f0b1";
112 | $fa-var-btc: "\f15a";
113 | $fa-var-bug: "\f188";
114 | $fa-var-building: "\f1ad";
115 | $fa-var-building-o: "\f0f7";
116 | $fa-var-bullhorn: "\f0a1";
117 | $fa-var-bullseye: "\f140";
118 | $fa-var-bus: "\f207";
119 | $fa-var-buysellads: "\f20d";
120 | $fa-var-cab: "\f1ba";
121 | $fa-var-calculator: "\f1ec";
122 | $fa-var-calendar: "\f073";
123 | $fa-var-calendar-check-o: "\f274";
124 | $fa-var-calendar-minus-o: "\f272";
125 | $fa-var-calendar-o: "\f133";
126 | $fa-var-calendar-plus-o: "\f271";
127 | $fa-var-calendar-times-o: "\f273";
128 | $fa-var-camera: "\f030";
129 | $fa-var-camera-retro: "\f083";
130 | $fa-var-car: "\f1b9";
131 | $fa-var-caret-down: "\f0d7";
132 | $fa-var-caret-left: "\f0d9";
133 | $fa-var-caret-right: "\f0da";
134 | $fa-var-caret-square-o-down: "\f150";
135 | $fa-var-caret-square-o-left: "\f191";
136 | $fa-var-caret-square-o-right: "\f152";
137 | $fa-var-caret-square-o-up: "\f151";
138 | $fa-var-caret-up: "\f0d8";
139 | $fa-var-cart-arrow-down: "\f218";
140 | $fa-var-cart-plus: "\f217";
141 | $fa-var-cc: "\f20a";
142 | $fa-var-cc-amex: "\f1f3";
143 | $fa-var-cc-diners-club: "\f24c";
144 | $fa-var-cc-discover: "\f1f2";
145 | $fa-var-cc-jcb: "\f24b";
146 | $fa-var-cc-mastercard: "\f1f1";
147 | $fa-var-cc-paypal: "\f1f4";
148 | $fa-var-cc-stripe: "\f1f5";
149 | $fa-var-cc-visa: "\f1f0";
150 | $fa-var-certificate: "\f0a3";
151 | $fa-var-chain: "\f0c1";
152 | $fa-var-chain-broken: "\f127";
153 | $fa-var-check: "\f00c";
154 | $fa-var-check-circle: "\f058";
155 | $fa-var-check-circle-o: "\f05d";
156 | $fa-var-check-square: "\f14a";
157 | $fa-var-check-square-o: "\f046";
158 | $fa-var-chevron-circle-down: "\f13a";
159 | $fa-var-chevron-circle-left: "\f137";
160 | $fa-var-chevron-circle-right: "\f138";
161 | $fa-var-chevron-circle-up: "\f139";
162 | $fa-var-chevron-down: "\f078";
163 | $fa-var-chevron-left: "\f053";
164 | $fa-var-chevron-right: "\f054";
165 | $fa-var-chevron-up: "\f077";
166 | $fa-var-child: "\f1ae";
167 | $fa-var-chrome: "\f268";
168 | $fa-var-circle: "\f111";
169 | $fa-var-circle-o: "\f10c";
170 | $fa-var-circle-o-notch: "\f1ce";
171 | $fa-var-circle-thin: "\f1db";
172 | $fa-var-clipboard: "\f0ea";
173 | $fa-var-clock-o: "\f017";
174 | $fa-var-clone: "\f24d";
175 | $fa-var-close: "\f00d";
176 | $fa-var-cloud: "\f0c2";
177 | $fa-var-cloud-download: "\f0ed";
178 | $fa-var-cloud-upload: "\f0ee";
179 | $fa-var-cny: "\f157";
180 | $fa-var-code: "\f121";
181 | $fa-var-code-fork: "\f126";
182 | $fa-var-codepen: "\f1cb";
183 | $fa-var-codiepie: "\f284";
184 | $fa-var-coffee: "\f0f4";
185 | $fa-var-cog: "\f013";
186 | $fa-var-cogs: "\f085";
187 | $fa-var-columns: "\f0db";
188 | $fa-var-comment: "\f075";
189 | $fa-var-comment-o: "\f0e5";
190 | $fa-var-commenting: "\f27a";
191 | $fa-var-commenting-o: "\f27b";
192 | $fa-var-comments: "\f086";
193 | $fa-var-comments-o: "\f0e6";
194 | $fa-var-compass: "\f14e";
195 | $fa-var-compress: "\f066";
196 | $fa-var-connectdevelop: "\f20e";
197 | $fa-var-contao: "\f26d";
198 | $fa-var-copy: "\f0c5";
199 | $fa-var-copyright: "\f1f9";
200 | $fa-var-creative-commons: "\f25e";
201 | $fa-var-credit-card: "\f09d";
202 | $fa-var-credit-card-alt: "\f283";
203 | $fa-var-crop: "\f125";
204 | $fa-var-crosshairs: "\f05b";
205 | $fa-var-css3: "\f13c";
206 | $fa-var-cube: "\f1b2";
207 | $fa-var-cubes: "\f1b3";
208 | $fa-var-cut: "\f0c4";
209 | $fa-var-cutlery: "\f0f5";
210 | $fa-var-dashboard: "\f0e4";
211 | $fa-var-dashcube: "\f210";
212 | $fa-var-database: "\f1c0";
213 | $fa-var-deaf: "\f2a4";
214 | $fa-var-deafness: "\f2a4";
215 | $fa-var-dedent: "\f03b";
216 | $fa-var-delicious: "\f1a5";
217 | $fa-var-desktop: "\f108";
218 | $fa-var-deviantart: "\f1bd";
219 | $fa-var-diamond: "\f219";
220 | $fa-var-digg: "\f1a6";
221 | $fa-var-dollar: "\f155";
222 | $fa-var-dot-circle-o: "\f192";
223 | $fa-var-download: "\f019";
224 | $fa-var-dribbble: "\f17d";
225 | $fa-var-drivers-license: "\f2c2";
226 | $fa-var-drivers-license-o: "\f2c3";
227 | $fa-var-dropbox: "\f16b";
228 | $fa-var-drupal: "\f1a9";
229 | $fa-var-edge: "\f282";
230 | $fa-var-edit: "\f044";
231 | $fa-var-eercast: "\f2da";
232 | $fa-var-eject: "\f052";
233 | $fa-var-ellipsis-h: "\f141";
234 | $fa-var-ellipsis-v: "\f142";
235 | $fa-var-empire: "\f1d1";
236 | $fa-var-envelope: "\f0e0";
237 | $fa-var-envelope-o: "\f003";
238 | $fa-var-envelope-open: "\f2b6";
239 | $fa-var-envelope-open-o: "\f2b7";
240 | $fa-var-envelope-square: "\f199";
241 | $fa-var-envira: "\f299";
242 | $fa-var-eraser: "\f12d";
243 | $fa-var-etsy: "\f2d7";
244 | $fa-var-eur: "\f153";
245 | $fa-var-euro: "\f153";
246 | $fa-var-exchange: "\f0ec";
247 | $fa-var-exclamation: "\f12a";
248 | $fa-var-exclamation-circle: "\f06a";
249 | $fa-var-exclamation-triangle: "\f071";
250 | $fa-var-expand: "\f065";
251 | $fa-var-expeditedssl: "\f23e";
252 | $fa-var-external-link: "\f08e";
253 | $fa-var-external-link-square: "\f14c";
254 | $fa-var-eye: "\f06e";
255 | $fa-var-eye-slash: "\f070";
256 | $fa-var-eyedropper: "\f1fb";
257 | $fa-var-fa: "\f2b4";
258 | $fa-var-facebook: "\f09a";
259 | $fa-var-facebook-f: "\f09a";
260 | $fa-var-facebook-official: "\f230";
261 | $fa-var-facebook-square: "\f082";
262 | $fa-var-fast-backward: "\f049";
263 | $fa-var-fast-forward: "\f050";
264 | $fa-var-fax: "\f1ac";
265 | $fa-var-feed: "\f09e";
266 | $fa-var-female: "\f182";
267 | $fa-var-fighter-jet: "\f0fb";
268 | $fa-var-file: "\f15b";
269 | $fa-var-file-archive-o: "\f1c6";
270 | $fa-var-file-audio-o: "\f1c7";
271 | $fa-var-file-code-o: "\f1c9";
272 | $fa-var-file-excel-o: "\f1c3";
273 | $fa-var-file-image-o: "\f1c5";
274 | $fa-var-file-movie-o: "\f1c8";
275 | $fa-var-file-o: "\f016";
276 | $fa-var-file-pdf-o: "\f1c1";
277 | $fa-var-file-photo-o: "\f1c5";
278 | $fa-var-file-picture-o: "\f1c5";
279 | $fa-var-file-powerpoint-o: "\f1c4";
280 | $fa-var-file-sound-o: "\f1c7";
281 | $fa-var-file-text: "\f15c";
282 | $fa-var-file-text-o: "\f0f6";
283 | $fa-var-file-video-o: "\f1c8";
284 | $fa-var-file-word-o: "\f1c2";
285 | $fa-var-file-zip-o: "\f1c6";
286 | $fa-var-files-o: "\f0c5";
287 | $fa-var-film: "\f008";
288 | $fa-var-filter: "\f0b0";
289 | $fa-var-fire: "\f06d";
290 | $fa-var-fire-extinguisher: "\f134";
291 | $fa-var-firefox: "\f269";
292 | $fa-var-first-order: "\f2b0";
293 | $fa-var-flag: "\f024";
294 | $fa-var-flag-checkered: "\f11e";
295 | $fa-var-flag-o: "\f11d";
296 | $fa-var-flash: "\f0e7";
297 | $fa-var-flask: "\f0c3";
298 | $fa-var-flickr: "\f16e";
299 | $fa-var-floppy-o: "\f0c7";
300 | $fa-var-folder: "\f07b";
301 | $fa-var-folder-o: "\f114";
302 | $fa-var-folder-open: "\f07c";
303 | $fa-var-folder-open-o: "\f115";
304 | $fa-var-font: "\f031";
305 | $fa-var-font-awesome: "\f2b4";
306 | $fa-var-fonticons: "\f280";
307 | $fa-var-fort-awesome: "\f286";
308 | $fa-var-forumbee: "\f211";
309 | $fa-var-forward: "\f04e";
310 | $fa-var-foursquare: "\f180";
311 | $fa-var-free-code-camp: "\f2c5";
312 | $fa-var-frown-o: "\f119";
313 | $fa-var-futbol-o: "\f1e3";
314 | $fa-var-gamepad: "\f11b";
315 | $fa-var-gavel: "\f0e3";
316 | $fa-var-gbp: "\f154";
317 | $fa-var-ge: "\f1d1";
318 | $fa-var-gear: "\f013";
319 | $fa-var-gears: "\f085";
320 | $fa-var-genderless: "\f22d";
321 | $fa-var-get-pocket: "\f265";
322 | $fa-var-gg: "\f260";
323 | $fa-var-gg-circle: "\f261";
324 | $fa-var-gift: "\f06b";
325 | $fa-var-git: "\f1d3";
326 | $fa-var-git-square: "\f1d2";
327 | $fa-var-github: "\f09b";
328 | $fa-var-github-alt: "\f113";
329 | $fa-var-github-square: "\f092";
330 | $fa-var-gitlab: "\f296";
331 | $fa-var-gittip: "\f184";
332 | $fa-var-glass: "\f000";
333 | $fa-var-glide: "\f2a5";
334 | $fa-var-glide-g: "\f2a6";
335 | $fa-var-globe: "\f0ac";
336 | $fa-var-google: "\f1a0";
337 | $fa-var-google-plus: "\f0d5";
338 | $fa-var-google-plus-circle: "\f2b3";
339 | $fa-var-google-plus-official: "\f2b3";
340 | $fa-var-google-plus-square: "\f0d4";
341 | $fa-var-google-wallet: "\f1ee";
342 | $fa-var-graduation-cap: "\f19d";
343 | $fa-var-gratipay: "\f184";
344 | $fa-var-grav: "\f2d6";
345 | $fa-var-group: "\f0c0";
346 | $fa-var-h-square: "\f0fd";
347 | $fa-var-hacker-news: "\f1d4";
348 | $fa-var-hand-grab-o: "\f255";
349 | $fa-var-hand-lizard-o: "\f258";
350 | $fa-var-hand-o-down: "\f0a7";
351 | $fa-var-hand-o-left: "\f0a5";
352 | $fa-var-hand-o-right: "\f0a4";
353 | $fa-var-hand-o-up: "\f0a6";
354 | $fa-var-hand-paper-o: "\f256";
355 | $fa-var-hand-peace-o: "\f25b";
356 | $fa-var-hand-pointer-o: "\f25a";
357 | $fa-var-hand-rock-o: "\f255";
358 | $fa-var-hand-scissors-o: "\f257";
359 | $fa-var-hand-spock-o: "\f259";
360 | $fa-var-hand-stop-o: "\f256";
361 | $fa-var-handshake-o: "\f2b5";
362 | $fa-var-hard-of-hearing: "\f2a4";
363 | $fa-var-hashtag: "\f292";
364 | $fa-var-hdd-o: "\f0a0";
365 | $fa-var-header: "\f1dc";
366 | $fa-var-headphones: "\f025";
367 | $fa-var-heart: "\f004";
368 | $fa-var-heart-o: "\f08a";
369 | $fa-var-heartbeat: "\f21e";
370 | $fa-var-history: "\f1da";
371 | $fa-var-home: "\f015";
372 | $fa-var-hospital-o: "\f0f8";
373 | $fa-var-hotel: "\f236";
374 | $fa-var-hourglass: "\f254";
375 | $fa-var-hourglass-1: "\f251";
376 | $fa-var-hourglass-2: "\f252";
377 | $fa-var-hourglass-3: "\f253";
378 | $fa-var-hourglass-end: "\f253";
379 | $fa-var-hourglass-half: "\f252";
380 | $fa-var-hourglass-o: "\f250";
381 | $fa-var-hourglass-start: "\f251";
382 | $fa-var-houzz: "\f27c";
383 | $fa-var-html5: "\f13b";
384 | $fa-var-i-cursor: "\f246";
385 | $fa-var-id-badge: "\f2c1";
386 | $fa-var-id-card: "\f2c2";
387 | $fa-var-id-card-o: "\f2c3";
388 | $fa-var-ils: "\f20b";
389 | $fa-var-image: "\f03e";
390 | $fa-var-imdb: "\f2d8";
391 | $fa-var-inbox: "\f01c";
392 | $fa-var-indent: "\f03c";
393 | $fa-var-industry: "\f275";
394 | $fa-var-info: "\f129";
395 | $fa-var-info-circle: "\f05a";
396 | $fa-var-inr: "\f156";
397 | $fa-var-instagram: "\f16d";
398 | $fa-var-institution: "\f19c";
399 | $fa-var-internet-explorer: "\f26b";
400 | $fa-var-intersex: "\f224";
401 | $fa-var-ioxhost: "\f208";
402 | $fa-var-italic: "\f033";
403 | $fa-var-joomla: "\f1aa";
404 | $fa-var-jpy: "\f157";
405 | $fa-var-jsfiddle: "\f1cc";
406 | $fa-var-key: "\f084";
407 | $fa-var-keyboard-o: "\f11c";
408 | $fa-var-krw: "\f159";
409 | $fa-var-language: "\f1ab";
410 | $fa-var-laptop: "\f109";
411 | $fa-var-lastfm: "\f202";
412 | $fa-var-lastfm-square: "\f203";
413 | $fa-var-leaf: "\f06c";
414 | $fa-var-leanpub: "\f212";
415 | $fa-var-legal: "\f0e3";
416 | $fa-var-lemon-o: "\f094";
417 | $fa-var-level-down: "\f149";
418 | $fa-var-level-up: "\f148";
419 | $fa-var-life-bouy: "\f1cd";
420 | $fa-var-life-buoy: "\f1cd";
421 | $fa-var-life-ring: "\f1cd";
422 | $fa-var-life-saver: "\f1cd";
423 | $fa-var-lightbulb-o: "\f0eb";
424 | $fa-var-line-chart: "\f201";
425 | $fa-var-link: "\f0c1";
426 | $fa-var-linkedin: "\f0e1";
427 | $fa-var-linkedin-square: "\f08c";
428 | $fa-var-linode: "\f2b8";
429 | $fa-var-linux: "\f17c";
430 | $fa-var-list: "\f03a";
431 | $fa-var-list-alt: "\f022";
432 | $fa-var-list-ol: "\f0cb";
433 | $fa-var-list-ul: "\f0ca";
434 | $fa-var-location-arrow: "\f124";
435 | $fa-var-lock: "\f023";
436 | $fa-var-long-arrow-down: "\f175";
437 | $fa-var-long-arrow-left: "\f177";
438 | $fa-var-long-arrow-right: "\f178";
439 | $fa-var-long-arrow-up: "\f176";
440 | $fa-var-low-vision: "\f2a8";
441 | $fa-var-magic: "\f0d0";
442 | $fa-var-magnet: "\f076";
443 | $fa-var-mail-forward: "\f064";
444 | $fa-var-mail-reply: "\f112";
445 | $fa-var-mail-reply-all: "\f122";
446 | $fa-var-male: "\f183";
447 | $fa-var-map: "\f279";
448 | $fa-var-map-marker: "\f041";
449 | $fa-var-map-o: "\f278";
450 | $fa-var-map-pin: "\f276";
451 | $fa-var-map-signs: "\f277";
452 | $fa-var-mars: "\f222";
453 | $fa-var-mars-double: "\f227";
454 | $fa-var-mars-stroke: "\f229";
455 | $fa-var-mars-stroke-h: "\f22b";
456 | $fa-var-mars-stroke-v: "\f22a";
457 | $fa-var-maxcdn: "\f136";
458 | $fa-var-meanpath: "\f20c";
459 | $fa-var-medium: "\f23a";
460 | $fa-var-medkit: "\f0fa";
461 | $fa-var-meetup: "\f2e0";
462 | $fa-var-meh-o: "\f11a";
463 | $fa-var-mercury: "\f223";
464 | $fa-var-microchip: "\f2db";
465 | $fa-var-microphone: "\f130";
466 | $fa-var-microphone-slash: "\f131";
467 | $fa-var-minus: "\f068";
468 | $fa-var-minus-circle: "\f056";
469 | $fa-var-minus-square: "\f146";
470 | $fa-var-minus-square-o: "\f147";
471 | $fa-var-mixcloud: "\f289";
472 | $fa-var-mobile: "\f10b";
473 | $fa-var-mobile-phone: "\f10b";
474 | $fa-var-modx: "\f285";
475 | $fa-var-money: "\f0d6";
476 | $fa-var-moon-o: "\f186";
477 | $fa-var-mortar-board: "\f19d";
478 | $fa-var-motorcycle: "\f21c";
479 | $fa-var-mouse-pointer: "\f245";
480 | $fa-var-music: "\f001";
481 | $fa-var-navicon: "\f0c9";
482 | $fa-var-neuter: "\f22c";
483 | $fa-var-newspaper-o: "\f1ea";
484 | $fa-var-object-group: "\f247";
485 | $fa-var-object-ungroup: "\f248";
486 | $fa-var-odnoklassniki: "\f263";
487 | $fa-var-odnoklassniki-square: "\f264";
488 | $fa-var-opencart: "\f23d";
489 | $fa-var-openid: "\f19b";
490 | $fa-var-opera: "\f26a";
491 | $fa-var-optin-monster: "\f23c";
492 | $fa-var-outdent: "\f03b";
493 | $fa-var-pagelines: "\f18c";
494 | $fa-var-paint-brush: "\f1fc";
495 | $fa-var-paper-plane: "\f1d8";
496 | $fa-var-paper-plane-o: "\f1d9";
497 | $fa-var-paperclip: "\f0c6";
498 | $fa-var-paragraph: "\f1dd";
499 | $fa-var-paste: "\f0ea";
500 | $fa-var-pause: "\f04c";
501 | $fa-var-pause-circle: "\f28b";
502 | $fa-var-pause-circle-o: "\f28c";
503 | $fa-var-paw: "\f1b0";
504 | $fa-var-paypal: "\f1ed";
505 | $fa-var-pencil: "\f040";
506 | $fa-var-pencil-square: "\f14b";
507 | $fa-var-pencil-square-o: "\f044";
508 | $fa-var-percent: "\f295";
509 | $fa-var-phone: "\f095";
510 | $fa-var-phone-square: "\f098";
511 | $fa-var-photo: "\f03e";
512 | $fa-var-picture-o: "\f03e";
513 | $fa-var-pie-chart: "\f200";
514 | $fa-var-pied-piper: "\f2ae";
515 | $fa-var-pied-piper-alt: "\f1a8";
516 | $fa-var-pied-piper-pp: "\f1a7";
517 | $fa-var-pinterest: "\f0d2";
518 | $fa-var-pinterest-p: "\f231";
519 | $fa-var-pinterest-square: "\f0d3";
520 | $fa-var-plane: "\f072";
521 | $fa-var-play: "\f04b";
522 | $fa-var-play-circle: "\f144";
523 | $fa-var-play-circle-o: "\f01d";
524 | $fa-var-plug: "\f1e6";
525 | $fa-var-plus: "\f067";
526 | $fa-var-plus-circle: "\f055";
527 | $fa-var-plus-square: "\f0fe";
528 | $fa-var-plus-square-o: "\f196";
529 | $fa-var-podcast: "\f2ce";
530 | $fa-var-power-off: "\f011";
531 | $fa-var-print: "\f02f";
532 | $fa-var-product-hunt: "\f288";
533 | $fa-var-puzzle-piece: "\f12e";
534 | $fa-var-qq: "\f1d6";
535 | $fa-var-qrcode: "\f029";
536 | $fa-var-question: "\f128";
537 | $fa-var-question-circle: "\f059";
538 | $fa-var-question-circle-o: "\f29c";
539 | $fa-var-quora: "\f2c4";
540 | $fa-var-quote-left: "\f10d";
541 | $fa-var-quote-right: "\f10e";
542 | $fa-var-ra: "\f1d0";
543 | $fa-var-random: "\f074";
544 | $fa-var-ravelry: "\f2d9";
545 | $fa-var-rebel: "\f1d0";
546 | $fa-var-recycle: "\f1b8";
547 | $fa-var-reddit: "\f1a1";
548 | $fa-var-reddit-alien: "\f281";
549 | $fa-var-reddit-square: "\f1a2";
550 | $fa-var-refresh: "\f021";
551 | $fa-var-registered: "\f25d";
552 | $fa-var-remove: "\f00d";
553 | $fa-var-renren: "\f18b";
554 | $fa-var-reorder: "\f0c9";
555 | $fa-var-repeat: "\f01e";
556 | $fa-var-reply: "\f112";
557 | $fa-var-reply-all: "\f122";
558 | $fa-var-resistance: "\f1d0";
559 | $fa-var-retweet: "\f079";
560 | $fa-var-rmb: "\f157";
561 | $fa-var-road: "\f018";
562 | $fa-var-rocket: "\f135";
563 | $fa-var-rotate-left: "\f0e2";
564 | $fa-var-rotate-right: "\f01e";
565 | $fa-var-rouble: "\f158";
566 | $fa-var-rss: "\f09e";
567 | $fa-var-rss-square: "\f143";
568 | $fa-var-rub: "\f158";
569 | $fa-var-ruble: "\f158";
570 | $fa-var-rupee: "\f156";
571 | $fa-var-s15: "\f2cd";
572 | $fa-var-safari: "\f267";
573 | $fa-var-save: "\f0c7";
574 | $fa-var-scissors: "\f0c4";
575 | $fa-var-scribd: "\f28a";
576 | $fa-var-search: "\f002";
577 | $fa-var-search-minus: "\f010";
578 | $fa-var-search-plus: "\f00e";
579 | $fa-var-sellsy: "\f213";
580 | $fa-var-send: "\f1d8";
581 | $fa-var-send-o: "\f1d9";
582 | $fa-var-server: "\f233";
583 | $fa-var-share: "\f064";
584 | $fa-var-share-alt: "\f1e0";
585 | $fa-var-share-alt-square: "\f1e1";
586 | $fa-var-share-square: "\f14d";
587 | $fa-var-share-square-o: "\f045";
588 | $fa-var-shekel: "\f20b";
589 | $fa-var-sheqel: "\f20b";
590 | $fa-var-shield: "\f132";
591 | $fa-var-ship: "\f21a";
592 | $fa-var-shirtsinbulk: "\f214";
593 | $fa-var-shopping-bag: "\f290";
594 | $fa-var-shopping-basket: "\f291";
595 | $fa-var-shopping-cart: "\f07a";
596 | $fa-var-shower: "\f2cc";
597 | $fa-var-sign-in: "\f090";
598 | $fa-var-sign-language: "\f2a7";
599 | $fa-var-sign-out: "\f08b";
600 | $fa-var-signal: "\f012";
601 | $fa-var-signing: "\f2a7";
602 | $fa-var-simplybuilt: "\f215";
603 | $fa-var-sitemap: "\f0e8";
604 | $fa-var-skyatlas: "\f216";
605 | $fa-var-skype: "\f17e";
606 | $fa-var-slack: "\f198";
607 | $fa-var-sliders: "\f1de";
608 | $fa-var-slideshare: "\f1e7";
609 | $fa-var-smile-o: "\f118";
610 | $fa-var-snapchat: "\f2ab";
611 | $fa-var-snapchat-ghost: "\f2ac";
612 | $fa-var-snapchat-square: "\f2ad";
613 | $fa-var-snowflake-o: "\f2dc";
614 | $fa-var-soccer-ball-o: "\f1e3";
615 | $fa-var-sort: "\f0dc";
616 | $fa-var-sort-alpha-asc: "\f15d";
617 | $fa-var-sort-alpha-desc: "\f15e";
618 | $fa-var-sort-amount-asc: "\f160";
619 | $fa-var-sort-amount-desc: "\f161";
620 | $fa-var-sort-asc: "\f0de";
621 | $fa-var-sort-desc: "\f0dd";
622 | $fa-var-sort-down: "\f0dd";
623 | $fa-var-sort-numeric-asc: "\f162";
624 | $fa-var-sort-numeric-desc: "\f163";
625 | $fa-var-sort-up: "\f0de";
626 | $fa-var-soundcloud: "\f1be";
627 | $fa-var-space-shuttle: "\f197";
628 | $fa-var-spinner: "\f110";
629 | $fa-var-spoon: "\f1b1";
630 | $fa-var-spotify: "\f1bc";
631 | $fa-var-square: "\f0c8";
632 | $fa-var-square-o: "\f096";
633 | $fa-var-stack-exchange: "\f18d";
634 | $fa-var-stack-overflow: "\f16c";
635 | $fa-var-star: "\f005";
636 | $fa-var-star-half: "\f089";
637 | $fa-var-star-half-empty: "\f123";
638 | $fa-var-star-half-full: "\f123";
639 | $fa-var-star-half-o: "\f123";
640 | $fa-var-star-o: "\f006";
641 | $fa-var-steam: "\f1b6";
642 | $fa-var-steam-square: "\f1b7";
643 | $fa-var-step-backward: "\f048";
644 | $fa-var-step-forward: "\f051";
645 | $fa-var-stethoscope: "\f0f1";
646 | $fa-var-sticky-note: "\f249";
647 | $fa-var-sticky-note-o: "\f24a";
648 | $fa-var-stop: "\f04d";
649 | $fa-var-stop-circle: "\f28d";
650 | $fa-var-stop-circle-o: "\f28e";
651 | $fa-var-street-view: "\f21d";
652 | $fa-var-strikethrough: "\f0cc";
653 | $fa-var-stumbleupon: "\f1a4";
654 | $fa-var-stumbleupon-circle: "\f1a3";
655 | $fa-var-subscript: "\f12c";
656 | $fa-var-subway: "\f239";
657 | $fa-var-suitcase: "\f0f2";
658 | $fa-var-sun-o: "\f185";
659 | $fa-var-superpowers: "\f2dd";
660 | $fa-var-superscript: "\f12b";
661 | $fa-var-support: "\f1cd";
662 | $fa-var-table: "\f0ce";
663 | $fa-var-tablet: "\f10a";
664 | $fa-var-tachometer: "\f0e4";
665 | $fa-var-tag: "\f02b";
666 | $fa-var-tags: "\f02c";
667 | $fa-var-tasks: "\f0ae";
668 | $fa-var-taxi: "\f1ba";
669 | $fa-var-telegram: "\f2c6";
670 | $fa-var-television: "\f26c";
671 | $fa-var-tencent-weibo: "\f1d5";
672 | $fa-var-terminal: "\f120";
673 | $fa-var-text-height: "\f034";
674 | $fa-var-text-width: "\f035";
675 | $fa-var-th: "\f00a";
676 | $fa-var-th-large: "\f009";
677 | $fa-var-th-list: "\f00b";
678 | $fa-var-themeisle: "\f2b2";
679 | $fa-var-thermometer: "\f2c7";
680 | $fa-var-thermometer-0: "\f2cb";
681 | $fa-var-thermometer-1: "\f2ca";
682 | $fa-var-thermometer-2: "\f2c9";
683 | $fa-var-thermometer-3: "\f2c8";
684 | $fa-var-thermometer-4: "\f2c7";
685 | $fa-var-thermometer-empty: "\f2cb";
686 | $fa-var-thermometer-full: "\f2c7";
687 | $fa-var-thermometer-half: "\f2c9";
688 | $fa-var-thermometer-quarter: "\f2ca";
689 | $fa-var-thermometer-three-quarters: "\f2c8";
690 | $fa-var-thumb-tack: "\f08d";
691 | $fa-var-thumbs-down: "\f165";
692 | $fa-var-thumbs-o-down: "\f088";
693 | $fa-var-thumbs-o-up: "\f087";
694 | $fa-var-thumbs-up: "\f164";
695 | $fa-var-ticket: "\f145";
696 | $fa-var-times: "\f00d";
697 | $fa-var-times-circle: "\f057";
698 | $fa-var-times-circle-o: "\f05c";
699 | $fa-var-times-rectangle: "\f2d3";
700 | $fa-var-times-rectangle-o: "\f2d4";
701 | $fa-var-tint: "\f043";
702 | $fa-var-toggle-down: "\f150";
703 | $fa-var-toggle-left: "\f191";
704 | $fa-var-toggle-off: "\f204";
705 | $fa-var-toggle-on: "\f205";
706 | $fa-var-toggle-right: "\f152";
707 | $fa-var-toggle-up: "\f151";
708 | $fa-var-trademark: "\f25c";
709 | $fa-var-train: "\f238";
710 | $fa-var-transgender: "\f224";
711 | $fa-var-transgender-alt: "\f225";
712 | $fa-var-trash: "\f1f8";
713 | $fa-var-trash-o: "\f014";
714 | $fa-var-tree: "\f1bb";
715 | $fa-var-trello: "\f181";
716 | $fa-var-tripadvisor: "\f262";
717 | $fa-var-trophy: "\f091";
718 | $fa-var-truck: "\f0d1";
719 | $fa-var-try: "\f195";
720 | $fa-var-tty: "\f1e4";
721 | $fa-var-tumblr: "\f173";
722 | $fa-var-tumblr-square: "\f174";
723 | $fa-var-turkish-lira: "\f195";
724 | $fa-var-tv: "\f26c";
725 | $fa-var-twitch: "\f1e8";
726 | $fa-var-twitter: "\f099";
727 | $fa-var-twitter-square: "\f081";
728 | $fa-var-umbrella: "\f0e9";
729 | $fa-var-underline: "\f0cd";
730 | $fa-var-undo: "\f0e2";
731 | $fa-var-universal-access: "\f29a";
732 | $fa-var-university: "\f19c";
733 | $fa-var-unlink: "\f127";
734 | $fa-var-unlock: "\f09c";
735 | $fa-var-unlock-alt: "\f13e";
736 | $fa-var-unsorted: "\f0dc";
737 | $fa-var-upload: "\f093";
738 | $fa-var-usb: "\f287";
739 | $fa-var-usd: "\f155";
740 | $fa-var-user: "\f007";
741 | $fa-var-user-circle: "\f2bd";
742 | $fa-var-user-circle-o: "\f2be";
743 | $fa-var-user-md: "\f0f0";
744 | $fa-var-user-o: "\f2c0";
745 | $fa-var-user-plus: "\f234";
746 | $fa-var-user-secret: "\f21b";
747 | $fa-var-user-times: "\f235";
748 | $fa-var-users: "\f0c0";
749 | $fa-var-vcard: "\f2bb";
750 | $fa-var-vcard-o: "\f2bc";
751 | $fa-var-venus: "\f221";
752 | $fa-var-venus-double: "\f226";
753 | $fa-var-venus-mars: "\f228";
754 | $fa-var-viacoin: "\f237";
755 | $fa-var-viadeo: "\f2a9";
756 | $fa-var-viadeo-square: "\f2aa";
757 | $fa-var-video-camera: "\f03d";
758 | $fa-var-vimeo: "\f27d";
759 | $fa-var-vimeo-square: "\f194";
760 | $fa-var-vine: "\f1ca";
761 | $fa-var-vk: "\f189";
762 | $fa-var-volume-control-phone: "\f2a0";
763 | $fa-var-volume-down: "\f027";
764 | $fa-var-volume-off: "\f026";
765 | $fa-var-volume-up: "\f028";
766 | $fa-var-warning: "\f071";
767 | $fa-var-wechat: "\f1d7";
768 | $fa-var-weibo: "\f18a";
769 | $fa-var-weixin: "\f1d7";
770 | $fa-var-whatsapp: "\f232";
771 | $fa-var-wheelchair: "\f193";
772 | $fa-var-wheelchair-alt: "\f29b";
773 | $fa-var-wifi: "\f1eb";
774 | $fa-var-wikipedia-w: "\f266";
775 | $fa-var-window-close: "\f2d3";
776 | $fa-var-window-close-o: "\f2d4";
777 | $fa-var-window-maximize: "\f2d0";
778 | $fa-var-window-minimize: "\f2d1";
779 | $fa-var-window-restore: "\f2d2";
780 | $fa-var-windows: "\f17a";
781 | $fa-var-won: "\f159";
782 | $fa-var-wordpress: "\f19a";
783 | $fa-var-wpbeginner: "\f297";
784 | $fa-var-wpexplorer: "\f2de";
785 | $fa-var-wpforms: "\f298";
786 | $fa-var-wrench: "\f0ad";
787 | $fa-var-xing: "\f168";
788 | $fa-var-xing-square: "\f169";
789 | $fa-var-y-combinator: "\f23b";
790 | $fa-var-y-combinator-square: "\f1d4";
791 | $fa-var-yahoo: "\f19e";
792 | $fa-var-yc: "\f23b";
793 | $fa-var-yc-square: "\f1d4";
794 | $fa-var-yelp: "\f1e9";
795 | $fa-var-yen: "\f157";
796 | $fa-var-yoast: "\f2b1";
797 | $fa-var-youtube: "\f167";
798 | $fa-var-youtube-play: "\f16a";
799 | $fa-var-youtube-square: "\f166";
800 |
801 |
--------------------------------------------------------------------------------