diff --git a/.gitignore b/.gitignore index 2f9ef431..221a0480 100644 --- a/.gitignore +++ b/.gitignore @@ -96,2504 +96,4 @@ components/wifi-manager/res/backup/ test/.vscode/ -node_modules/.bin/acorn - -node_modules/.bin/ - -node_modules/\@babel/highlight/ -node_modules/@babel/code-frame/LICENSE -node_modules/@babel/code-frame/package.json -node_modules/@babel/code-frame/README.md -node_modules/@babel/code-frame/lib/index.js -node_modules/@babel/helper-validator-identifier/LICENSE -node_modules/@babel/helper-validator-identifier/package.json -node_modules/@babel/helper-validator-identifier/README.md -node_modules/@babel/helper-validator-identifier/lib/identifier.js -node_modules/@babel/helper-validator-identifier/lib/index.js -node_modules/@babel/helper-validator-identifier/lib/keyword.js -node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js -node_modules/@eslint/eslintrc/CHANGELOG.md -node_modules/@eslint/eslintrc/LICENSE -node_modules/@eslint/eslintrc/package.json -node_modules/@eslint/eslintrc/README.md -node_modules/@eslint/eslintrc/conf/config-schema.js -node_modules/@eslint/eslintrc/conf/environments.js -node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js -node_modules/@eslint/eslintrc/lib/config-array-factory.js -node_modules/@eslint/eslintrc/lib/index.js -node_modules/@eslint/eslintrc/lib/config-array/config-array.js -node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js -node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js -node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js -node_modules/@eslint/eslintrc/lib/config-array/index.js -node_modules/@eslint/eslintrc/lib/config-array/override-tester.js -node_modules/@eslint/eslintrc/lib/shared/ajv.js -node_modules/@eslint/eslintrc/lib/shared/config-ops.js -node_modules/@eslint/eslintrc/lib/shared/config-validator.js -node_modules/@eslint/eslintrc/lib/shared/deprecation-warnings.js -node_modules/@eslint/eslintrc/lib/shared/naming.js -node_modules/@eslint/eslintrc/lib/shared/relative-module-resolver.js -node_modules/@eslint/eslintrc/lib/shared/types.js -node_modules/acorn/CHANGELOG.md -node_modules/acorn/LICENSE -node_modules/acorn/package.json -node_modules/acorn/README.md -node_modules/acorn/bin/acorn -node_modules/acorn/dist/acorn.d.ts -node_modules/acorn/dist/acorn.js -node_modules/acorn/dist/acorn.js.map -node_modules/acorn/dist/acorn.mjs -node_modules/acorn/dist/acorn.mjs.d.ts -node_modules/acorn/dist/acorn.mjs.map -node_modules/acorn/dist/bin.js -node_modules/acorn-jsx/index.js -node_modules/acorn-jsx/LICENSE -node_modules/acorn-jsx/package.json -node_modules/acorn-jsx/README.md -node_modules/acorn-jsx/xhtml.js -node_modules/ajv/.tonic_example.js -node_modules/ajv/LICENSE -node_modules/ajv/package.json -node_modules/ajv/README.md -node_modules/ajv/dist/ajv.bundle.js -node_modules/ajv/dist/ajv.min.js -node_modules/ajv/dist/ajv.min.js.map -node_modules/ajv/lib/ajv.d.ts -node_modules/ajv/lib/ajv.js -node_modules/ajv/lib/cache.js -node_modules/ajv/lib/data.js -node_modules/ajv/lib/definition_schema.js -node_modules/ajv/lib/keyword.js -node_modules/ajv/lib/compile/async.js -node_modules/ajv/lib/compile/equal.js -node_modules/ajv/lib/compile/error_classes.js -node_modules/ajv/lib/compile/formats.js -node_modules/ajv/lib/compile/index.js -node_modules/ajv/lib/compile/resolve.js -node_modules/ajv/lib/compile/rules.js -node_modules/ajv/lib/compile/schema_obj.js -node_modules/ajv/lib/compile/ucs2length.js -node_modules/ajv/lib/compile/util.js -node_modules/ajv/lib/dot/_limit.jst -node_modules/ajv/lib/dot/_limitItems.jst -node_modules/ajv/lib/dot/_limitLength.jst -node_modules/ajv/lib/dot/_limitProperties.jst -node_modules/ajv/lib/dot/allOf.jst -node_modules/ajv/lib/dot/anyOf.jst -node_modules/ajv/lib/dot/coerce.def -node_modules/ajv/lib/dot/comment.jst -node_modules/ajv/lib/dot/const.jst -node_modules/ajv/lib/dot/contains.jst -node_modules/ajv/lib/dot/custom.jst -node_modules/ajv/lib/dot/defaults.def -node_modules/ajv/lib/dot/definitions.def -node_modules/ajv/lib/dot/dependencies.jst -node_modules/ajv/lib/dot/enum.jst -node_modules/ajv/lib/dot/errors.def -node_modules/ajv/lib/dot/format.jst -node_modules/ajv/lib/dot/if.jst -node_modules/ajv/lib/dot/items.jst -node_modules/ajv/lib/dot/missing.def -node_modules/ajv/lib/dot/multipleOf.jst -node_modules/ajv/lib/dot/not.jst -node_modules/ajv/lib/dot/oneOf.jst -node_modules/ajv/lib/dot/pattern.jst -node_modules/ajv/lib/dot/properties.jst -node_modules/ajv/lib/dot/propertyNames.jst -node_modules/ajv/lib/dot/ref.jst -node_modules/ajv/lib/dot/required.jst -node_modules/ajv/lib/dot/uniqueItems.jst -node_modules/ajv/lib/dot/validate.jst -node_modules/ajv/lib/dotjs/_limit.js -node_modules/ajv/lib/dotjs/_limitItems.js -node_modules/ajv/lib/dotjs/_limitLength.js -node_modules/ajv/lib/dotjs/_limitProperties.js -node_modules/ajv/lib/dotjs/allOf.js -node_modules/ajv/lib/dotjs/anyOf.js -node_modules/ajv/lib/dotjs/comment.js -node_modules/ajv/lib/dotjs/const.js -node_modules/ajv/lib/dotjs/contains.js -node_modules/ajv/lib/dotjs/custom.js -node_modules/ajv/lib/dotjs/dependencies.js -node_modules/ajv/lib/dotjs/enum.js -node_modules/ajv/lib/dotjs/format.js -node_modules/ajv/lib/dotjs/if.js -node_modules/ajv/lib/dotjs/index.js -node_modules/ajv/lib/dotjs/items.js -node_modules/ajv/lib/dotjs/multipleOf.js -node_modules/ajv/lib/dotjs/not.js -node_modules/ajv/lib/dotjs/oneOf.js -node_modules/ajv/lib/dotjs/pattern.js -node_modules/ajv/lib/dotjs/properties.js -node_modules/ajv/lib/dotjs/propertyNames.js -node_modules/ajv/lib/dotjs/README.md -node_modules/ajv/lib/dotjs/ref.js -node_modules/ajv/lib/dotjs/required.js -node_modules/ajv/lib/dotjs/uniqueItems.js -node_modules/ajv/lib/dotjs/validate.js -node_modules/ajv/lib/refs/data.json -node_modules/ajv/lib/refs/json-schema-draft-04.json -node_modules/ajv/lib/refs/json-schema-draft-06.json -node_modules/ajv/lib/refs/json-schema-draft-07.json -node_modules/ajv/lib/refs/json-schema-secure.json -node_modules/ajv/scripts/.eslintrc.yml -node_modules/ajv/scripts/bundle.js -node_modules/ajv/scripts/compile-dots.js -node_modules/ajv/scripts/info -node_modules/ajv/scripts/prepare-tests -node_modules/ajv/scripts/publish-built-version -node_modules/ajv/scripts/travis-gh-pages -node_modules/ansi-colors/index.js -node_modules/ansi-colors/LICENSE -node_modules/ansi-colors/package.json -node_modules/ansi-colors/README.md -node_modules/ansi-colors/symbols.js -node_modules/ansi-colors/types/index.d.ts -node_modules/ansi-regex/index.d.ts -node_modules/ansi-regex/index.js -node_modules/ansi-regex/license -node_modules/ansi-regex/package.json -node_modules/ansi-regex/readme.md -node_modules/ansi-styles/index.js -node_modules/ansi-styles/license -node_modules/ansi-styles/package.json -node_modules/ansi-styles/readme.md -node_modules/argparse/CHANGELOG.md -node_modules/argparse/index.js -node_modules/argparse/LICENSE -node_modules/argparse/package.json -node_modules/argparse/README.md -node_modules/argparse/lib/action_container.js -node_modules/argparse/lib/action.js -node_modules/argparse/lib/argparse.js -node_modules/argparse/lib/argument_parser.js -node_modules/argparse/lib/const.js -node_modules/argparse/lib/namespace.js -node_modules/argparse/lib/utils.js -node_modules/argparse/lib/action/append.js -node_modules/argparse/lib/action/count.js -node_modules/argparse/lib/action/help.js -node_modules/argparse/lib/action/store.js -node_modules/argparse/lib/action/subparsers.js -node_modules/argparse/lib/action/version.js -node_modules/argparse/lib/action/append/constant.js -node_modules/argparse/lib/action/store/constant.js -node_modules/argparse/lib/action/store/false.js -node_modules/argparse/lib/action/store/true.js -node_modules/argparse/lib/argument/error.js -node_modules/argparse/lib/argument/exclusive.js -node_modules/argparse/lib/argument/group.js -node_modules/argparse/lib/help/added_formatters.js -node_modules/argparse/lib/help/formatter.js -node_modules/astral-regex/index.js -node_modules/astral-regex/license -node_modules/astral-regex/package.json -node_modules/astral-regex/readme.md -node_modules/balanced-match/.npmignore -node_modules/balanced-match/index.js -node_modules/balanced-match/LICENSE.md -node_modules/balanced-match/package.json -node_modules/balanced-match/README.md -node_modules/brace-expansion/index.js -node_modules/brace-expansion/LICENSE -node_modules/brace-expansion/package.json -node_modules/brace-expansion/README.md -node_modules/callsites/index.d.ts -node_modules/callsites/index.js -node_modules/callsites/license -node_modules/callsites/package.json -node_modules/callsites/readme.md -node_modules/chalk/index.d.ts -node_modules/chalk/license -node_modules/chalk/package.json -node_modules/chalk/readme.md -node_modules/chalk/node_modules/ansi-styles/index.d.ts -node_modules/chalk/node_modules/ansi-styles/index.js -node_modules/chalk/node_modules/ansi-styles/license -node_modules/chalk/node_modules/ansi-styles/package.json -node_modules/chalk/node_modules/ansi-styles/readme.md -node_modules/chalk/node_modules/color-convert/CHANGELOG.md -node_modules/chalk/node_modules/color-convert/conversions.js -node_modules/chalk/node_modules/color-convert/index.js -node_modules/chalk/node_modules/color-convert/LICENSE -node_modules/chalk/node_modules/color-convert/package.json -node_modules/chalk/node_modules/color-convert/README.md -node_modules/chalk/node_modules/color-convert/route.js -node_modules/chalk/node_modules/color-name/index.js -node_modules/chalk/node_modules/color-name/LICENSE -node_modules/chalk/node_modules/color-name/package.json -node_modules/chalk/node_modules/color-name/README.md -node_modules/chalk/node_modules/has-flag/index.d.ts -node_modules/chalk/node_modules/has-flag/index.js -node_modules/chalk/node_modules/has-flag/license -node_modules/chalk/node_modules/has-flag/package.json -node_modules/chalk/node_modules/has-flag/readme.md -node_modules/chalk/node_modules/supports-color/browser.js -node_modules/chalk/node_modules/supports-color/index.js -node_modules/chalk/node_modules/supports-color/license -node_modules/chalk/node_modules/supports-color/package.json -node_modules/chalk/node_modules/supports-color/readme.md -node_modules/chalk/source/index.js -node_modules/chalk/source/templates.js -node_modules/chalk/source/util.js -node_modules/color-convert/CHANGELOG.md -node_modules/color-convert/conversions.js -node_modules/color-convert/index.js -node_modules/color-convert/LICENSE -node_modules/color-convert/package.json -node_modules/color-convert/README.md -node_modules/color-convert/route.js -node_modules/color-name/.eslintrc.json -node_modules/color-name/.npmignore -node_modules/color-name/index.js -node_modules/color-name/LICENSE -node_modules/color-name/package.json -node_modules/color-name/README.md -node_modules/color-name/test.js -node_modules/concat-map/.travis.yml -node_modules/concat-map/index.js -node_modules/concat-map/LICENSE -node_modules/concat-map/package.json -node_modules/concat-map/README.markdown -node_modules/concat-map/example/map.js -node_modules/concat-map/test/map.js -node_modules/cross-spawn/CHANGELOG.md -node_modules/cross-spawn/index.js -node_modules/cross-spawn/LICENSE -node_modules/cross-spawn/package.json -node_modules/cross-spawn/README.md -node_modules/cross-spawn/lib/enoent.js -node_modules/cross-spawn/lib/parse.js -node_modules/cross-spawn/lib/util/escape.js -node_modules/cross-spawn/lib/util/readShebang.js -node_modules/cross-spawn/lib/util/resolveCommand.js -node_modules/debug/LICENSE -node_modules/debug/package.json -node_modules/debug/README.md -node_modules/debug/src/browser.js -node_modules/debug/src/common.js -node_modules/debug/src/index.js -node_modules/debug/src/node.js -node_modules/deep-is/.npmignore -node_modules/deep-is/.travis.yml -node_modules/deep-is/index.js -node_modules/deep-is/LICENSE -node_modules/deep-is/package.json -node_modules/deep-is/README.markdown -node_modules/deep-is/example/cmp.js -node_modules/deep-is/test/cmp.js -node_modules/deep-is/test/NaN.js -node_modules/deep-is/test/neg-vs-pos-0.js -node_modules/doctrine/CHANGELOG.md -node_modules/doctrine/LICENSE -node_modules/doctrine/LICENSE.closure-compiler -node_modules/doctrine/LICENSE.esprima -node_modules/doctrine/package.json -node_modules/doctrine/README.md -node_modules/doctrine/lib/doctrine.js -node_modules/doctrine/lib/typed.js -node_modules/doctrine/lib/utility.js -node_modules/emoji-regex/index.d.ts -node_modules/emoji-regex/index.js -node_modules/emoji-regex/LICENSE-MIT.txt -node_modules/emoji-regex/package.json -node_modules/emoji-regex/README.md -node_modules/emoji-regex/text.js -node_modules/emoji-regex/es2015/index.js -node_modules/emoji-regex/es2015/text.js -node_modules/enquirer/CHANGELOG.md -node_modules/enquirer/index.d.ts -node_modules/enquirer/index.js -node_modules/enquirer/LICENSE -node_modules/enquirer/package.json -node_modules/enquirer/README.md -node_modules/enquirer/lib/ansi.js -node_modules/enquirer/lib/combos.js -node_modules/enquirer/lib/completer.js -node_modules/enquirer/lib/interpolate.js -node_modules/enquirer/lib/keypress.js -node_modules/enquirer/lib/placeholder.js -node_modules/enquirer/lib/prompt.js -node_modules/enquirer/lib/render.js -node_modules/enquirer/lib/roles.js -node_modules/enquirer/lib/state.js -node_modules/enquirer/lib/styles.js -node_modules/enquirer/lib/symbols.js -node_modules/enquirer/lib/theme.js -node_modules/enquirer/lib/timer.js -node_modules/enquirer/lib/utils.js -node_modules/enquirer/lib/prompts/autocomplete.js -node_modules/enquirer/lib/prompts/basicauth.js -node_modules/enquirer/lib/prompts/confirm.js -node_modules/enquirer/lib/prompts/editable.js -node_modules/enquirer/lib/prompts/form.js -node_modules/enquirer/lib/prompts/index.js -node_modules/enquirer/lib/prompts/input.js -node_modules/enquirer/lib/prompts/invisible.js -node_modules/enquirer/lib/prompts/list.js -node_modules/enquirer/lib/prompts/multiselect.js -node_modules/enquirer/lib/prompts/numeral.js -node_modules/enquirer/lib/prompts/password.js -node_modules/enquirer/lib/prompts/quiz.js -node_modules/enquirer/lib/prompts/scale.js -node_modules/enquirer/lib/prompts/select.js -node_modules/enquirer/lib/prompts/snippet.js -node_modules/enquirer/lib/prompts/sort.js -node_modules/enquirer/lib/prompts/survey.js -node_modules/enquirer/lib/prompts/text.js -node_modules/enquirer/lib/prompts/toggle.js -node_modules/enquirer/lib/types/array.js -node_modules/enquirer/lib/types/auth.js -node_modules/enquirer/lib/types/boolean.js -node_modules/enquirer/lib/types/index.js -node_modules/enquirer/lib/types/number.js -node_modules/enquirer/lib/types/string.js -node_modules/escape-string-regexp/index.js -node_modules/escape-string-regexp/license -node_modules/escape-string-regexp/package.json -node_modules/escape-string-regexp/readme.md -node_modules/eslint/CHANGELOG.md -node_modules/eslint/LICENSE -node_modules/eslint/package.json -node_modules/eslint/README.md -node_modules/eslint/bin/eslint.js -node_modules/eslint/conf/category-list.json -node_modules/eslint/conf/config-schema.js -node_modules/eslint/conf/default-cli-options.js -node_modules/eslint/conf/eslint-all.js -node_modules/eslint/conf/eslint-recommended.js -node_modules/eslint/conf/replacements.json -node_modules/eslint/lib/api.js -node_modules/eslint/lib/cli.js -node_modules/eslint/lib/options.js -node_modules/eslint/lib/cli-engine/cli-engine.js -node_modules/eslint/lib/cli-engine/file-enumerator.js -node_modules/eslint/lib/cli-engine/hash.js -node_modules/eslint/lib/cli-engine/index.js -node_modules/eslint/lib/cli-engine/lint-result-cache.js -node_modules/eslint/lib/cli-engine/load-rules.js -node_modules/eslint/lib/cli-engine/xml-escape.js -node_modules/eslint/lib/cli-engine/formatters/checkstyle.js -node_modules/eslint/lib/cli-engine/formatters/codeframe.js -node_modules/eslint/lib/cli-engine/formatters/compact.js -node_modules/eslint/lib/cli-engine/formatters/html-template-message.html -node_modules/eslint/lib/cli-engine/formatters/html-template-page.html -node_modules/eslint/lib/cli-engine/formatters/html-template-result.html -node_modules/eslint/lib/cli-engine/formatters/html.js -node_modules/eslint/lib/cli-engine/formatters/jslint-xml.js -node_modules/eslint/lib/cli-engine/formatters/json-with-metadata.js -node_modules/eslint/lib/cli-engine/formatters/json.js -node_modules/eslint/lib/cli-engine/formatters/junit.js -node_modules/eslint/lib/cli-engine/formatters/stylish.js -node_modules/eslint/lib/cli-engine/formatters/table.js -node_modules/eslint/lib/cli-engine/formatters/tap.js -node_modules/eslint/lib/cli-engine/formatters/unix.js -node_modules/eslint/lib/cli-engine/formatters/visualstudio.js -node_modules/eslint/lib/eslint/eslint.js -node_modules/eslint/lib/eslint/index.js -node_modules/eslint/lib/init/autoconfig.js -node_modules/eslint/lib/init/config-file.js -node_modules/eslint/lib/init/config-initializer.js -node_modules/eslint/lib/init/config-rule.js -node_modules/eslint/lib/init/npm-utils.js -node_modules/eslint/lib/init/source-code-utils.js -node_modules/eslint/lib/linter/apply-disable-directives.js -node_modules/eslint/lib/linter/config-comment-parser.js -node_modules/eslint/lib/linter/index.js -node_modules/eslint/lib/linter/interpolate.js -node_modules/eslint/lib/linter/linter.js -node_modules/eslint/lib/linter/node-event-generator.js -node_modules/eslint/lib/linter/report-translator.js -node_modules/eslint/lib/linter/rule-fixer.js -node_modules/eslint/lib/linter/rules.js -node_modules/eslint/lib/linter/safe-emitter.js -node_modules/eslint/lib/linter/source-code-fixer.js -node_modules/eslint/lib/linter/timing.js -node_modules/eslint/lib/linter/code-path-analysis/code-path-analyzer.js -node_modules/eslint/lib/linter/code-path-analysis/code-path-segment.js -node_modules/eslint/lib/linter/code-path-analysis/code-path-state.js -node_modules/eslint/lib/linter/code-path-analysis/code-path.js -node_modules/eslint/lib/linter/code-path-analysis/debug-helpers.js -node_modules/eslint/lib/linter/code-path-analysis/fork-context.js -node_modules/eslint/lib/linter/code-path-analysis/id-generator.js -node_modules/eslint/lib/rule-tester/index.js -node_modules/eslint/lib/rule-tester/rule-tester.js -node_modules/eslint/lib/rules/accessor-pairs.js -node_modules/eslint/lib/rules/array-bracket-newline.js -node_modules/eslint/lib/rules/array-bracket-spacing.js -node_modules/eslint/lib/rules/array-callback-return.js -node_modules/eslint/lib/rules/array-element-newline.js -node_modules/eslint/lib/rules/arrow-body-style.js -node_modules/eslint/lib/rules/arrow-parens.js -node_modules/eslint/lib/rules/arrow-spacing.js -node_modules/eslint/lib/rules/block-scoped-var.js -node_modules/eslint/lib/rules/block-spacing.js -node_modules/eslint/lib/rules/brace-style.js -node_modules/eslint/lib/rules/callback-return.js -node_modules/eslint/lib/rules/camelcase.js -node_modules/eslint/lib/rules/capitalized-comments.js -node_modules/eslint/lib/rules/class-methods-use-this.js -node_modules/eslint/lib/rules/comma-dangle.js -node_modules/eslint/lib/rules/comma-spacing.js -node_modules/eslint/lib/rules/comma-style.js -node_modules/eslint/lib/rules/complexity.js -node_modules/eslint/lib/rules/computed-property-spacing.js -node_modules/eslint/lib/rules/consistent-return.js -node_modules/eslint/lib/rules/consistent-this.js -node_modules/eslint/lib/rules/constructor-super.js -node_modules/eslint/lib/rules/curly.js -node_modules/eslint/lib/rules/default-case-last.js -node_modules/eslint/lib/rules/default-case.js -node_modules/eslint/lib/rules/default-param-last.js -node_modules/eslint/lib/rules/dot-location.js -node_modules/eslint/lib/rules/dot-notation.js -node_modules/eslint/lib/rules/eol-last.js -node_modules/eslint/lib/rules/eqeqeq.js -node_modules/eslint/lib/rules/for-direction.js -node_modules/eslint/lib/rules/func-call-spacing.js -node_modules/eslint/lib/rules/func-name-matching.js -node_modules/eslint/lib/rules/func-names.js -node_modules/eslint/lib/rules/func-style.js -node_modules/eslint/lib/rules/function-call-argument-newline.js -node_modules/eslint/lib/rules/function-paren-newline.js -node_modules/eslint/lib/rules/generator-star-spacing.js -node_modules/eslint/lib/rules/getter-return.js -node_modules/eslint/lib/rules/global-require.js -node_modules/eslint/lib/rules/grouped-accessor-pairs.js -node_modules/eslint/lib/rules/guard-for-in.js -node_modules/eslint/lib/rules/handle-callback-err.js -node_modules/eslint/lib/rules/id-blacklist.js -node_modules/eslint/lib/rules/id-denylist.js -node_modules/eslint/lib/rules/id-length.js -node_modules/eslint/lib/rules/id-match.js -node_modules/eslint/lib/rules/implicit-arrow-linebreak.js -node_modules/eslint/lib/rules/indent-legacy.js -node_modules/eslint/lib/rules/indent.js -node_modules/eslint/lib/rules/index.js -node_modules/eslint/lib/rules/init-declarations.js -node_modules/eslint/lib/rules/jsx-quotes.js -node_modules/eslint/lib/rules/key-spacing.js -node_modules/eslint/lib/rules/keyword-spacing.js -node_modules/eslint/lib/rules/line-comment-position.js -node_modules/eslint/lib/rules/linebreak-style.js -node_modules/eslint/lib/rules/lines-around-comment.js -node_modules/eslint/lib/rules/lines-around-directive.js -node_modules/eslint/lib/rules/lines-between-class-members.js -node_modules/eslint/lib/rules/max-classes-per-file.js -node_modules/eslint/lib/rules/max-depth.js -node_modules/eslint/lib/rules/max-len.js -node_modules/eslint/lib/rules/max-lines-per-function.js -node_modules/eslint/lib/rules/max-lines.js -node_modules/eslint/lib/rules/max-nested-callbacks.js -node_modules/eslint/lib/rules/max-params.js -node_modules/eslint/lib/rules/max-statements-per-line.js -node_modules/eslint/lib/rules/max-statements.js -node_modules/eslint/lib/rules/multiline-comment-style.js -node_modules/eslint/lib/rules/multiline-ternary.js -node_modules/eslint/lib/rules/new-cap.js -node_modules/eslint/lib/rules/new-parens.js -node_modules/eslint/lib/rules/newline-after-var.js -node_modules/eslint/lib/rules/newline-before-return.js -node_modules/eslint/lib/rules/newline-per-chained-call.js -node_modules/eslint/lib/rules/no-alert.js -node_modules/eslint/lib/rules/no-array-constructor.js -node_modules/eslint/lib/rules/no-async-promise-executor.js -node_modules/eslint/lib/rules/no-await-in-loop.js -node_modules/eslint/lib/rules/no-bitwise.js -node_modules/eslint/lib/rules/no-buffer-constructor.js -node_modules/eslint/lib/rules/no-caller.js -node_modules/eslint/lib/rules/no-case-declarations.js -node_modules/eslint/lib/rules/no-catch-shadow.js -node_modules/eslint/lib/rules/no-class-assign.js -node_modules/eslint/lib/rules/no-compare-neg-zero.js -node_modules/eslint/lib/rules/no-cond-assign.js -node_modules/eslint/lib/rules/no-confusing-arrow.js -node_modules/eslint/lib/rules/no-console.js -node_modules/eslint/lib/rules/no-const-assign.js -node_modules/eslint/lib/rules/no-constant-condition.js -node_modules/eslint/lib/rules/no-constructor-return.js -node_modules/eslint/lib/rules/no-continue.js -node_modules/eslint/lib/rules/no-control-regex.js -node_modules/eslint/lib/rules/no-debugger.js -node_modules/eslint/lib/rules/no-delete-var.js -node_modules/eslint/lib/rules/no-div-regex.js -node_modules/eslint/lib/rules/no-dupe-args.js -node_modules/eslint/lib/rules/no-dupe-class-members.js -node_modules/eslint/lib/rules/no-dupe-else-if.js -node_modules/eslint/lib/rules/no-dupe-keys.js -node_modules/eslint/lib/rules/no-duplicate-case.js -node_modules/eslint/lib/rules/no-duplicate-imports.js -node_modules/eslint/lib/rules/no-else-return.js -node_modules/eslint/lib/rules/no-empty-character-class.js -node_modules/eslint/lib/rules/no-empty-function.js -node_modules/eslint/lib/rules/no-empty-pattern.js -node_modules/eslint/lib/rules/no-empty.js -node_modules/eslint/lib/rules/no-eq-null.js -node_modules/eslint/lib/rules/no-eval.js -node_modules/eslint/lib/rules/no-ex-assign.js -node_modules/eslint/lib/rules/no-extend-native.js -node_modules/eslint/lib/rules/no-extra-bind.js -node_modules/eslint/lib/rules/no-extra-boolean-cast.js -node_modules/eslint/lib/rules/no-extra-label.js -node_modules/eslint/lib/rules/no-extra-parens.js -node_modules/eslint/lib/rules/no-extra-semi.js -node_modules/eslint/lib/rules/no-fallthrough.js -node_modules/eslint/lib/rules/no-floating-decimal.js -node_modules/eslint/lib/rules/no-func-assign.js -node_modules/eslint/lib/rules/no-global-assign.js -node_modules/eslint/lib/rules/no-implicit-coercion.js -node_modules/eslint/lib/rules/no-implicit-globals.js -node_modules/eslint/lib/rules/no-implied-eval.js -node_modules/eslint/lib/rules/no-import-assign.js -node_modules/eslint/lib/rules/no-inline-comments.js -node_modules/eslint/lib/rules/no-inner-declarations.js -node_modules/eslint/lib/rules/no-invalid-regexp.js -node_modules/eslint/lib/rules/no-invalid-this.js -node_modules/eslint/lib/rules/no-irregular-whitespace.js -node_modules/eslint/lib/rules/no-iterator.js -node_modules/eslint/lib/rules/no-label-var.js -node_modules/eslint/lib/rules/no-labels.js -node_modules/eslint/lib/rules/no-lone-blocks.js -node_modules/eslint/lib/rules/no-lonely-if.js -node_modules/eslint/lib/rules/no-loop-func.js -node_modules/eslint/lib/rules/no-loss-of-precision.js -node_modules/eslint/lib/rules/no-magic-numbers.js -node_modules/eslint/lib/rules/no-misleading-character-class.js -node_modules/eslint/lib/rules/no-mixed-operators.js -node_modules/eslint/lib/rules/no-mixed-requires.js -node_modules/eslint/lib/rules/no-mixed-spaces-and-tabs.js -node_modules/eslint/lib/rules/no-multi-assign.js -node_modules/eslint/lib/rules/no-multi-spaces.js -node_modules/eslint/lib/rules/no-multi-str.js -node_modules/eslint/lib/rules/no-multiple-empty-lines.js -node_modules/eslint/lib/rules/no-native-reassign.js -node_modules/eslint/lib/rules/no-negated-condition.js -node_modules/eslint/lib/rules/no-negated-in-lhs.js -node_modules/eslint/lib/rules/no-nested-ternary.js -node_modules/eslint/lib/rules/no-new-func.js -node_modules/eslint/lib/rules/no-new-object.js -node_modules/eslint/lib/rules/no-new-require.js -node_modules/eslint/lib/rules/no-new-symbol.js -node_modules/eslint/lib/rules/no-new-wrappers.js -node_modules/eslint/lib/rules/no-new.js -node_modules/eslint/lib/rules/no-obj-calls.js -node_modules/eslint/lib/rules/no-octal-escape.js -node_modules/eslint/lib/rules/no-octal.js -node_modules/eslint/lib/rules/no-param-reassign.js -node_modules/eslint/lib/rules/no-path-concat.js -node_modules/eslint/lib/rules/no-plusplus.js -node_modules/eslint/lib/rules/no-process-env.js -node_modules/eslint/lib/rules/no-process-exit.js -node_modules/eslint/lib/rules/no-promise-executor-return.js -node_modules/eslint/lib/rules/no-proto.js -node_modules/eslint/lib/rules/no-prototype-builtins.js -node_modules/eslint/lib/rules/no-redeclare.js -node_modules/eslint/lib/rules/no-regex-spaces.js -node_modules/eslint/lib/rules/no-restricted-exports.js -node_modules/eslint/lib/rules/no-restricted-globals.js -node_modules/eslint/lib/rules/no-restricted-imports.js -node_modules/eslint/lib/rules/no-restricted-modules.js -node_modules/eslint/lib/rules/no-restricted-properties.js -node_modules/eslint/lib/rules/no-restricted-syntax.js -node_modules/eslint/lib/rules/no-return-assign.js -node_modules/eslint/lib/rules/no-return-await.js -node_modules/eslint/lib/rules/no-script-url.js -node_modules/eslint/lib/rules/no-self-assign.js -node_modules/eslint/lib/rules/no-self-compare.js -node_modules/eslint/lib/rules/no-sequences.js -node_modules/eslint/lib/rules/no-setter-return.js -node_modules/eslint/lib/rules/no-shadow-restricted-names.js -node_modules/eslint/lib/rules/no-shadow.js -node_modules/eslint/lib/rules/no-spaced-func.js -node_modules/eslint/lib/rules/no-sparse-arrays.js -node_modules/eslint/lib/rules/no-sync.js -node_modules/eslint/lib/rules/no-tabs.js -node_modules/eslint/lib/rules/no-template-curly-in-string.js -node_modules/eslint/lib/rules/no-ternary.js -node_modules/eslint/lib/rules/no-this-before-super.js -node_modules/eslint/lib/rules/no-throw-literal.js -node_modules/eslint/lib/rules/no-trailing-spaces.js -node_modules/eslint/lib/rules/no-undef-init.js -node_modules/eslint/lib/rules/no-undef.js -node_modules/eslint/lib/rules/no-undefined.js -node_modules/eslint/lib/rules/no-underscore-dangle.js -node_modules/eslint/lib/rules/no-unexpected-multiline.js -node_modules/eslint/lib/rules/no-unmodified-loop-condition.js -node_modules/eslint/lib/rules/no-unneeded-ternary.js -node_modules/eslint/lib/rules/no-unreachable-loop.js -node_modules/eslint/lib/rules/no-unreachable.js -node_modules/eslint/lib/rules/no-unsafe-finally.js -node_modules/eslint/lib/rules/no-unsafe-negation.js -node_modules/eslint/lib/rules/no-unused-expressions.js -node_modules/eslint/lib/rules/no-unused-labels.js -node_modules/eslint/lib/rules/no-unused-vars.js -node_modules/eslint/lib/rules/no-use-before-define.js -node_modules/eslint/lib/rules/no-useless-backreference.js -node_modules/eslint/lib/rules/no-useless-call.js -node_modules/eslint/lib/rules/no-useless-catch.js -node_modules/eslint/lib/rules/no-useless-computed-key.js -node_modules/eslint/lib/rules/no-useless-concat.js -node_modules/eslint/lib/rules/no-useless-constructor.js -node_modules/eslint/lib/rules/no-useless-escape.js -node_modules/eslint/lib/rules/no-useless-rename.js -node_modules/eslint/lib/rules/no-useless-return.js -node_modules/eslint/lib/rules/no-var.js -node_modules/eslint/lib/rules/no-void.js -node_modules/eslint/lib/rules/no-warning-comments.js -node_modules/eslint/lib/rules/no-whitespace-before-property.js -node_modules/eslint/lib/rules/no-with.js -node_modules/eslint/lib/rules/nonblock-statement-body-position.js -node_modules/eslint/lib/rules/object-curly-newline.js -node_modules/eslint/lib/rules/object-curly-spacing.js -node_modules/eslint/lib/rules/object-property-newline.js -node_modules/eslint/lib/rules/object-shorthand.js -node_modules/eslint/lib/rules/one-var-declaration-per-line.js -node_modules/eslint/lib/rules/one-var.js -node_modules/eslint/lib/rules/operator-assignment.js -node_modules/eslint/lib/rules/operator-linebreak.js -node_modules/eslint/lib/rules/padded-blocks.js -node_modules/eslint/lib/rules/padding-line-between-statements.js -node_modules/eslint/lib/rules/prefer-arrow-callback.js -node_modules/eslint/lib/rules/prefer-const.js -node_modules/eslint/lib/rules/prefer-destructuring.js -node_modules/eslint/lib/rules/prefer-exponentiation-operator.js -node_modules/eslint/lib/rules/prefer-named-capture-group.js -node_modules/eslint/lib/rules/prefer-numeric-literals.js -node_modules/eslint/lib/rules/prefer-object-spread.js -node_modules/eslint/lib/rules/prefer-promise-reject-errors.js -node_modules/eslint/lib/rules/prefer-reflect.js -node_modules/eslint/lib/rules/prefer-regex-literals.js -node_modules/eslint/lib/rules/prefer-rest-params.js -node_modules/eslint/lib/rules/prefer-spread.js -node_modules/eslint/lib/rules/prefer-template.js -node_modules/eslint/lib/rules/quote-props.js -node_modules/eslint/lib/rules/quotes.js -node_modules/eslint/lib/rules/radix.js -node_modules/eslint/lib/rules/require-atomic-updates.js -node_modules/eslint/lib/rules/require-await.js -node_modules/eslint/lib/rules/require-jsdoc.js -node_modules/eslint/lib/rules/require-unicode-regexp.js -node_modules/eslint/lib/rules/require-yield.js -node_modules/eslint/lib/rules/rest-spread-spacing.js -node_modules/eslint/lib/rules/semi-spacing.js -node_modules/eslint/lib/rules/semi-style.js -node_modules/eslint/lib/rules/semi.js -node_modules/eslint/lib/rules/sort-imports.js -node_modules/eslint/lib/rules/sort-keys.js -node_modules/eslint/lib/rules/sort-vars.js -node_modules/eslint/lib/rules/space-before-blocks.js -node_modules/eslint/lib/rules/space-before-function-paren.js -node_modules/eslint/lib/rules/space-in-parens.js -node_modules/eslint/lib/rules/space-infix-ops.js -node_modules/eslint/lib/rules/space-unary-ops.js -node_modules/eslint/lib/rules/spaced-comment.js -node_modules/eslint/lib/rules/strict.js -node_modules/eslint/lib/rules/switch-colon-spacing.js -node_modules/eslint/lib/rules/symbol-description.js -node_modules/eslint/lib/rules/template-curly-spacing.js -node_modules/eslint/lib/rules/template-tag-spacing.js -node_modules/eslint/lib/rules/unicode-bom.js -node_modules/eslint/lib/rules/use-isnan.js -node_modules/eslint/lib/rules/valid-jsdoc.js -node_modules/eslint/lib/rules/valid-typeof.js -node_modules/eslint/lib/rules/vars-on-top.js -node_modules/eslint/lib/rules/wrap-iife.js -node_modules/eslint/lib/rules/wrap-regex.js -node_modules/eslint/lib/rules/yield-star-spacing.js -node_modules/eslint/lib/rules/yoda.js -node_modules/eslint/lib/rules/utils/ast-utils.js -node_modules/eslint/lib/rules/utils/fix-tracker.js -node_modules/eslint/lib/rules/utils/keywords.js -node_modules/eslint/lib/rules/utils/lazy-loading-rule-map.js -node_modules/eslint/lib/rules/utils/patterns/letters.js -node_modules/eslint/lib/rules/utils/unicode/index.js -node_modules/eslint/lib/rules/utils/unicode/is-combining-character.js -node_modules/eslint/lib/rules/utils/unicode/is-emoji-modifier.js -node_modules/eslint/lib/rules/utils/unicode/is-regional-indicator-symbol.js -node_modules/eslint/lib/rules/utils/unicode/is-surrogate-pair.js -node_modules/eslint/lib/shared/ajv.js -node_modules/eslint/lib/shared/ast-utils.js -node_modules/eslint/lib/shared/config-validator.js -node_modules/eslint/lib/shared/deprecation-warnings.js -node_modules/eslint/lib/shared/logging.js -node_modules/eslint/lib/shared/relative-module-resolver.js -node_modules/eslint/lib/shared/runtime-info.js -node_modules/eslint/lib/shared/traverser.js -node_modules/eslint/lib/shared/types.js -node_modules/eslint/lib/source-code/index.js -node_modules/eslint/lib/source-code/source-code.js -node_modules/eslint/lib/source-code/token-store/backward-token-comment-cursor.js -node_modules/eslint/lib/source-code/token-store/backward-token-cursor.js -node_modules/eslint/lib/source-code/token-store/cursor.js -node_modules/eslint/lib/source-code/token-store/cursors.js -node_modules/eslint/lib/source-code/token-store/decorative-cursor.js -node_modules/eslint/lib/source-code/token-store/filter-cursor.js -node_modules/eslint/lib/source-code/token-store/forward-token-comment-cursor.js -node_modules/eslint/lib/source-code/token-store/forward-token-cursor.js -node_modules/eslint/lib/source-code/token-store/index.js -node_modules/eslint/lib/source-code/token-store/limit-cursor.js -node_modules/eslint/lib/source-code/token-store/padded-token-cursor.js -node_modules/eslint/lib/source-code/token-store/skip-cursor.js -node_modules/eslint/lib/source-code/token-store/utils.js -node_modules/eslint/messages/all-files-ignored.txt -node_modules/eslint/messages/extend-config-missing.txt -node_modules/eslint/messages/failed-to-read-json.txt -node_modules/eslint/messages/file-not-found.txt -node_modules/eslint/messages/no-config-found.txt -node_modules/eslint/messages/plugin-conflict.txt -node_modules/eslint/messages/plugin-invalid.txt -node_modules/eslint/messages/plugin-missing.txt -node_modules/eslint/messages/print-config-with-directory-path.txt -node_modules/eslint/messages/whitespace-found.txt -node_modules/eslint-config-google/index.js -node_modules/eslint-config-google/LICENSE -node_modules/eslint-config-google/package.json -node_modules/eslint-config-google/README.md -node_modules/eslint-scope/CHANGELOG.md -node_modules/eslint-scope/LICENSE -node_modules/eslint-scope/package.json -node_modules/eslint-scope/README.md -node_modules/eslint-scope/lib/definition.js -node_modules/eslint-scope/lib/index.js -node_modules/eslint-scope/lib/pattern-visitor.js -node_modules/eslint-scope/lib/reference.js -node_modules/eslint-scope/lib/referencer.js -node_modules/eslint-scope/lib/scope-manager.js -node_modules/eslint-scope/lib/scope.js -node_modules/eslint-scope/lib/variable.js -node_modules/eslint-utils/index.js -node_modules/eslint-utils/index.js.map -node_modules/eslint-utils/index.mjs -node_modules/eslint-utils/index.mjs.map -node_modules/eslint-utils/LICENSE -node_modules/eslint-utils/package.json -node_modules/eslint-utils/README.md -node_modules/eslint-utils/node_modules/eslint-visitor-keys/CHANGELOG.md -node_modules/eslint-utils/node_modules/eslint-visitor-keys/LICENSE -node_modules/eslint-utils/node_modules/eslint-visitor-keys/package.json -node_modules/eslint-utils/node_modules/eslint-visitor-keys/README.md -node_modules/eslint-utils/node_modules/eslint-visitor-keys/lib/index.js -node_modules/eslint-utils/node_modules/eslint-visitor-keys/lib/visitor-keys.json -node_modules/eslint-visitor-keys/CHANGELOG.md -node_modules/eslint-visitor-keys/LICENSE -node_modules/eslint-visitor-keys/package.json -node_modules/eslint-visitor-keys/README.md -node_modules/eslint-visitor-keys/lib/index.js -node_modules/eslint-visitor-keys/lib/visitor-keys.json -node_modules/espree/CHANGELOG.md -node_modules/espree/espree.js -node_modules/espree/LICENSE -node_modules/espree/package.json -node_modules/espree/README.md -node_modules/espree/lib/ast-node-types.js -node_modules/espree/lib/espree.js -node_modules/espree/lib/features.js -node_modules/espree/lib/options.js -node_modules/espree/lib/token-translator.js -node_modules/espree/lib/visitor-keys.js -node_modules/espree/node_modules/eslint-visitor-keys/CHANGELOG.md -node_modules/espree/node_modules/eslint-visitor-keys/LICENSE -node_modules/espree/node_modules/eslint-visitor-keys/package.json -node_modules/espree/node_modules/eslint-visitor-keys/README.md -node_modules/espree/node_modules/eslint-visitor-keys/lib/index.js -node_modules/espree/node_modules/eslint-visitor-keys/lib/visitor-keys.json -node_modules/esprima/ChangeLog -node_modules/esprima/LICENSE.BSD -node_modules/esprima/package.json -node_modules/esprima/README.md -node_modules/esprima/bin/esparse.js -node_modules/esprima/bin/esvalidate.js -node_modules/esprima/dist/esprima.js -node_modules/esquery/license.txt -node_modules/esquery/package.json -node_modules/esquery/parser.js -node_modules/esquery/README.md -node_modules/esquery/dist/esquery.esm.js -node_modules/esquery/dist/esquery.esm.min.js -node_modules/esquery/dist/esquery.esm.min.js.map -node_modules/esquery/dist/esquery.js -node_modules/esquery/dist/esquery.min.js -node_modules/esquery/dist/esquery.min.js.map -node_modules/esquery/node_modules/estraverse/.jshintrc -node_modules/esquery/node_modules/estraverse/estraverse.js -node_modules/esquery/node_modules/estraverse/gulpfile.js -node_modules/esquery/node_modules/estraverse/LICENSE.BSD -node_modules/esquery/node_modules/estraverse/package.json -node_modules/esquery/node_modules/estraverse/README.md -node_modules/esrecurse/.babelrc -node_modules/esrecurse/esrecurse.js -node_modules/esrecurse/gulpfile.babel.js -node_modules/esrecurse/package.json -node_modules/esrecurse/README.md -node_modules/esrecurse/node_modules/estraverse/.jshintrc -node_modules/esrecurse/node_modules/estraverse/estraverse.js -node_modules/esrecurse/node_modules/estraverse/gulpfile.js -node_modules/esrecurse/node_modules/estraverse/LICENSE.BSD -node_modules/esrecurse/node_modules/estraverse/package.json -node_modules/esrecurse/node_modules/estraverse/README.md -node_modules/estraverse/.jshintrc -node_modules/estraverse/estraverse.js -node_modules/estraverse/gulpfile.js -node_modules/estraverse/LICENSE.BSD -node_modules/estraverse/package.json -node_modules/estraverse/README.md -node_modules/esutils/LICENSE.BSD -node_modules/esutils/package.json -node_modules/esutils/README.md -node_modules/esutils/lib/ast.js -node_modules/esutils/lib/code.js -node_modules/esutils/lib/keyword.js -node_modules/esutils/lib/utils.js -node_modules/fast-deep-equal/index.d.ts -node_modules/fast-deep-equal/index.js -node_modules/fast-deep-equal/LICENSE -node_modules/fast-deep-equal/package.json -node_modules/fast-deep-equal/react.d.ts -node_modules/fast-deep-equal/react.js -node_modules/fast-deep-equal/README.md -node_modules/fast-deep-equal/es6/index.d.ts -node_modules/fast-deep-equal/es6/index.js -node_modules/fast-deep-equal/es6/react.d.ts -node_modules/fast-deep-equal/es6/react.js -node_modules/fast-json-stable-stringify/.eslintrc.yml -node_modules/fast-json-stable-stringify/.travis.yml -node_modules/fast-json-stable-stringify/index.d.ts -node_modules/fast-json-stable-stringify/index.js -node_modules/fast-json-stable-stringify/LICENSE -node_modules/fast-json-stable-stringify/package.json -node_modules/fast-json-stable-stringify/README.md -node_modules/fast-json-stable-stringify/.github/FUNDING.yml -node_modules/fast-json-stable-stringify/benchmark/index.js -node_modules/fast-json-stable-stringify/benchmark/test.json -node_modules/fast-json-stable-stringify/example/key_cmp.js -node_modules/fast-json-stable-stringify/example/nested.js -node_modules/fast-json-stable-stringify/example/str.js -node_modules/fast-json-stable-stringify/example/value_cmp.js -node_modules/fast-json-stable-stringify/test/cmp.js -node_modules/fast-json-stable-stringify/test/nested.js -node_modules/fast-json-stable-stringify/test/str.js -node_modules/fast-json-stable-stringify/test/to-json.js -node_modules/fast-levenshtein/levenshtein.js -node_modules/fast-levenshtein/LICENSE.md -node_modules/fast-levenshtein/package.json -node_modules/fast-levenshtein/README.md -node_modules/file-entry-cache/cache.js -node_modules/file-entry-cache/changelog.md -node_modules/file-entry-cache/LICENSE -node_modules/file-entry-cache/package.json -node_modules/file-entry-cache/README.md -node_modules/flat-cache/cache.js -node_modules/flat-cache/changelog.md -node_modules/flat-cache/del.js -node_modules/flat-cache/LICENSE -node_modules/flat-cache/package.json -node_modules/flat-cache/README.md -node_modules/flat-cache/utils.js -node_modules/flatted/index.js -node_modules/flatted/LICENSE -node_modules/flatted/min.js -node_modules/flatted/package.json -node_modules/flatted/README.md -node_modules/flatted/SPECS.md -node_modules/flatted/types.d.ts -node_modules/flatted/.github/FUNDING.yml -node_modules/flatted/cjs/index.js -node_modules/flatted/esm/index.js -node_modules/fs.realpath/index.js -node_modules/fs.realpath/LICENSE -node_modules/fs.realpath/old.js -node_modules/fs.realpath/package.json -node_modules/fs.realpath/README.md -node_modules/functional-red-black-tree/.npmignore -node_modules/functional-red-black-tree/LICENSE -node_modules/functional-red-black-tree/package.json -node_modules/functional-red-black-tree/rbtree.js -node_modules/functional-red-black-tree/README.md -node_modules/functional-red-black-tree/bench/test.js -node_modules/functional-red-black-tree/test/test.js -node_modules/glob/changelog.md -node_modules/glob/common.js -node_modules/glob/glob.js -node_modules/glob/LICENSE -node_modules/glob/package.json -node_modules/glob/README.md -node_modules/glob/sync.js -node_modules/glob-parent/index.js -node_modules/glob-parent/LICENSE -node_modules/glob-parent/package.json -node_modules/glob-parent/README.md -node_modules/globals/globals.json -node_modules/globals/index.d.ts -node_modules/globals/index.js -node_modules/globals/license -node_modules/globals/package.json -node_modules/globals/readme.md -node_modules/has-flag/index.js -node_modules/has-flag/license -node_modules/has-flag/package.json -node_modules/has-flag/readme.md -node_modules/ignore/CHANGELOG.md -node_modules/ignore/index.d.ts -node_modules/ignore/index.js -node_modules/ignore/legacy.js -node_modules/ignore/LICENSE-MIT -node_modules/ignore/package.json -node_modules/ignore/README.md -node_modules/import-fresh/index.d.ts -node_modules/import-fresh/index.js -node_modules/import-fresh/license -node_modules/import-fresh/package.json -node_modules/import-fresh/readme.md -node_modules/imurmurhash/imurmurhash.js -node_modules/imurmurhash/imurmurhash.min.js -node_modules/imurmurhash/package.json -node_modules/imurmurhash/README.md -node_modules/inflight/inflight.js -node_modules/inflight/LICENSE -node_modules/inflight/package.json -node_modules/inflight/README.md -node_modules/inherits/inherits_browser.js -node_modules/inherits/inherits.js -node_modules/inherits/LICENSE -node_modules/inherits/package.json -node_modules/inherits/README.md -node_modules/is-extglob/index.js -node_modules/is-extglob/LICENSE -node_modules/is-extglob/package.json -node_modules/is-extglob/README.md -node_modules/is-fullwidth-code-point/index.js -node_modules/is-fullwidth-code-point/license -node_modules/is-fullwidth-code-point/package.json -node_modules/is-fullwidth-code-point/readme.md -node_modules/is-glob/index.js -node_modules/is-glob/LICENSE -node_modules/is-glob/package.json -node_modules/is-glob/README.md -node_modules/isexe/.npmignore -node_modules/isexe/index.js -node_modules/isexe/LICENSE -node_modules/isexe/mode.js -node_modules/isexe/package.json -node_modules/isexe/README.md -node_modules/isexe/windows.js -node_modules/isexe/test/basic.js -node_modules/js-tokens/CHANGELOG.md -node_modules/js-tokens/index.js -node_modules/js-tokens/LICENSE -node_modules/js-tokens/package.json -node_modules/js-tokens/README.md -node_modules/js-yaml/CHANGELOG.md -node_modules/js-yaml/index.js -node_modules/js-yaml/LICENSE -node_modules/js-yaml/package.json -node_modules/js-yaml/README.md -node_modules/js-yaml/bin/js-yaml.js -node_modules/js-yaml/dist/js-yaml.js -node_modules/js-yaml/dist/js-yaml.min.js -node_modules/js-yaml/lib/js-yaml.js -node_modules/js-yaml/lib/js-yaml/common.js -node_modules/js-yaml/lib/js-yaml/dumper.js -node_modules/js-yaml/lib/js-yaml/exception.js -node_modules/js-yaml/lib/js-yaml/loader.js -node_modules/js-yaml/lib/js-yaml/mark.js -node_modules/js-yaml/lib/js-yaml/schema.js -node_modules/js-yaml/lib/js-yaml/type.js -node_modules/js-yaml/lib/js-yaml/schema/core.js -node_modules/js-yaml/lib/js-yaml/schema/default_full.js -node_modules/js-yaml/lib/js-yaml/schema/default_safe.js -node_modules/js-yaml/lib/js-yaml/schema/failsafe.js -node_modules/js-yaml/lib/js-yaml/schema/json.js -node_modules/js-yaml/lib/js-yaml/type/binary.js -node_modules/js-yaml/lib/js-yaml/type/bool.js -node_modules/js-yaml/lib/js-yaml/type/float.js -node_modules/js-yaml/lib/js-yaml/type/int.js -node_modules/js-yaml/lib/js-yaml/type/map.js -node_modules/js-yaml/lib/js-yaml/type/merge.js -node_modules/js-yaml/lib/js-yaml/type/null.js -node_modules/js-yaml/lib/js-yaml/type/omap.js -node_modules/js-yaml/lib/js-yaml/type/pairs.js -node_modules/js-yaml/lib/js-yaml/type/seq.js -node_modules/js-yaml/lib/js-yaml/type/set.js -node_modules/js-yaml/lib/js-yaml/type/str.js -node_modules/js-yaml/lib/js-yaml/type/timestamp.js -node_modules/js-yaml/lib/js-yaml/type/js/function.js -node_modules/js-yaml/lib/js-yaml/type/js/regexp.js -node_modules/js-yaml/lib/js-yaml/type/js/undefined.js -node_modules/json-schema-traverse/.eslintrc.yml -node_modules/json-schema-traverse/.travis.yml -node_modules/json-schema-traverse/index.js -node_modules/json-schema-traverse/LICENSE -node_modules/json-schema-traverse/package.json -node_modules/json-schema-traverse/README.md -node_modules/json-schema-traverse/spec/.eslintrc.yml -node_modules/json-schema-traverse/spec/index.spec.js -node_modules/json-schema-traverse/spec/fixtures/schema.js -node_modules/json-stable-stringify-without-jsonify/.npmignore -node_modules/json-stable-stringify-without-jsonify/.travis.yml -node_modules/json-stable-stringify-without-jsonify/index.js -node_modules/json-stable-stringify-without-jsonify/LICENSE -node_modules/json-stable-stringify-without-jsonify/package.json -node_modules/json-stable-stringify-without-jsonify/readme.markdown -node_modules/json-stable-stringify-without-jsonify/example/key_cmp.js -node_modules/json-stable-stringify-without-jsonify/example/nested.js -node_modules/json-stable-stringify-without-jsonify/example/str.js -node_modules/json-stable-stringify-without-jsonify/example/value_cmp.js -node_modules/json-stable-stringify-without-jsonify/test/cmp.js -node_modules/json-stable-stringify-without-jsonify/test/nested.js -node_modules/json-stable-stringify-without-jsonify/test/replacer.js -node_modules/json-stable-stringify-without-jsonify/test/space.js -node_modules/json-stable-stringify-without-jsonify/test/str.js -node_modules/json-stable-stringify-without-jsonify/test/to-json.js -node_modules/levn/LICENSE -node_modules/levn/package.json -node_modules/levn/README.md -node_modules/levn/lib/cast.js -node_modules/levn/lib/index.js -node_modules/levn/lib/parse-string.js -node_modules/lodash/_apply.js -node_modules/lodash/_arrayAggregator.js -node_modules/lodash/_arrayEach.js -node_modules/lodash/_arrayEachRight.js -node_modules/lodash/_arrayEvery.js -node_modules/lodash/_arrayFilter.js -node_modules/lodash/_arrayIncludes.js -node_modules/lodash/_arrayIncludesWith.js -node_modules/lodash/_arrayLikeKeys.js -node_modules/lodash/_arrayMap.js -node_modules/lodash/_arrayPush.js -node_modules/lodash/_arrayReduce.js -node_modules/lodash/_arrayReduceRight.js -node_modules/lodash/_arraySample.js -node_modules/lodash/_arraySampleSize.js -node_modules/lodash/_arrayShuffle.js -node_modules/lodash/_arraySome.js -node_modules/lodash/_asciiSize.js -node_modules/lodash/_asciiToArray.js -node_modules/lodash/_asciiWords.js -node_modules/lodash/_assignMergeValue.js -node_modules/lodash/_assignValue.js -node_modules/lodash/_assocIndexOf.js -node_modules/lodash/_baseAggregator.js -node_modules/lodash/_baseAssign.js -node_modules/lodash/_baseAssignIn.js -node_modules/lodash/_baseAssignValue.js -node_modules/lodash/_baseAt.js -node_modules/lodash/_baseClamp.js -node_modules/lodash/_baseClone.js -node_modules/lodash/_baseConforms.js -node_modules/lodash/_baseConformsTo.js -node_modules/lodash/_baseCreate.js -node_modules/lodash/_baseDelay.js -node_modules/lodash/_baseDifference.js -node_modules/lodash/_baseEach.js -node_modules/lodash/_baseEachRight.js -node_modules/lodash/_baseEvery.js -node_modules/lodash/_baseExtremum.js -node_modules/lodash/_baseFill.js -node_modules/lodash/_baseFilter.js -node_modules/lodash/_baseFindIndex.js -node_modules/lodash/_baseFindKey.js -node_modules/lodash/_baseFlatten.js -node_modules/lodash/_baseFor.js -node_modules/lodash/_baseForOwn.js -node_modules/lodash/_baseForOwnRight.js -node_modules/lodash/_baseForRight.js -node_modules/lodash/_baseFunctions.js -node_modules/lodash/_baseGet.js -node_modules/lodash/_baseGetAllKeys.js -node_modules/lodash/_baseGetTag.js -node_modules/lodash/_baseGt.js -node_modules/lodash/_baseHas.js -node_modules/lodash/_baseHasIn.js -node_modules/lodash/_baseIndexOf.js -node_modules/lodash/_baseIndexOfWith.js -node_modules/lodash/_baseInRange.js -node_modules/lodash/_baseIntersection.js -node_modules/lodash/_baseInverter.js -node_modules/lodash/_baseInvoke.js -node_modules/lodash/_baseIsArguments.js -node_modules/lodash/_baseIsArrayBuffer.js -node_modules/lodash/_baseIsDate.js -node_modules/lodash/_baseIsEqual.js -node_modules/lodash/_baseIsEqualDeep.js -node_modules/lodash/_baseIsMap.js -node_modules/lodash/_baseIsMatch.js -node_modules/lodash/_baseIsNaN.js -node_modules/lodash/_baseIsNative.js -node_modules/lodash/_baseIsRegExp.js -node_modules/lodash/_baseIsSet.js -node_modules/lodash/_baseIsTypedArray.js -node_modules/lodash/_baseIteratee.js -node_modules/lodash/_baseKeys.js -node_modules/lodash/_baseKeysIn.js -node_modules/lodash/_baseLodash.js -node_modules/lodash/_baseLt.js -node_modules/lodash/_baseMap.js -node_modules/lodash/_baseMatches.js -node_modules/lodash/_baseMatchesProperty.js -node_modules/lodash/_baseMean.js -node_modules/lodash/_baseMerge.js -node_modules/lodash/_baseMergeDeep.js -node_modules/lodash/_baseNth.js -node_modules/lodash/_baseOrderBy.js -node_modules/lodash/_basePick.js -node_modules/lodash/_basePickBy.js -node_modules/lodash/_baseProperty.js -node_modules/lodash/_basePropertyDeep.js -node_modules/lodash/_basePropertyOf.js -node_modules/lodash/_basePullAll.js -node_modules/lodash/_basePullAt.js -node_modules/lodash/_baseRandom.js -node_modules/lodash/_baseRange.js -node_modules/lodash/_baseReduce.js -node_modules/lodash/_baseRepeat.js -node_modules/lodash/_baseRest.js -node_modules/lodash/_baseSample.js -node_modules/lodash/_baseSampleSize.js -node_modules/lodash/_baseSet.js -node_modules/lodash/_baseSetData.js -node_modules/lodash/_baseSetToString.js -node_modules/lodash/_baseShuffle.js -node_modules/lodash/_baseSlice.js -node_modules/lodash/_baseSome.js -node_modules/lodash/_baseSortBy.js -node_modules/lodash/_baseSortedIndex.js -node_modules/lodash/_baseSortedIndexBy.js -node_modules/lodash/_baseSortedUniq.js -node_modules/lodash/_baseSum.js -node_modules/lodash/_baseTimes.js -node_modules/lodash/_baseToNumber.js -node_modules/lodash/_baseToPairs.js -node_modules/lodash/_baseToString.js -node_modules/lodash/_baseUnary.js -node_modules/lodash/_baseUniq.js -node_modules/lodash/_baseUnset.js -node_modules/lodash/_baseUpdate.js -node_modules/lodash/_baseValues.js -node_modules/lodash/_baseWhile.js -node_modules/lodash/_baseWrapperValue.js -node_modules/lodash/_baseXor.js -node_modules/lodash/_baseZipObject.js -node_modules/lodash/_cacheHas.js -node_modules/lodash/_castArrayLikeObject.js -node_modules/lodash/_castFunction.js -node_modules/lodash/_castPath.js -node_modules/lodash/_castRest.js -node_modules/lodash/_castSlice.js -node_modules/lodash/_charsEndIndex.js -node_modules/lodash/_charsStartIndex.js -node_modules/lodash/_cloneArrayBuffer.js -node_modules/lodash/_cloneBuffer.js -node_modules/lodash/_cloneDataView.js -node_modules/lodash/_cloneRegExp.js -node_modules/lodash/_cloneSymbol.js -node_modules/lodash/_cloneTypedArray.js -node_modules/lodash/_compareAscending.js -node_modules/lodash/_compareMultiple.js -node_modules/lodash/_composeArgs.js -node_modules/lodash/_composeArgsRight.js -node_modules/lodash/_copyArray.js -node_modules/lodash/_copyObject.js -node_modules/lodash/_copySymbols.js -node_modules/lodash/_copySymbolsIn.js -node_modules/lodash/_coreJsData.js -node_modules/lodash/_countHolders.js -node_modules/lodash/_createAggregator.js -node_modules/lodash/_createAssigner.js -node_modules/lodash/_createBaseEach.js -node_modules/lodash/_createBaseFor.js -node_modules/lodash/_createBind.js -node_modules/lodash/_createCaseFirst.js -node_modules/lodash/_createCompounder.js -node_modules/lodash/_createCtor.js -node_modules/lodash/_createCurry.js -node_modules/lodash/_createFind.js -node_modules/lodash/_createFlow.js -node_modules/lodash/_createHybrid.js -node_modules/lodash/_createInverter.js -node_modules/lodash/_createMathOperation.js -node_modules/lodash/_createOver.js -node_modules/lodash/_createPadding.js -node_modules/lodash/_createPartial.js -node_modules/lodash/_createRange.js -node_modules/lodash/_createRecurry.js -node_modules/lodash/_createRelationalOperation.js -node_modules/lodash/_createRound.js -node_modules/lodash/_createSet.js -node_modules/lodash/_createToPairs.js -node_modules/lodash/_createWrap.js -node_modules/lodash/_customDefaultsAssignIn.js -node_modules/lodash/_customDefaultsMerge.js -node_modules/lodash/_customOmitClone.js -node_modules/lodash/_DataView.js -node_modules/lodash/_deburrLetter.js -node_modules/lodash/_defineProperty.js -node_modules/lodash/_equalArrays.js -node_modules/lodash/_equalByTag.js -node_modules/lodash/_equalObjects.js -node_modules/lodash/_escapeHtmlChar.js -node_modules/lodash/_escapeStringChar.js -node_modules/lodash/_flatRest.js -node_modules/lodash/_freeGlobal.js -node_modules/lodash/_getAllKeys.js -node_modules/lodash/_getAllKeysIn.js -node_modules/lodash/_getData.js -node_modules/lodash/_getFuncName.js -node_modules/lodash/_getHolder.js -node_modules/lodash/_getMapData.js -node_modules/lodash/_getMatchData.js -node_modules/lodash/_getNative.js -node_modules/lodash/_getPrototype.js -node_modules/lodash/_getRawTag.js -node_modules/lodash/_getSymbols.js -node_modules/lodash/_getSymbolsIn.js -node_modules/lodash/_getTag.js -node_modules/lodash/_getValue.js -node_modules/lodash/_getView.js -node_modules/lodash/_getWrapDetails.js -node_modules/lodash/_Hash.js -node_modules/lodash/_hashClear.js -node_modules/lodash/_hashDelete.js -node_modules/lodash/_hashGet.js -node_modules/lodash/_hashHas.js -node_modules/lodash/_hashSet.js -node_modules/lodash/_hasPath.js -node_modules/lodash/_hasUnicode.js -node_modules/lodash/_hasUnicodeWord.js -node_modules/lodash/_initCloneArray.js -node_modules/lodash/_initCloneByTag.js -node_modules/lodash/_initCloneObject.js -node_modules/lodash/_insertWrapDetails.js -node_modules/lodash/_isFlattenable.js -node_modules/lodash/_isIndex.js -node_modules/lodash/_isIterateeCall.js -node_modules/lodash/_isKey.js -node_modules/lodash/_isKeyable.js -node_modules/lodash/_isLaziable.js -node_modules/lodash/_isMaskable.js -node_modules/lodash/_isMasked.js -node_modules/lodash/_isPrototype.js -node_modules/lodash/_isStrictComparable.js -node_modules/lodash/_iteratorToArray.js -node_modules/lodash/_lazyClone.js -node_modules/lodash/_lazyReverse.js -node_modules/lodash/_lazyValue.js -node_modules/lodash/_LazyWrapper.js -node_modules/lodash/_ListCache.js -node_modules/lodash/_listCacheClear.js -node_modules/lodash/_listCacheDelete.js -node_modules/lodash/_listCacheGet.js -node_modules/lodash/_listCacheHas.js -node_modules/lodash/_listCacheSet.js -node_modules/lodash/_LodashWrapper.js -node_modules/lodash/_Map.js -node_modules/lodash/_MapCache.js -node_modules/lodash/_mapCacheClear.js -node_modules/lodash/_mapCacheDelete.js -node_modules/lodash/_mapCacheGet.js -node_modules/lodash/_mapCacheHas.js -node_modules/lodash/_mapCacheSet.js -node_modules/lodash/_mapToArray.js -node_modules/lodash/_matchesStrictComparable.js -node_modules/lodash/_memoizeCapped.js -node_modules/lodash/_mergeData.js -node_modules/lodash/_metaMap.js -node_modules/lodash/_nativeCreate.js -node_modules/lodash/_nativeKeys.js -node_modules/lodash/_nativeKeysIn.js -node_modules/lodash/_nodeUtil.js -node_modules/lodash/_objectToString.js -node_modules/lodash/_overArg.js -node_modules/lodash/_overRest.js -node_modules/lodash/_parent.js -node_modules/lodash/_Promise.js -node_modules/lodash/_realNames.js -node_modules/lodash/_reEscape.js -node_modules/lodash/_reEvaluate.js -node_modules/lodash/_reInterpolate.js -node_modules/lodash/_reorder.js -node_modules/lodash/_replaceHolders.js -node_modules/lodash/_root.js -node_modules/lodash/_safeGet.js -node_modules/lodash/_Set.js -node_modules/lodash/_SetCache.js -node_modules/lodash/_setCacheAdd.js -node_modules/lodash/_setCacheHas.js -node_modules/lodash/_setData.js -node_modules/lodash/_setToArray.js -node_modules/lodash/_setToPairs.js -node_modules/lodash/_setToString.js -node_modules/lodash/_setWrapToString.js -node_modules/lodash/_shortOut.js -node_modules/lodash/_shuffleSelf.js -node_modules/lodash/_Stack.js -node_modules/lodash/_stackClear.js -node_modules/lodash/_stackDelete.js -node_modules/lodash/_stackGet.js -node_modules/lodash/_stackHas.js -node_modules/lodash/_stackSet.js -node_modules/lodash/_strictIndexOf.js -node_modules/lodash/_strictLastIndexOf.js -node_modules/lodash/_stringSize.js -node_modules/lodash/_stringToArray.js -node_modules/lodash/_stringToPath.js -node_modules/lodash/_Symbol.js -node_modules/lodash/_toKey.js -node_modules/lodash/_toSource.js -node_modules/lodash/_Uint8Array.js -node_modules/lodash/_unescapeHtmlChar.js -node_modules/lodash/_unicodeSize.js -node_modules/lodash/_unicodeToArray.js -node_modules/lodash/_unicodeWords.js -node_modules/lodash/_updateWrapDetails.js -node_modules/lodash/_WeakMap.js -node_modules/lodash/_wrapperClone.js -node_modules/lodash/add.js -node_modules/lodash/after.js -node_modules/lodash/array.js -node_modules/lodash/ary.js -node_modules/lodash/assign.js -node_modules/lodash/assignIn.js -node_modules/lodash/assignInWith.js -node_modules/lodash/assignWith.js -node_modules/lodash/at.js -node_modules/lodash/attempt.js -node_modules/lodash/before.js -node_modules/lodash/bind.js -node_modules/lodash/bindAll.js -node_modules/lodash/bindKey.js -node_modules/lodash/camelCase.js -node_modules/lodash/capitalize.js -node_modules/lodash/castArray.js -node_modules/lodash/ceil.js -node_modules/lodash/chain.js -node_modules/lodash/chunk.js -node_modules/lodash/clamp.js -node_modules/lodash/clone.js -node_modules/lodash/cloneDeep.js -node_modules/lodash/cloneDeepWith.js -node_modules/lodash/cloneWith.js -node_modules/lodash/collection.js -node_modules/lodash/commit.js -node_modules/lodash/compact.js -node_modules/lodash/concat.js -node_modules/lodash/cond.js -node_modules/lodash/conforms.js -node_modules/lodash/conformsTo.js -node_modules/lodash/constant.js -node_modules/lodash/core.js -node_modules/lodash/core.min.js -node_modules/lodash/countBy.js -node_modules/lodash/create.js -node_modules/lodash/curry.js -node_modules/lodash/curryRight.js -node_modules/lodash/date.js -node_modules/lodash/debounce.js -node_modules/lodash/deburr.js -node_modules/lodash/defaults.js -node_modules/lodash/defaultsDeep.js -node_modules/lodash/defaultTo.js -node_modules/lodash/defer.js -node_modules/lodash/delay.js -node_modules/lodash/difference.js -node_modules/lodash/differenceBy.js -node_modules/lodash/differenceWith.js -node_modules/lodash/divide.js -node_modules/lodash/drop.js -node_modules/lodash/dropRight.js -node_modules/lodash/dropRightWhile.js -node_modules/lodash/dropWhile.js -node_modules/lodash/each.js -node_modules/lodash/eachRight.js -node_modules/lodash/endsWith.js -node_modules/lodash/entries.js -node_modules/lodash/entriesIn.js -node_modules/lodash/eq.js -node_modules/lodash/escape.js -node_modules/lodash/escapeRegExp.js -node_modules/lodash/every.js -node_modules/lodash/extend.js -node_modules/lodash/extendWith.js -node_modules/lodash/fill.js -node_modules/lodash/filter.js -node_modules/lodash/find.js -node_modules/lodash/findIndex.js -node_modules/lodash/findKey.js -node_modules/lodash/findLast.js -node_modules/lodash/findLastIndex.js -node_modules/lodash/findLastKey.js -node_modules/lodash/first.js -node_modules/lodash/flatMap.js -node_modules/lodash/flatMapDeep.js -node_modules/lodash/flatMapDepth.js -node_modules/lodash/flatten.js -node_modules/lodash/flattenDeep.js -node_modules/lodash/flattenDepth.js -node_modules/lodash/flip.js -node_modules/lodash/floor.js -node_modules/lodash/flow.js -node_modules/lodash/flowRight.js -node_modules/lodash/forEach.js -node_modules/lodash/forEachRight.js -node_modules/lodash/forIn.js -node_modules/lodash/forInRight.js -node_modules/lodash/forOwn.js -node_modules/lodash/forOwnRight.js -node_modules/lodash/fp.js -node_modules/lodash/fromPairs.js -node_modules/lodash/function.js -node_modules/lodash/functions.js -node_modules/lodash/functionsIn.js -node_modules/lodash/get.js -node_modules/lodash/groupBy.js -node_modules/lodash/gt.js -node_modules/lodash/gte.js -node_modules/lodash/has.js -node_modules/lodash/hasIn.js -node_modules/lodash/head.js -node_modules/lodash/identity.js -node_modules/lodash/includes.js -node_modules/lodash/index.js -node_modules/lodash/indexOf.js -node_modules/lodash/initial.js -node_modules/lodash/inRange.js -node_modules/lodash/intersection.js -node_modules/lodash/intersectionBy.js -node_modules/lodash/intersectionWith.js -node_modules/lodash/invert.js -node_modules/lodash/invertBy.js -node_modules/lodash/invoke.js -node_modules/lodash/invokeMap.js -node_modules/lodash/isArguments.js -node_modules/lodash/isArray.js -node_modules/lodash/isArrayBuffer.js -node_modules/lodash/isArrayLike.js -node_modules/lodash/isArrayLikeObject.js -node_modules/lodash/isBoolean.js -node_modules/lodash/isBuffer.js -node_modules/lodash/isDate.js -node_modules/lodash/isElement.js -node_modules/lodash/isEmpty.js -node_modules/lodash/isEqual.js -node_modules/lodash/isEqualWith.js -node_modules/lodash/isError.js -node_modules/lodash/isFinite.js -node_modules/lodash/isFunction.js -node_modules/lodash/isInteger.js -node_modules/lodash/isLength.js -node_modules/lodash/isMap.js -node_modules/lodash/isMatch.js -node_modules/lodash/isMatchWith.js -node_modules/lodash/isNaN.js -node_modules/lodash/isNative.js -node_modules/lodash/isNil.js -node_modules/lodash/isNull.js -node_modules/lodash/isNumber.js -node_modules/lodash/isObject.js -node_modules/lodash/isObjectLike.js -node_modules/lodash/isPlainObject.js -node_modules/lodash/isRegExp.js -node_modules/lodash/isSafeInteger.js -node_modules/lodash/isSet.js -node_modules/lodash/isString.js -node_modules/lodash/isSymbol.js -node_modules/lodash/isTypedArray.js -node_modules/lodash/isUndefined.js -node_modules/lodash/isWeakMap.js -node_modules/lodash/isWeakSet.js -node_modules/lodash/iteratee.js -node_modules/lodash/join.js -node_modules/lodash/kebabCase.js -node_modules/lodash/keyBy.js -node_modules/lodash/keys.js -node_modules/lodash/keysIn.js -node_modules/lodash/lang.js -node_modules/lodash/last.js -node_modules/lodash/lastIndexOf.js -node_modules/lodash/LICENSE -node_modules/lodash/lodash.js -node_modules/lodash/lodash.min.js -node_modules/lodash/lowerCase.js -node_modules/lodash/lowerFirst.js -node_modules/lodash/lt.js -node_modules/lodash/lte.js -node_modules/lodash/map.js -node_modules/lodash/mapKeys.js -node_modules/lodash/mapValues.js -node_modules/lodash/matches.js -node_modules/lodash/matchesProperty.js -node_modules/lodash/math.js -node_modules/lodash/max.js -node_modules/lodash/maxBy.js -node_modules/lodash/mean.js -node_modules/lodash/meanBy.js -node_modules/lodash/memoize.js -node_modules/lodash/merge.js -node_modules/lodash/mergeWith.js -node_modules/lodash/method.js -node_modules/lodash/methodOf.js -node_modules/lodash/min.js -node_modules/lodash/minBy.js -node_modules/lodash/mixin.js -node_modules/lodash/multiply.js -node_modules/lodash/negate.js -node_modules/lodash/next.js -node_modules/lodash/noop.js -node_modules/lodash/now.js -node_modules/lodash/nth.js -node_modules/lodash/nthArg.js -node_modules/lodash/number.js -node_modules/lodash/object.js -node_modules/lodash/omit.js -node_modules/lodash/omitBy.js -node_modules/lodash/once.js -node_modules/lodash/orderBy.js -node_modules/lodash/over.js -node_modules/lodash/overArgs.js -node_modules/lodash/overEvery.js -node_modules/lodash/overSome.js -node_modules/lodash/package.json -node_modules/lodash/pad.js -node_modules/lodash/padEnd.js -node_modules/lodash/padStart.js -node_modules/lodash/parseInt.js -node_modules/lodash/partial.js -node_modules/lodash/partialRight.js -node_modules/lodash/partition.js -node_modules/lodash/pick.js -node_modules/lodash/pickBy.js -node_modules/lodash/plant.js -node_modules/lodash/property.js -node_modules/lodash/propertyOf.js -node_modules/lodash/pull.js -node_modules/lodash/pullAll.js -node_modules/lodash/pullAllBy.js -node_modules/lodash/pullAllWith.js -node_modules/lodash/pullAt.js -node_modules/lodash/random.js -node_modules/lodash/range.js -node_modules/lodash/rangeRight.js -node_modules/lodash/README.md -node_modules/lodash/rearg.js -node_modules/lodash/reduce.js -node_modules/lodash/reduceRight.js -node_modules/lodash/reject.js -node_modules/lodash/remove.js -node_modules/lodash/repeat.js -node_modules/lodash/replace.js -node_modules/lodash/rest.js -node_modules/lodash/result.js -node_modules/lodash/reverse.js -node_modules/lodash/round.js -node_modules/lodash/sample.js -node_modules/lodash/sampleSize.js -node_modules/lodash/seq.js -node_modules/lodash/set.js -node_modules/lodash/setWith.js -node_modules/lodash/shuffle.js -node_modules/lodash/size.js -node_modules/lodash/slice.js -node_modules/lodash/snakeCase.js -node_modules/lodash/some.js -node_modules/lodash/sortBy.js -node_modules/lodash/sortedIndex.js -node_modules/lodash/sortedIndexBy.js -node_modules/lodash/sortedIndexOf.js -node_modules/lodash/sortedLastIndex.js -node_modules/lodash/sortedLastIndexBy.js -node_modules/lodash/sortedLastIndexOf.js -node_modules/lodash/sortedUniq.js -node_modules/lodash/sortedUniqBy.js -node_modules/lodash/split.js -node_modules/lodash/spread.js -node_modules/lodash/startCase.js -node_modules/lodash/startsWith.js -node_modules/lodash/string.js -node_modules/lodash/stubArray.js -node_modules/lodash/stubFalse.js -node_modules/lodash/stubObject.js -node_modules/lodash/stubString.js -node_modules/lodash/stubTrue.js -node_modules/lodash/subtract.js -node_modules/lodash/sum.js -node_modules/lodash/sumBy.js -node_modules/lodash/tail.js -node_modules/lodash/take.js -node_modules/lodash/takeRight.js -node_modules/lodash/takeRightWhile.js -node_modules/lodash/takeWhile.js -node_modules/lodash/tap.js -node_modules/lodash/template.js -node_modules/lodash/templateSettings.js -node_modules/lodash/throttle.js -node_modules/lodash/thru.js -node_modules/lodash/times.js -node_modules/lodash/toArray.js -node_modules/lodash/toFinite.js -node_modules/lodash/toInteger.js -node_modules/lodash/toIterator.js -node_modules/lodash/toJSON.js -node_modules/lodash/toLength.js -node_modules/lodash/toLower.js -node_modules/lodash/toNumber.js -node_modules/lodash/toPairs.js -node_modules/lodash/toPairsIn.js -node_modules/lodash/toPath.js -node_modules/lodash/toPlainObject.js -node_modules/lodash/toSafeInteger.js -node_modules/lodash/toString.js -node_modules/lodash/toUpper.js -node_modules/lodash/transform.js -node_modules/lodash/trim.js -node_modules/lodash/trimEnd.js -node_modules/lodash/trimStart.js -node_modules/lodash/truncate.js -node_modules/lodash/unary.js -node_modules/lodash/unescape.js -node_modules/lodash/union.js -node_modules/lodash/unionBy.js -node_modules/lodash/unionWith.js -node_modules/lodash/uniq.js -node_modules/lodash/uniqBy.js -node_modules/lodash/uniqueId.js -node_modules/lodash/uniqWith.js -node_modules/lodash/unset.js -node_modules/lodash/unzip.js -node_modules/lodash/unzipWith.js -node_modules/lodash/update.js -node_modules/lodash/updateWith.js -node_modules/lodash/upperCase.js -node_modules/lodash/upperFirst.js -node_modules/lodash/util.js -node_modules/lodash/value.js -node_modules/lodash/valueOf.js -node_modules/lodash/values.js -node_modules/lodash/valuesIn.js -node_modules/lodash/without.js -node_modules/lodash/words.js -node_modules/lodash/wrap.js -node_modules/lodash/wrapperAt.js -node_modules/lodash/wrapperChain.js -node_modules/lodash/wrapperLodash.js -node_modules/lodash/wrapperReverse.js -node_modules/lodash/wrapperValue.js -node_modules/lodash/xor.js -node_modules/lodash/xorBy.js -node_modules/lodash/xorWith.js -node_modules/lodash/zip.js -node_modules/lodash/zipObject.js -node_modules/lodash/zipObjectDeep.js -node_modules/lodash/zipWith.js -node_modules/lodash/fp/__.js -node_modules/lodash/fp/_baseConvert.js -node_modules/lodash/fp/_convertBrowser.js -node_modules/lodash/fp/_falseOptions.js -node_modules/lodash/fp/_mapping.js -node_modules/lodash/fp/_util.js -node_modules/lodash/fp/add.js -node_modules/lodash/fp/after.js -node_modules/lodash/fp/all.js -node_modules/lodash/fp/allPass.js -node_modules/lodash/fp/always.js -node_modules/lodash/fp/any.js -node_modules/lodash/fp/anyPass.js -node_modules/lodash/fp/apply.js -node_modules/lodash/fp/array.js -node_modules/lodash/fp/ary.js -node_modules/lodash/fp/assign.js -node_modules/lodash/fp/assignAll.js -node_modules/lodash/fp/assignAllWith.js -node_modules/lodash/fp/assignIn.js -node_modules/lodash/fp/assignInAll.js -node_modules/lodash/fp/assignInAllWith.js -node_modules/lodash/fp/assignInWith.js -node_modules/lodash/fp/assignWith.js -node_modules/lodash/fp/assoc.js -node_modules/lodash/fp/assocPath.js -node_modules/lodash/fp/at.js -node_modules/lodash/fp/attempt.js -node_modules/lodash/fp/before.js -node_modules/lodash/fp/bind.js -node_modules/lodash/fp/bindAll.js -node_modules/lodash/fp/bindKey.js -node_modules/lodash/fp/camelCase.js -node_modules/lodash/fp/capitalize.js -node_modules/lodash/fp/castArray.js -node_modules/lodash/fp/ceil.js -node_modules/lodash/fp/chain.js -node_modules/lodash/fp/chunk.js -node_modules/lodash/fp/clamp.js -node_modules/lodash/fp/clone.js -node_modules/lodash/fp/cloneDeep.js -node_modules/lodash/fp/cloneDeepWith.js -node_modules/lodash/fp/cloneWith.js -node_modules/lodash/fp/collection.js -node_modules/lodash/fp/commit.js -node_modules/lodash/fp/compact.js -node_modules/lodash/fp/complement.js -node_modules/lodash/fp/compose.js -node_modules/lodash/fp/concat.js -node_modules/lodash/fp/cond.js -node_modules/lodash/fp/conforms.js -node_modules/lodash/fp/conformsTo.js -node_modules/lodash/fp/constant.js -node_modules/lodash/fp/contains.js -node_modules/lodash/fp/convert.js -node_modules/lodash/fp/countBy.js -node_modules/lodash/fp/create.js -node_modules/lodash/fp/curry.js -node_modules/lodash/fp/curryN.js -node_modules/lodash/fp/curryRight.js -node_modules/lodash/fp/curryRightN.js -node_modules/lodash/fp/date.js -node_modules/lodash/fp/debounce.js -node_modules/lodash/fp/deburr.js -node_modules/lodash/fp/defaults.js -node_modules/lodash/fp/defaultsAll.js -node_modules/lodash/fp/defaultsDeep.js -node_modules/lodash/fp/defaultsDeepAll.js -node_modules/lodash/fp/defaultTo.js -node_modules/lodash/fp/defer.js -node_modules/lodash/fp/delay.js -node_modules/lodash/fp/difference.js -node_modules/lodash/fp/differenceBy.js -node_modules/lodash/fp/differenceWith.js -node_modules/lodash/fp/dissoc.js -node_modules/lodash/fp/dissocPath.js -node_modules/lodash/fp/divide.js -node_modules/lodash/fp/drop.js -node_modules/lodash/fp/dropLast.js -node_modules/lodash/fp/dropLastWhile.js -node_modules/lodash/fp/dropRight.js -node_modules/lodash/fp/dropRightWhile.js -node_modules/lodash/fp/dropWhile.js -node_modules/lodash/fp/each.js -node_modules/lodash/fp/eachRight.js -node_modules/lodash/fp/endsWith.js -node_modules/lodash/fp/entries.js -node_modules/lodash/fp/entriesIn.js -node_modules/lodash/fp/eq.js -node_modules/lodash/fp/equals.js -node_modules/lodash/fp/escape.js -node_modules/lodash/fp/escapeRegExp.js -node_modules/lodash/fp/every.js -node_modules/lodash/fp/extend.js -node_modules/lodash/fp/extendAll.js -node_modules/lodash/fp/extendAllWith.js -node_modules/lodash/fp/extendWith.js -node_modules/lodash/fp/F.js -node_modules/lodash/fp/fill.js -node_modules/lodash/fp/filter.js -node_modules/lodash/fp/find.js -node_modules/lodash/fp/findFrom.js -node_modules/lodash/fp/findIndex.js -node_modules/lodash/fp/findIndexFrom.js -node_modules/lodash/fp/findKey.js -node_modules/lodash/fp/findLast.js -node_modules/lodash/fp/findLastFrom.js -node_modules/lodash/fp/findLastIndex.js -node_modules/lodash/fp/findLastIndexFrom.js -node_modules/lodash/fp/findLastKey.js -node_modules/lodash/fp/first.js -node_modules/lodash/fp/flatMap.js -node_modules/lodash/fp/flatMapDeep.js -node_modules/lodash/fp/flatMapDepth.js -node_modules/lodash/fp/flatten.js -node_modules/lodash/fp/flattenDeep.js -node_modules/lodash/fp/flattenDepth.js -node_modules/lodash/fp/flip.js -node_modules/lodash/fp/floor.js -node_modules/lodash/fp/flow.js -node_modules/lodash/fp/flowRight.js -node_modules/lodash/fp/forEach.js -node_modules/lodash/fp/forEachRight.js -node_modules/lodash/fp/forIn.js -node_modules/lodash/fp/forInRight.js -node_modules/lodash/fp/forOwn.js -node_modules/lodash/fp/forOwnRight.js -node_modules/lodash/fp/fromPairs.js -node_modules/lodash/fp/function.js -node_modules/lodash/fp/functions.js -node_modules/lodash/fp/functionsIn.js -node_modules/lodash/fp/get.js -node_modules/lodash/fp/getOr.js -node_modules/lodash/fp/groupBy.js -node_modules/lodash/fp/gt.js -node_modules/lodash/fp/gte.js -node_modules/lodash/fp/has.js -node_modules/lodash/fp/hasIn.js -node_modules/lodash/fp/head.js -node_modules/lodash/fp/identical.js -node_modules/lodash/fp/identity.js -node_modules/lodash/fp/includes.js -node_modules/lodash/fp/includesFrom.js -node_modules/lodash/fp/indexBy.js -node_modules/lodash/fp/indexOf.js -node_modules/lodash/fp/indexOfFrom.js -node_modules/lodash/fp/init.js -node_modules/lodash/fp/initial.js -node_modules/lodash/fp/inRange.js -node_modules/lodash/fp/intersection.js -node_modules/lodash/fp/intersectionBy.js -node_modules/lodash/fp/intersectionWith.js -node_modules/lodash/fp/invert.js -node_modules/lodash/fp/invertBy.js -node_modules/lodash/fp/invertObj.js -node_modules/lodash/fp/invoke.js -node_modules/lodash/fp/invokeArgs.js -node_modules/lodash/fp/invokeArgsMap.js -node_modules/lodash/fp/invokeMap.js -node_modules/lodash/fp/isArguments.js -node_modules/lodash/fp/isArray.js -node_modules/lodash/fp/isArrayBuffer.js -node_modules/lodash/fp/isArrayLike.js -node_modules/lodash/fp/isArrayLikeObject.js -node_modules/lodash/fp/isBoolean.js -node_modules/lodash/fp/isBuffer.js -node_modules/lodash/fp/isDate.js -node_modules/lodash/fp/isElement.js -node_modules/lodash/fp/isEmpty.js -node_modules/lodash/fp/isEqual.js -node_modules/lodash/fp/isEqualWith.js -node_modules/lodash/fp/isError.js -node_modules/lodash/fp/isFinite.js -node_modules/lodash/fp/isFunction.js -node_modules/lodash/fp/isInteger.js -node_modules/lodash/fp/isLength.js -node_modules/lodash/fp/isMap.js -node_modules/lodash/fp/isMatch.js -node_modules/lodash/fp/isMatchWith.js -node_modules/lodash/fp/isNaN.js -node_modules/lodash/fp/isNative.js -node_modules/lodash/fp/isNil.js -node_modules/lodash/fp/isNull.js -node_modules/lodash/fp/isNumber.js -node_modules/lodash/fp/isObject.js -node_modules/lodash/fp/isObjectLike.js -node_modules/lodash/fp/isPlainObject.js -node_modules/lodash/fp/isRegExp.js -node_modules/lodash/fp/isSafeInteger.js -node_modules/lodash/fp/isSet.js -node_modules/lodash/fp/isString.js -node_modules/lodash/fp/isSymbol.js -node_modules/lodash/fp/isTypedArray.js -node_modules/lodash/fp/isUndefined.js -node_modules/lodash/fp/isWeakMap.js -node_modules/lodash/fp/isWeakSet.js -node_modules/lodash/fp/iteratee.js -node_modules/lodash/fp/join.js -node_modules/lodash/fp/juxt.js -node_modules/lodash/fp/kebabCase.js -node_modules/lodash/fp/keyBy.js -node_modules/lodash/fp/keys.js -node_modules/lodash/fp/keysIn.js -node_modules/lodash/fp/lang.js -node_modules/lodash/fp/last.js -node_modules/lodash/fp/lastIndexOf.js -node_modules/lodash/fp/lastIndexOfFrom.js -node_modules/lodash/fp/lowerCase.js -node_modules/lodash/fp/lowerFirst.js -node_modules/lodash/fp/lt.js -node_modules/lodash/fp/lte.js -node_modules/lodash/fp/map.js -node_modules/lodash/fp/mapKeys.js -node_modules/lodash/fp/mapValues.js -node_modules/lodash/fp/matches.js -node_modules/lodash/fp/matchesProperty.js -node_modules/lodash/fp/math.js -node_modules/lodash/fp/max.js -node_modules/lodash/fp/maxBy.js -node_modules/lodash/fp/mean.js -node_modules/lodash/fp/meanBy.js -node_modules/lodash/fp/memoize.js -node_modules/lodash/fp/merge.js -node_modules/lodash/fp/mergeAll.js -node_modules/lodash/fp/mergeAllWith.js -node_modules/lodash/fp/mergeWith.js -node_modules/lodash/fp/method.js -node_modules/lodash/fp/methodOf.js -node_modules/lodash/fp/min.js -node_modules/lodash/fp/minBy.js -node_modules/lodash/fp/mixin.js -node_modules/lodash/fp/multiply.js -node_modules/lodash/fp/nAry.js -node_modules/lodash/fp/negate.js -node_modules/lodash/fp/next.js -node_modules/lodash/fp/noop.js -node_modules/lodash/fp/now.js -node_modules/lodash/fp/nth.js -node_modules/lodash/fp/nthArg.js -node_modules/lodash/fp/number.js -node_modules/lodash/fp/object.js -node_modules/lodash/fp/omit.js -node_modules/lodash/fp/omitAll.js -node_modules/lodash/fp/omitBy.js -node_modules/lodash/fp/once.js -node_modules/lodash/fp/orderBy.js -node_modules/lodash/fp/over.js -node_modules/lodash/fp/overArgs.js -node_modules/lodash/fp/overEvery.js -node_modules/lodash/fp/overSome.js -node_modules/lodash/fp/pad.js -node_modules/lodash/fp/padChars.js -node_modules/lodash/fp/padCharsEnd.js -node_modules/lodash/fp/padCharsStart.js -node_modules/lodash/fp/padEnd.js -node_modules/lodash/fp/padStart.js -node_modules/lodash/fp/parseInt.js -node_modules/lodash/fp/partial.js -node_modules/lodash/fp/partialRight.js -node_modules/lodash/fp/partition.js -node_modules/lodash/fp/path.js -node_modules/lodash/fp/pathEq.js -node_modules/lodash/fp/pathOr.js -node_modules/lodash/fp/paths.js -node_modules/lodash/fp/pick.js -node_modules/lodash/fp/pickAll.js -node_modules/lodash/fp/pickBy.js -node_modules/lodash/fp/pipe.js -node_modules/lodash/fp/placeholder.js -node_modules/lodash/fp/plant.js -node_modules/lodash/fp/pluck.js -node_modules/lodash/fp/prop.js -node_modules/lodash/fp/propEq.js -node_modules/lodash/fp/property.js -node_modules/lodash/fp/propertyOf.js -node_modules/lodash/fp/propOr.js -node_modules/lodash/fp/props.js -node_modules/lodash/fp/pull.js -node_modules/lodash/fp/pullAll.js -node_modules/lodash/fp/pullAllBy.js -node_modules/lodash/fp/pullAllWith.js -node_modules/lodash/fp/pullAt.js -node_modules/lodash/fp/random.js -node_modules/lodash/fp/range.js -node_modules/lodash/fp/rangeRight.js -node_modules/lodash/fp/rangeStep.js -node_modules/lodash/fp/rangeStepRight.js -node_modules/lodash/fp/rearg.js -node_modules/lodash/fp/reduce.js -node_modules/lodash/fp/reduceRight.js -node_modules/lodash/fp/reject.js -node_modules/lodash/fp/remove.js -node_modules/lodash/fp/repeat.js -node_modules/lodash/fp/replace.js -node_modules/lodash/fp/rest.js -node_modules/lodash/fp/restFrom.js -node_modules/lodash/fp/result.js -node_modules/lodash/fp/reverse.js -node_modules/lodash/fp/round.js -node_modules/lodash/fp/sample.js -node_modules/lodash/fp/sampleSize.js -node_modules/lodash/fp/seq.js -node_modules/lodash/fp/set.js -node_modules/lodash/fp/setWith.js -node_modules/lodash/fp/shuffle.js -node_modules/lodash/fp/size.js -node_modules/lodash/fp/slice.js -node_modules/lodash/fp/snakeCase.js -node_modules/lodash/fp/some.js -node_modules/lodash/fp/sortBy.js -node_modules/lodash/fp/sortedIndex.js -node_modules/lodash/fp/sortedIndexBy.js -node_modules/lodash/fp/sortedIndexOf.js -node_modules/lodash/fp/sortedLastIndex.js -node_modules/lodash/fp/sortedLastIndexBy.js -node_modules/lodash/fp/sortedLastIndexOf.js -node_modules/lodash/fp/sortedUniq.js -node_modules/lodash/fp/sortedUniqBy.js -node_modules/lodash/fp/split.js -node_modules/lodash/fp/spread.js -node_modules/lodash/fp/spreadFrom.js -node_modules/lodash/fp/startCase.js -node_modules/lodash/fp/startsWith.js -node_modules/lodash/fp/string.js -node_modules/lodash/fp/stubArray.js -node_modules/lodash/fp/stubFalse.js -node_modules/lodash/fp/stubObject.js -node_modules/lodash/fp/stubString.js -node_modules/lodash/fp/stubTrue.js -node_modules/lodash/fp/subtract.js -node_modules/lodash/fp/sum.js -node_modules/lodash/fp/sumBy.js -node_modules/lodash/fp/symmetricDifference.js -node_modules/lodash/fp/symmetricDifferenceBy.js -node_modules/lodash/fp/symmetricDifferenceWith.js -node_modules/lodash/fp/T.js -node_modules/lodash/fp/tail.js -node_modules/lodash/fp/take.js -node_modules/lodash/fp/takeLast.js -node_modules/lodash/fp/takeLastWhile.js -node_modules/lodash/fp/takeRight.js -node_modules/lodash/fp/takeRightWhile.js -node_modules/lodash/fp/takeWhile.js -node_modules/lodash/fp/tap.js -node_modules/lodash/fp/template.js -node_modules/lodash/fp/templateSettings.js -node_modules/lodash/fp/throttle.js -node_modules/lodash/fp/thru.js -node_modules/lodash/fp/times.js -node_modules/lodash/fp/toArray.js -node_modules/lodash/fp/toFinite.js -node_modules/lodash/fp/toInteger.js -node_modules/lodash/fp/toIterator.js -node_modules/lodash/fp/toJSON.js -node_modules/lodash/fp/toLength.js -node_modules/lodash/fp/toLower.js -node_modules/lodash/fp/toNumber.js -node_modules/lodash/fp/toPairs.js -node_modules/lodash/fp/toPairsIn.js -node_modules/lodash/fp/toPath.js -node_modules/lodash/fp/toPlainObject.js -node_modules/lodash/fp/toSafeInteger.js -node_modules/lodash/fp/toString.js -node_modules/lodash/fp/toUpper.js -node_modules/lodash/fp/transform.js -node_modules/lodash/fp/trim.js -node_modules/lodash/fp/trimChars.js -node_modules/lodash/fp/trimCharsEnd.js -node_modules/lodash/fp/trimCharsStart.js -node_modules/lodash/fp/trimEnd.js -node_modules/lodash/fp/trimStart.js -node_modules/lodash/fp/truncate.js -node_modules/lodash/fp/unapply.js -node_modules/lodash/fp/unary.js -node_modules/lodash/fp/unescape.js -node_modules/lodash/fp/union.js -node_modules/lodash/fp/unionBy.js -node_modules/lodash/fp/unionWith.js -node_modules/lodash/fp/uniq.js -node_modules/lodash/fp/uniqBy.js -node_modules/lodash/fp/uniqueId.js -node_modules/lodash/fp/uniqWith.js -node_modules/lodash/fp/unnest.js -node_modules/lodash/fp/unset.js -node_modules/lodash/fp/unzip.js -node_modules/lodash/fp/unzipWith.js -node_modules/lodash/fp/update.js -node_modules/lodash/fp/updateWith.js -node_modules/lodash/fp/upperCase.js -node_modules/lodash/fp/upperFirst.js -node_modules/lodash/fp/useWith.js -node_modules/lodash/fp/util.js -node_modules/lodash/fp/value.js -node_modules/lodash/fp/valueOf.js -node_modules/lodash/fp/values.js -node_modules/lodash/fp/valuesIn.js -node_modules/lodash/fp/where.js -node_modules/lodash/fp/whereEq.js -node_modules/lodash/fp/without.js -node_modules/lodash/fp/words.js -node_modules/lodash/fp/wrap.js -node_modules/lodash/fp/wrapperAt.js -node_modules/lodash/fp/wrapperChain.js -node_modules/lodash/fp/wrapperLodash.js -node_modules/lodash/fp/wrapperReverse.js -node_modules/lodash/fp/wrapperValue.js -node_modules/lodash/fp/xor.js -node_modules/lodash/fp/xorBy.js -node_modules/lodash/fp/xorWith.js -node_modules/lodash/fp/zip.js -node_modules/lodash/fp/zipAll.js -node_modules/lodash/fp/zipObj.js -node_modules/lodash/fp/zipObject.js -node_modules/lodash/fp/zipObjectDeep.js -node_modules/lodash/fp/zipWith.js -node_modules/minimatch/LICENSE -node_modules/minimatch/minimatch.js -node_modules/minimatch/package.json -node_modules/minimatch/README.md -node_modules/minimist/.travis.yml -node_modules/minimist/index.js -node_modules/minimist/LICENSE -node_modules/minimist/package.json -node_modules/minimist/readme.markdown -node_modules/minimist/example/parse.js -node_modules/minimist/test/all_bool.js -node_modules/minimist/test/bool.js -node_modules/minimist/test/dash.js -node_modules/minimist/test/default_bool.js -node_modules/minimist/test/dotted.js -node_modules/minimist/test/kv_short.js -node_modules/minimist/test/long.js -node_modules/minimist/test/num.js -node_modules/minimist/test/parse_modified.js -node_modules/minimist/test/parse.js -node_modules/minimist/test/proto.js -node_modules/minimist/test/short.js -node_modules/minimist/test/stop_early.js -node_modules/minimist/test/unknown.js -node_modules/minimist/test/whitespace.js -node_modules/mkdirp/index.js -node_modules/mkdirp/LICENSE -node_modules/mkdirp/package.json -node_modules/mkdirp/readme.markdown -node_modules/mkdirp/bin/cmd.js -node_modules/mkdirp/bin/usage.txt -node_modules/ms/index.js -node_modules/ms/license.md -node_modules/ms/package.json -node_modules/ms/readme.md -node_modules/natural-compare/index.js -node_modules/natural-compare/package.json -node_modules/natural-compare/README.md -node_modules/once/LICENSE -node_modules/once/once.js -node_modules/once/package.json -node_modules/once/README.md -node_modules/optionator/CHANGELOG.md -node_modules/optionator/LICENSE -node_modules/optionator/package.json -node_modules/optionator/README.md -node_modules/optionator/lib/help.js -node_modules/optionator/lib/index.js -node_modules/optionator/lib/util.js -node_modules/parent-module/index.js -node_modules/parent-module/license -node_modules/parent-module/package.json -node_modules/parent-module/readme.md -node_modules/path-is-absolute/index.js -node_modules/path-is-absolute/license -node_modules/path-is-absolute/package.json -node_modules/path-is-absolute/readme.md -node_modules/path-key/index.d.ts -node_modules/path-key/index.js -node_modules/path-key/license -node_modules/path-key/package.json -node_modules/path-key/readme.md -node_modules/prelude-ls/CHANGELOG.md -node_modules/prelude-ls/LICENSE -node_modules/prelude-ls/package.json -node_modules/prelude-ls/README.md -node_modules/prelude-ls/lib/Func.js -node_modules/prelude-ls/lib/index.js -node_modules/prelude-ls/lib/List.js -node_modules/prelude-ls/lib/Num.js -node_modules/prelude-ls/lib/Obj.js -node_modules/prelude-ls/lib/Str.js -node_modules/progress/CHANGELOG.md -node_modules/progress/index.js -node_modules/progress/LICENSE -node_modules/progress/Makefile -node_modules/progress/package.json -node_modules/progress/Readme.md -node_modules/progress/lib/node-progress.js -node_modules/punycode/LICENSE-MIT.txt -node_modules/punycode/package.json -node_modules/punycode/punycode.es6.js -node_modules/punycode/punycode.js -node_modules/punycode/README.md -node_modules/regexpp/index.d.ts -node_modules/regexpp/index.js -node_modules/regexpp/index.js.map -node_modules/regexpp/index.mjs -node_modules/regexpp/index.mjs.map -node_modules/regexpp/LICENSE -node_modules/regexpp/package.json -node_modules/regexpp/README.md -node_modules/resolve-from/index.js -node_modules/resolve-from/license -node_modules/resolve-from/package.json -node_modules/resolve-from/readme.md -node_modules/rimraf/bin.js -node_modules/rimraf/LICENSE -node_modules/rimraf/package.json -node_modules/rimraf/README.md -node_modules/rimraf/rimraf.js -node_modules/semver/CHANGELOG.md -node_modules/semver/index.js -node_modules/semver/LICENSE -node_modules/semver/package.json -node_modules/semver/preload.js -node_modules/semver/range.bnf -node_modules/semver/README.md -node_modules/semver/bin/semver.js -node_modules/semver/classes/comparator.js -node_modules/semver/classes/index.js -node_modules/semver/classes/range.js -node_modules/semver/classes/semver.js -node_modules/semver/functions/clean.js -node_modules/semver/functions/cmp.js -node_modules/semver/functions/coerce.js -node_modules/semver/functions/compare-build.js -node_modules/semver/functions/compare-loose.js -node_modules/semver/functions/compare.js -node_modules/semver/functions/diff.js -node_modules/semver/functions/eq.js -node_modules/semver/functions/gt.js -node_modules/semver/functions/gte.js -node_modules/semver/functions/inc.js -node_modules/semver/functions/lt.js -node_modules/semver/functions/lte.js -node_modules/semver/functions/major.js -node_modules/semver/functions/minor.js -node_modules/semver/functions/neq.js -node_modules/semver/functions/parse.js -node_modules/semver/functions/patch.js -node_modules/semver/functions/prerelease.js -node_modules/semver/functions/rcompare.js -node_modules/semver/functions/rsort.js -node_modules/semver/functions/satisfies.js -node_modules/semver/functions/sort.js -node_modules/semver/functions/valid.js -node_modules/semver/internal/constants.js -node_modules/semver/internal/debug.js -node_modules/semver/internal/identifiers.js -node_modules/semver/internal/re.js -node_modules/semver/ranges/gtr.js -node_modules/semver/ranges/intersects.js -node_modules/semver/ranges/ltr.js -node_modules/semver/ranges/max-satisfying.js -node_modules/semver/ranges/min-satisfying.js -node_modules/semver/ranges/min-version.js -node_modules/semver/ranges/outside.js -node_modules/semver/ranges/simplify.js -node_modules/semver/ranges/subset.js -node_modules/semver/ranges/to-comparators.js -node_modules/semver/ranges/valid.js -node_modules/shebang-command/index.js -node_modules/shebang-command/license -node_modules/shebang-command/package.json -node_modules/shebang-command/readme.md -node_modules/shebang-regex/index.d.ts -node_modules/shebang-regex/index.js -node_modules/shebang-regex/license -node_modules/shebang-regex/package.json -node_modules/shebang-regex/readme.md -node_modules/slice-ansi/index.js -node_modules/slice-ansi/license -node_modules/slice-ansi/package.json -node_modules/slice-ansi/readme.md -node_modules/sprintf-js/.npmignore -node_modules/sprintf-js/bower.json -node_modules/sprintf-js/gruntfile.js -node_modules/sprintf-js/LICENSE -node_modules/sprintf-js/package.json -node_modules/sprintf-js/README.md -node_modules/sprintf-js/demo/angular.html -node_modules/sprintf-js/dist/angular-sprintf.min.js -node_modules/sprintf-js/dist/angular-sprintf.min.js.map -node_modules/sprintf-js/dist/angular-sprintf.min.map -node_modules/sprintf-js/dist/sprintf.min.js -node_modules/sprintf-js/dist/sprintf.min.js.map -node_modules/sprintf-js/dist/sprintf.min.map -node_modules/sprintf-js/src/angular-sprintf.js -node_modules/sprintf-js/src/sprintf.js -node_modules/sprintf-js/test/test.js -node_modules/string-width/index.js -node_modules/string-width/license -node_modules/string-width/package.json -node_modules/string-width/readme.md -node_modules/string-width/node_modules/ansi-regex/index.js -node_modules/string-width/node_modules/ansi-regex/license -node_modules/string-width/node_modules/ansi-regex/package.json -node_modules/string-width/node_modules/ansi-regex/readme.md -node_modules/string-width/node_modules/strip-ansi/index.d.ts -node_modules/string-width/node_modules/strip-ansi/index.js -node_modules/string-width/node_modules/strip-ansi/license -node_modules/string-width/node_modules/strip-ansi/package.json -node_modules/string-width/node_modules/strip-ansi/readme.md -node_modules/strip-ansi/index.d.ts -node_modules/strip-ansi/index.js -node_modules/strip-ansi/license -node_modules/strip-ansi/package.json -node_modules/strip-ansi/readme.md -node_modules/strip-json-comments/index.d.ts -node_modules/strip-json-comments/index.js -node_modules/strip-json-comments/license -node_modules/strip-json-comments/package.json -node_modules/strip-json-comments/readme.md -node_modules/supports-color/browser.js -node_modules/supports-color/index.js -node_modules/supports-color/license -node_modules/supports-color/package.json -node_modules/supports-color/readme.md -node_modules/table/LICENSE -node_modules/table/package.json -node_modules/table/README.md -node_modules/table/dist/alignString.js -node_modules/table/dist/alignString.js.flow -node_modules/table/dist/alignString.js.map -node_modules/table/dist/alignTableData.js -node_modules/table/dist/alignTableData.js.flow -node_modules/table/dist/alignTableData.js.map -node_modules/table/dist/calculateCellHeight.js -node_modules/table/dist/calculateCellHeight.js.flow -node_modules/table/dist/calculateCellHeight.js.map -node_modules/table/dist/calculateCellWidthIndex.js -node_modules/table/dist/calculateCellWidthIndex.js.flow -node_modules/table/dist/calculateCellWidthIndex.js.map -node_modules/table/dist/calculateMaximumColumnWidthIndex.js -node_modules/table/dist/calculateMaximumColumnWidthIndex.js.flow -node_modules/table/dist/calculateMaximumColumnWidthIndex.js.map -node_modules/table/dist/calculateRowHeightIndex.js -node_modules/table/dist/calculateRowHeightIndex.js.flow -node_modules/table/dist/calculateRowHeightIndex.js.map -node_modules/table/dist/createStream.js -node_modules/table/dist/createStream.js.flow -node_modules/table/dist/createStream.js.map -node_modules/table/dist/drawBorder.js -node_modules/table/dist/drawBorder.js.flow -node_modules/table/dist/drawBorder.js.map -node_modules/table/dist/drawRow.js -node_modules/table/dist/drawRow.js.flow -node_modules/table/dist/drawRow.js.map -node_modules/table/dist/drawTable.js -node_modules/table/dist/drawTable.js.flow -node_modules/table/dist/drawTable.js.map -node_modules/table/dist/getBorderCharacters.js -node_modules/table/dist/getBorderCharacters.js.flow -node_modules/table/dist/getBorderCharacters.js.map -node_modules/table/dist/index.js -node_modules/table/dist/index.js.flow -node_modules/table/dist/index.js.map -node_modules/table/dist/makeConfig.js -node_modules/table/dist/makeConfig.js.flow -node_modules/table/dist/makeConfig.js.map -node_modules/table/dist/makeStreamConfig.js -node_modules/table/dist/makeStreamConfig.js.flow -node_modules/table/dist/makeStreamConfig.js.map -node_modules/table/dist/mapDataUsingRowHeightIndex.js -node_modules/table/dist/mapDataUsingRowHeightIndex.js.flow -node_modules/table/dist/mapDataUsingRowHeightIndex.js.map -node_modules/table/dist/padTableData.js -node_modules/table/dist/padTableData.js.flow -node_modules/table/dist/padTableData.js.map -node_modules/table/dist/stringifyTableData.js -node_modules/table/dist/stringifyTableData.js.flow -node_modules/table/dist/stringifyTableData.js.map -node_modules/table/dist/table.js -node_modules/table/dist/table.js.flow -node_modules/table/dist/table.js.map -node_modules/table/dist/truncateTableData.js -node_modules/table/dist/truncateTableData.js.flow -node_modules/table/dist/truncateTableData.js.map -node_modules/table/dist/validateConfig.js -node_modules/table/dist/validateConfig.js.flow -node_modules/table/dist/validateConfig.js.map -node_modules/table/dist/validateStreamConfig.js -node_modules/table/dist/validateTableData.js -node_modules/table/dist/validateTableData.js.flow -node_modules/table/dist/validateTableData.js.map -node_modules/table/dist/wrapCell.js -node_modules/table/dist/wrapCell.js.flow -node_modules/table/dist/wrapCell.js.map -node_modules/table/dist/wrapString.js -node_modules/table/dist/wrapString.js.flow -node_modules/table/dist/wrapString.js.map -node_modules/table/dist/wrapWord.js -node_modules/table/dist/wrapWord.js.flow -node_modules/table/dist/wrapWord.js.map -node_modules/table/dist/schemas/config.json -node_modules/table/dist/schemas/streamConfig.json -node_modules/text-table/.travis.yml -node_modules/text-table/index.js -node_modules/text-table/LICENSE -node_modules/text-table/package.json -node_modules/text-table/readme.markdown -node_modules/text-table/example/align.js -node_modules/text-table/example/center.js -node_modules/text-table/example/dotalign.js -node_modules/text-table/example/doubledot.js -node_modules/text-table/example/table.js -node_modules/text-table/test/align.js -node_modules/text-table/test/ansi-colors.js -node_modules/text-table/test/center.js -node_modules/text-table/test/dotalign.js -node_modules/text-table/test/doubledot.js -node_modules/text-table/test/table.js -node_modules/type-check/LICENSE -node_modules/type-check/package.json -node_modules/type-check/README.md -node_modules/type-check/lib/check.js -node_modules/type-check/lib/index.js -node_modules/type-check/lib/parse-type.js -node_modules/type-fest/index.d.ts -node_modules/type-fest/license -node_modules/type-fest/package.json -node_modules/type-fest/readme.md -node_modules/type-fest/source/basic.d.ts -node_modules/type-fest/source/except.d.ts -node_modules/type-fest/source/literal-union.d.ts -node_modules/type-fest/source/merge-exclusive.d.ts -node_modules/type-fest/source/merge.d.ts -node_modules/type-fest/source/mutable.d.ts -node_modules/type-fest/source/opaque.d.ts -node_modules/type-fest/source/package-json.d.ts -node_modules/type-fest/source/partial-deep.d.ts -node_modules/type-fest/source/promisable.d.ts -node_modules/type-fest/source/readonly-deep.d.ts -node_modules/type-fest/source/require-at-least-one.d.ts -node_modules/type-fest/source/require-exactly-one.d.ts -node_modules/type-fest/source/set-optional.d.ts -node_modules/type-fest/source/set-required.d.ts -node_modules/uri-js/LICENSE -node_modules/uri-js/package.json -node_modules/uri-js/README.md -node_modules/uri-js/yarn.lock -node_modules/uri-js/dist/es5/uri.all.d.ts -node_modules/uri-js/dist/es5/uri.all.js -node_modules/uri-js/dist/es5/uri.all.js.map -node_modules/uri-js/dist/es5/uri.all.min.d.ts -node_modules/uri-js/dist/es5/uri.all.min.js -node_modules/uri-js/dist/es5/uri.all.min.js.map -node_modules/uri-js/dist/esnext/index.d.ts -node_modules/uri-js/dist/esnext/index.js -node_modules/uri-js/dist/esnext/index.js.map -node_modules/uri-js/dist/esnext/regexps-iri.d.ts -node_modules/uri-js/dist/esnext/regexps-iri.js -node_modules/uri-js/dist/esnext/regexps-iri.js.map -node_modules/uri-js/dist/esnext/regexps-uri.d.ts -node_modules/uri-js/dist/esnext/regexps-uri.js -node_modules/uri-js/dist/esnext/regexps-uri.js.map -node_modules/uri-js/dist/esnext/uri.d.ts -node_modules/uri-js/dist/esnext/uri.js -node_modules/uri-js/dist/esnext/uri.js.map -node_modules/uri-js/dist/esnext/util.d.ts -node_modules/uri-js/dist/esnext/util.js -node_modules/uri-js/dist/esnext/util.js.map -node_modules/uri-js/dist/esnext/schemes/http.d.ts -node_modules/uri-js/dist/esnext/schemes/http.js -node_modules/uri-js/dist/esnext/schemes/http.js.map -node_modules/uri-js/dist/esnext/schemes/https.d.ts -node_modules/uri-js/dist/esnext/schemes/https.js -node_modules/uri-js/dist/esnext/schemes/https.js.map -node_modules/uri-js/dist/esnext/schemes/mailto.d.ts -node_modules/uri-js/dist/esnext/schemes/mailto.js -node_modules/uri-js/dist/esnext/schemes/mailto.js.map -node_modules/uri-js/dist/esnext/schemes/urn-uuid.d.ts -node_modules/uri-js/dist/esnext/schemes/urn-uuid.js -node_modules/uri-js/dist/esnext/schemes/urn-uuid.js.map -node_modules/uri-js/dist/esnext/schemes/urn.d.ts -node_modules/uri-js/dist/esnext/schemes/urn.js -node_modules/uri-js/dist/esnext/schemes/urn.js.map -node_modules/uri-js/dist/esnext/schemes/ws.d.ts -node_modules/uri-js/dist/esnext/schemes/ws.js -node_modules/uri-js/dist/esnext/schemes/ws.js.map -node_modules/uri-js/dist/esnext/schemes/wss.d.ts -node_modules/uri-js/dist/esnext/schemes/wss.js -node_modules/uri-js/dist/esnext/schemes/wss.js.map -node_modules/v8-compile-cache/CHANGELOG.md -node_modules/v8-compile-cache/LICENSE -node_modules/v8-compile-cache/package.json -node_modules/v8-compile-cache/README.md -node_modules/v8-compile-cache/v8-compile-cache.js -node_modules/which/CHANGELOG.md -node_modules/which/LICENSE -node_modules/which/package.json -node_modules/which/README.md -node_modules/which/which.js -node_modules/which/bin/node-which -node_modules/word-wrap/index.d.ts -node_modules/word-wrap/index.js -node_modules/word-wrap/LICENSE -node_modules/word-wrap/package.json -node_modules/word-wrap/README.md -node_modules/wrappy/LICENSE -node_modules/wrappy/package.json -node_modules/wrappy/README.md -node_modules/wrappy/wrappy.js -node_modules/write/index.js -node_modules/write/LICENSE -node_modules/write/package.json -node_modules/write/README.md +node_modules/* diff --git a/components/driver_bt/bt_app_sink.c b/components/driver_bt/bt_app_sink.c index 211f265f..136fb5ca 100644 --- a/components/driver_bt/bt_app_sink.c +++ b/components/driver_bt/bt_app_sink.c @@ -558,7 +558,7 @@ void bt_sink_init(bt_cmd_vcb_t cmd_cb, bt_data_cb_t data_cb) cmd_handler_chain = cmd_cb; bt_app_a2d_data_cb = data_cb; - ESP_ERROR_CHECK(esp_bt_controller_mem_release(ESP_BT_MODE_BLE)); + esp_bt_controller_mem_release(ESP_BT_MODE_BLE); esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT(); if ((err = esp_bt_controller_init(&bt_cfg)) != ESP_OK) { diff --git a/components/driver_bt/bt_app_source.c b/components/driver_bt/bt_app_source.c index 696f4f7a..302ea39d 100644 --- a/components/driver_bt/bt_app_source.c +++ b/components/driver_bt/bt_app_source.c @@ -189,13 +189,13 @@ static void peers_list_maintain(const char * s_peer_bdname, int32_t rssi){ free(list_json); } } - + int bt_app_source_get_a2d_state(){ - ESP_LOGW(TAG,"a2dp status: %u = %s", bt_app_source_a2d_state, APP_AV_STATE_DESC[bt_app_source_a2d_state]); + ESP_LOGD(TAG,"a2dp status: %u = %s", bt_app_source_a2d_state, APP_AV_STATE_DESC[bt_app_source_a2d_state]); return bt_app_source_a2d_state; } int bt_app_source_get_media_state(){ - ESP_LOGW(TAG,"media state : %u ", bt_app_source_media_state); + ESP_LOGD(TAG,"media state : %u ", bt_app_source_media_state); return bt_app_source_media_state; } void set_app_source_state(int new_state){ diff --git a/components/platform_console/cmd_config.c b/components/platform_console/cmd_config.c index af342144..f3834832 100644 --- a/components/platform_console/cmd_config.c +++ b/components/platform_console/cmd_config.c @@ -139,7 +139,6 @@ static struct { // " \t\t\t b = basic linear interpolation, l = 13 taps, m = 21 taps, i = interpolate filter coefficients\n" #endif struct arg_int * rate;// " -Z \t\tReport rate to server in helo as the maximum sample rate we can support\n" - struct arg_end *end; } squeezelite_args; @@ -266,7 +265,6 @@ char * strip_bt_name(char * opt_str) pch = strtok(NULL, " "); ESP_LOGV(TAG,"\n"); } - } else { diff --git a/components/services/messaging.c b/components/services/messaging.c index ff7f35d0..3a708f54 100644 --- a/components/services/messaging.c +++ b/components/services/messaging.c @@ -120,6 +120,7 @@ const char * messaging_get_class_desc(messaging_classes msg_class){ CASE_TO_STR(MESSAGING_CLASS_SYSTEM); CASE_TO_STR(MESSAGING_CLASS_STATS); CASE_TO_STR(MESSAGING_CLASS_CFGCMD); + CASE_TO_STR(MESSAGING_CLASS_BT); default: return "Unknown"; break; diff --git a/components/wifi-manager/.gitignore b/components/wifi-manager/.gitignore deleted file mode 100644 index e1a40b3c..00000000 --- a/components/wifi-manager/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/.code.js.swp diff --git a/components/wifi-manager/CMakeLists.txt b/components/wifi-manager/CMakeLists.txt index e4539b25..a6782082 100644 --- a/components/wifi-manager/CMakeLists.txt +++ b/components/wifi-manager/CMakeLists.txt @@ -1,8 +1,10 @@ -idf_component_register( SRC_DIRS . - INCLUDE_DIRS . ${IDF_PATH}/components/esp_http_server/src ${IDF_PATH}/components/esp_http_server/src/port/esp32 ${IDF_PATH}/components/esp_http_server/src/util ${IDF_PATH}/components/esp_http_server/src/ + +set( WEBPACK_DIR webapp/webpack/dist ) +idf_component_register( SRC_DIRS . webapp + INCLUDE_DIRS . webapp ${IDF_PATH}/components/esp_http_server/src ${IDF_PATH}/components/esp_http_server/src/port/esp32 ${IDF_PATH}/components/esp_http_server/src/util ${IDF_PATH}/components/esp_http_server/src/ REQUIRES squeezelite-ota json mdns PRIV_REQUIRES tools services platform_config esp_common json newlib freertos spi_flash nvs_flash mdns pthread wpa_supplicant platform_console esp_http_server console driver_bt - EMBED_FILES res/style.css.gz res/code.js.gz index.html res/bootstrap.css.gz res/yeti/bootstrap.css.gz res/jquery.js.gz res/bootstrap.js.gz res/favicon.ico - ) + +include(webapp/webapp.cmake) \ No newline at end of file diff --git a/components/wifi-manager/compress.bat b/components/wifi-manager/compress.bat deleted file mode 100644 index bff6a512..00000000 --- a/components/wifi-manager/compress.bat +++ /dev/null @@ -1,2 +0,0 @@ -gzip index.html style.css jquery.js --best --keep --force -pause \ No newline at end of file diff --git a/components/wifi-manager/connect b/components/wifi-manager/connect deleted file mode 100644 index 8c7fe211..00000000 --- a/components/wifi-manager/connect +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/components/wifi-manager/http_server_handlers.c b/components/wifi-manager/http_server_handlers.c index 203b13fa..9f932c6b 100644 --- a/components/wifi-manager/http_server_handlers.c +++ b/components/wifi-manager/http_server_handlers.c @@ -54,6 +54,7 @@ function to process requests, decode URLs, serve files, etc. etc. #include "argtable3/argtable3.h" #include "platform_console.h" #include "accessors.h" +#include "webapp/webpack.h" #define HTTP_STACK_SIZE (5*1024) const char str_na[]="N/A"; @@ -89,22 +90,7 @@ static const char redirect_payload3[]="'>here to login.

"; * @see file "component.mk" * @see https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html#embedding-binary-data */ -extern const uint8_t style_css_start[] asm("_binary_style_css_gz_start"); -extern const uint8_t style_css_end[] asm("_binary_style_css_gz_end"); -extern const uint8_t jquery_gz_start[] asm("_binary_jquery_js_gz_start"); -extern const uint8_t jquery_gz_end[] asm("_binary_jquery_js_gz_end"); -// extern const uint8_t popper_gz_start[] asm("_binary_popper_min_js_gz_start"); -// extern const uint8_t popper_gz_end[] asm("_binary_popper_min_js_gz_end"); -extern const uint8_t bootstrap_js_gz_start[] asm("_binary_bootstrap_js_gz_start"); -extern const uint8_t bootstrap_js_gz_end[] asm("_binary_bootstrap_js_gz_end"); -extern const uint8_t bootstrap_css_gz_start[] asm("_binary_bootstrap_css_gz_start"); -extern const uint8_t bootstrap_css_gz_end[] asm("_binary_bootstrap_css_gz_end"); -extern const uint8_t code_js_start[] asm("_binary_code_js_gz_start"); -extern const uint8_t code_js_end[] asm("_binary_code_js_gz_end"); -extern const uint8_t index_html_start[] asm("_binary_index_html_start"); -extern const uint8_t index_html_end[] asm("_binary_index_html_end"); -extern const uint8_t favicon_ico_start[] asm("_binary_favicon_ico_start"); -extern const uint8_t favicon_ico_end[] asm("_binary_favicon_ico_end"); + esp_err_t redirect_processor(httpd_req_t *req, httpd_err_code_t error); @@ -334,8 +320,8 @@ static esp_err_t set_content_type_from_file(httpd_req_t *req, const char *filena return httpd_resp_set_type(req, HTTPD_TYPE_TEXT); } else if (IS_FILE_EXT(filename, ".jpeg")) { return httpd_resp_set_type(req, "image/jpeg"); - } else if (IS_FILE_EXT(filename, ".ico")) { - return httpd_resp_set_type(req, "image/x-icon"); + } else if (IS_FILE_EXT(filename, ".png")) { + return httpd_resp_set_type(req, "image/png"); } else if (IS_FILE_EXT(filename, ".ico")) { return httpd_resp_set_type(req, "image/x-icon"); } else if (IS_FILE_EXT(filename, ".css")) { @@ -370,8 +356,16 @@ static esp_err_t set_content_type_from_req(httpd_req_t *req) return ESP_OK; } - +int resource_get_index(const char * fileName){ + for(int i=0;resource_lookups[i][0]!='\0';i++){ + if(strstr(resource_lookups[i], fileName)){ + return i; + } + } + return -1; +} esp_err_t root_get_handler(httpd_req_t *req){ + esp_err_t err = ESP_OK; ESP_LOGD_LOC(TAG, "serving [%s]", req->uri); httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); httpd_resp_set_hdr(req, "Accept-Encoding", "identity"); @@ -379,15 +373,24 @@ esp_err_t root_get_handler(httpd_req_t *req){ if(!is_user_authenticated(req)){ // todo: send password entry page and return } - const size_t file_size = (index_html_end - index_html_start); - esp_err_t err = set_content_type_from_req(req); - if(err == ESP_OK){ - httpd_resp_send(req, (const char *)index_html_start, file_size); + int idx=-1; + if((idx=resource_get_index("index.html"))>=0){ + const size_t file_size = (resource_map_end[idx] - resource_map_start[idx]); + httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); + err = set_content_type_from_req(req); + if(err == ESP_OK){ + httpd_resp_send(req, (const char *)resource_map_start[idx], file_size); + } + } + else{ + httpd_resp_send_err(req, HTTPD_500_INTERNAL_SERVER_ERROR, "index.html not found"); + return ESP_FAIL; } ESP_LOGD_LOC(TAG, "done serving [%s]", req->uri); return err; } + esp_err_t resource_filehandler(httpd_req_t *req){ char filepath[FILE_PATH_MAX]; ESP_LOGD_LOC(TAG, "serving [%s]", req->uri); @@ -407,41 +410,17 @@ esp_err_t resource_filehandler(httpd_req_t *req){ return ESP_FAIL; } - if(strstr(filename, "code.js")) { + + int idx=-1; + if((idx=resource_get_index(filename))>=0){ set_content_type_from_file(req, filename); - httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - const size_t file_size = (code_js_end - code_js_start); - httpd_resp_send(req, (const char *)code_js_start, file_size); - } else if(strstr(filename, "style.css")) { - set_content_type_from_file(req, filename); - httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - const size_t file_size = (style_css_end - style_css_start); - httpd_resp_send(req, (const char *)style_css_start, file_size); - } else if(strstr(filename, "favicon.ico")) { - set_content_type_from_file(req, filename); - const size_t file_size = (favicon_ico_end - favicon_ico_start); - httpd_resp_send(req, (const char *)favicon_ico_start, file_size); - } else if(strstr(filename, "jquery.js")) { - set_content_type_from_file(req, filename); - httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - const size_t file_size = (jquery_gz_end - jquery_gz_start); - httpd_resp_send(req, (const char *)jquery_gz_start, file_size); - // } else if(strstr(filename, "popper.js")) { - // set_content_type_from_file(req, filename); - // httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - // const size_t file_size = (popper_gz_end - popper_gz_start); - // httpd_resp_send(req, (const char *)popper_gz_start, file_size); - } else if(strstr(filename, "bootstrap.js")) { - set_content_type_from_file(req, filename); + if(strstr(resource_lookups[idx], ".gz")) { httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - const size_t file_size = (bootstrap_js_gz_end - bootstrap_js_gz_start); - httpd_resp_send(req, (const char *)bootstrap_js_gz_start, file_size); - } else if(strstr(filename, "bootstrap.css")) { - set_content_type_from_file(req, filename); - httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - const size_t file_size = (bootstrap_css_gz_end - bootstrap_css_gz_start); - httpd_resp_send(req, (const char *)bootstrap_css_gz_start, file_size); - } else { + } + const size_t file_size = (resource_map_end[idx] - resource_map_start[idx]); + httpd_resp_send(req, (const char *)resource_map_start[idx], file_size); + } + else { ESP_LOGE_LOC(TAG, "Unknown resource [%s] from path [%s] ", filename,filepath); /* Respond with 404 Not Found */ httpd_resp_send_err(req, HTTPD_404_NOT_FOUND, "File does not exist"); diff --git a/components/wifi-manager/index.development.html b/components/wifi-manager/index.development.html deleted file mode 100644 index 3d85dc8b..00000000 --- a/components/wifi-manager/index.development.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - - - - - - - - esp32-wifi-manager - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
-
-
-

Connected to:

-
-
-
-
-
-
-
-
-

Manual connect

-
-
ADD (HIDDEN) SSID
-
-

or choose a network... - -

-
-
-
-
-
-

Enter Details

-
-

DHCP host name

-
- -
-

Manual Connection

-
- - -
-
- - -
-
-
-
-

Connect to network

-
-

DHCP host name

-
- -
-

Password for

-
- -
-
- - -
-
-
-
-

Please wait...

-
-

Connecting to

-
-
-
-
-
-
-

You may lose wifi access while the esp32 recalibrates its radio. Please wait until your device automatically reconnects. This can take up to 30s.

-
-
-

Success!

-
-
-

Connection failed

-

Please double-check wifi password if any and make sure the access point has good signal.

-
-
-
- -
-
-
-
-
-

-
-

-
-
- -
-
-

IP Address

-
-
- IP Address: -
-
-
- Subnet Mask: -
-
-
- Default Gateway: -
-
-
-
- -
-
-
-
-

Are you sure you would like to disconnect from this wifi?

-
- - -
-
-
-
-
- -
- - -
-
-
-
-
-
-
- -
-
-

Check for firmware upgrade

-
- -
-
- - -
- - - - - - - - - - - - - -
Firmware versionRelease dateHW platformIDF versionBranchFlash this FW
-

Firmware URL:

- -
- -
-

OR

-
- -
- -
-
-
-
-
- 0% -
-
-
-
-
- - - - - - - - - -
KeyValue
-
-
-
- -
-
- - - - -
-
- -
-
-
Usage Templates
-
-
-
- Output -
- -
-
- -
-
- -
-
-
-
-
- -
- - - -
-
-
-
-
-
-
-
-
- -
-
-
Logs
-
- - - - - - - - - -
TimestampMessage
-
- -
-
-
Pin Assignments
-
- - -
DevicePin NameGPIO NumberType
-
-
Tasks
-
- - - -
#Task NameCPUStateMin StackBase PriorityCur Priority
-
- -
-
-

squeezelite-esp32, © 2020, philippe44, sle118, daduke
This software is released under the MIT License.

-

- This app would not be possible without the following libraries: -

-
    -
  • squeezelite, © 2012-2019, Adrian Smith and Ralph Irving. Licensed under the GPL License.
  • -
  • esp32-wifi-manager, © 2017-2019, Tony Pottier. Licensed under the MIT License.
  • -
  • SpinKit, © 2015, Tobias Ahlin. Licensed under the MIT License.
  • -
  • jQuery, The jQuery Foundation. Licensed under the MIT License.
  • -
  • cJSON, © 2009-2017, Dave Gamble and cJSON contributors. Licensed under the MIT License.
  • -
  • esp32-rotary-encoder, © 2011-2019, David Antliff and Ben Buxton. Licensed under the GPL License.
  • -
  • tarablessd1306, © 2017-2018, Tara Keeling. Licensed under the MIT license.
  • -
-
-

Show NVS Editor

-
- - -
-

Show Advanced Commands

-
- - -
-
- -
-
- -
-
- -
- - \ No newline at end of file diff --git a/components/wifi-manager/index.html b/components/wifi-manager/index.html deleted file mode 100644 index 98228d60..00000000 --- a/components/wifi-manager/index.html +++ /dev/null @@ -1 +0,0 @@ -esp32-wifi-manager

Connected to:

Manual connect

ADD (HIDDEN) SSID

or choose a network...

Enter Details

DHCP host name

Manual Connection

Connect to network

DHCP host name

Password for

Please wait...

Connecting to

You may lose wifi access while the esp32 recalibrates its radio. Please wait until your device automatically reconnects. This can take up to 30s.

Success!

Connection failed

Please double-check wifi password if any and make sure the access point has good signal.

IP Address

IP Address:
Subnet Mask:
Default Gateway:

Are you sure you would like to disconnect from this wifi?

Check for firmware upgrade

Firmware version Release date HW platform IDF version Branch Flash this FW

Firmware URL:

OR

0%
Key Value
Usage Templates
Output
Logs
TimestampMessage
Pin Assignments
DevicePin NameGPIO NumberType
Tasks
#Task NameCPUStateMin StackBase PriorityCur Priority

squeezelite-esp32, © 2020, philippe44, sle118, daduke
This software is released under the MIT License.

This app would not be possible without the following libraries:

  • squeezelite, © 2012-2019, Adrian Smith and Ralph Irving. Licensed under the GPL License.
  • esp32-wifi-manager, © 2017-2019, Tony Pottier. Licensed under the MIT License.
  • SpinKit, © 2015, Tobias Ahlin. Licensed under the MIT License.
  • jQuery, The jQuery Foundation. Licensed under the MIT License.
  • cJSON, © 2009-2017, Dave Gamble and cJSON contributors. Licensed under the MIT License.
  • esp32-rotary-encoder, © 2011-2019, David Antliff and Ben Buxton. Licensed under the GPL License.
  • tarablessd1306, © 2017-2018, Tara Keeling. Licensed under the MIT license.

Show NVS Editor

Show Advanced Commands


\ No newline at end of file diff --git a/components/wifi-manager/res/bootstrap.css b/components/wifi-manager/res/bootstrap.css deleted file mode 100644 index 9ab40e92..00000000 --- a/components/wifi-manager/res/bootstrap.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Bootswatch v4.5.2 - * Homepage: https://bootswatch.com - * Copyright 2012-2020 Thomas Park - * Licensed under MIT - * Based on Bootstrap -*//*! - * Bootstrap v4.5.2 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors - * Copyright 2011-2020 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */@import url("https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;1,400&display=swap");:root{--blue: #375a7f;--indigo: #6610f2;--purple: #6f42c1;--pink: #e83e8c;--red: #e74c3c;--orange: #fd7e14;--yellow: #f39c12;--green: #00bc8c;--teal: #20c997;--cyan: #3498db;--white: #fff;--gray: #888;--gray-dark: #303030;--primary: #375a7f;--secondary: #444;--success: #00bc8c;--info: #3498db;--warning: #f39c12;--danger: #e74c3c;--light: #adb5bd;--dark: #303030;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: "Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-size:0.9375rem;font-weight:400;line-height:1.5;color:#fff;text-align:left;background-color:#222}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#00bc8c;text-decoration:none;background-color:transparent}a:hover{color:#007053;text-decoration:underline}a:not([href]):not([class]){color:inherit;text-decoration:none}a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:0.75rem;padding-bottom:0.75rem;color:#888;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:0.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{padding:0;border-style:none}input[type="radio"],input[type="checkbox"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:none}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:0.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:3rem}h2,.h2{font-size:2.5rem}h3,.h3{font-size:2rem}h4,.h4{font-size:1.40625rem}h5,.h5{font-size:1.171875rem}h6,.h6{font-size:0.9375rem}.lead{font-size:1.171875rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:0.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:0.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.171875rem}.blockquote-footer{display:block;font-size:80%;color:#888}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:0.25rem;background-color:#222;border:1px solid #dee2e6;border-radius:0.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:0.5rem;line-height:1}.figure-caption{font-size:90%;color:#888}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:0.2rem 0.4rem;font-size:87.5%;color:#fff;background-color:#222;border-radius:0.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:inherit}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-sm,.container-md,.container-lg,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width: 576px){.container,.container-sm{max-width:540px}}@media (min-width: 768px){.container,.container-sm,.container-md{max-width:720px}}@media (min-width: 992px){.container,.container-sm,.container-md,.container-lg{max-width:960px}}@media (min-width: 1200px){.container,.container-sm,.container-md,.container-lg,.container-xl{max-width:1140px}}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*="col-"]{padding-right:0;padding-left:0}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col,.col-auto,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm,.col-sm-auto,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md,.col-md-auto,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg,.col-lg-auto,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width: 576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-sm-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width: 768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-md-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-md-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-md-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-md-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-md-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width: 992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-lg-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width: 1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.row-cols-xl-1>*{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{-webkit-box-flex:0;-ms-flex:0 0 20%;flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:1rem;color:#fff}.table th,.table td{padding:0.75rem;vertical-align:top;border-top:1px solid #444}.table thead th{vertical-align:bottom;border-bottom:2px solid #444}.table tbody+tbody{border-top:2px solid #444}.table-sm th,.table-sm td{padding:0.3rem}.table-bordered{border:1px solid #444}.table-bordered th,.table-bordered td{border:1px solid #444}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-borderless th,.table-borderless td,.table-borderless thead th,.table-borderless tbody+tbody{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#303030}.table-hover tbody tr:hover{color:#fff;background-color:rgba(0,0,0,0.075)}.table-primary,.table-primary>th,.table-primary>td{background-color:#c7d1db}.table-primary th,.table-primary td,.table-primary thead th,.table-primary tbody+tbody{border-color:#97a9bc}.table-hover .table-primary:hover{background-color:#b7c4d1}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b7c4d1}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#cbcbcb}.table-secondary th,.table-secondary td,.table-secondary thead th,.table-secondary tbody+tbody{border-color:#9e9e9e}.table-hover .table-secondary:hover{background-color:#bebebe}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#bebebe}.table-success,.table-success>th,.table-success>td{background-color:#b8ecdf}.table-success th,.table-success td,.table-success thead th,.table-success tbody+tbody{border-color:#7adcc3}.table-hover .table-success:hover{background-color:#a4e7d6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a4e7d6}.table-info,.table-info>th,.table-info>td{background-color:#c6e2f5}.table-info th,.table-info td,.table-info thead th,.table-info tbody+tbody{border-color:#95c9ec}.table-hover .table-info:hover{background-color:#b0d7f1}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b0d7f1}.table-warning,.table-warning>th,.table-warning>td{background-color:#fce3bd}.table-warning th,.table-warning td,.table-warning thead th,.table-warning tbody+tbody{border-color:#f9cc84}.table-hover .table-warning:hover{background-color:#fbd9a5}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbd9a5}.table-danger,.table-danger>th,.table-danger>td{background-color:#f8cdc8}.table-danger th,.table-danger td,.table-danger thead th,.table-danger tbody+tbody{border-color:#f3a29a}.table-hover .table-danger:hover{background-color:#f5b8b1}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f5b8b1}.table-light,.table-light>th,.table-light>td{background-color:#e8eaed}.table-light th,.table-light td,.table-light thead th,.table-light tbody+tbody{border-color:#d4d9dd}.table-hover .table-light:hover{background-color:#dadde2}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#dadde2}.table-dark,.table-dark>th,.table-dark>td{background-color:#c5c5c5}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#939393}.table-hover .table-dark:hover{background-color:#b8b8b8}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b8b8b8}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table .thead-dark th{color:#fff;background-color:#303030;border-color:#434343}.table .thead-light th{color:#444;background-color:#ebebeb;border-color:#444}.table-dark{color:#fff;background-color:#303030}.table-dark th,.table-dark td,.table-dark thead th{border-color:#434343}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,0.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,0.075)}@media (max-width: 575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width: 767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width: 991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width: 1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.75rem;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #222;border-radius:0.25rem;-webkit-transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #444}.form-control:focus{color:#444;background-color:#fff;border-color:#739ac2;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.form-control::-webkit-input-placeholder{color:#888;opacity:1}.form-control::-ms-input-placeholder{color:#888;opacity:1}.form-control::placeholder{color:#888;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#ebebeb;opacity:1}input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#444;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.171875rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.8203125rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:0.375rem 0;margin-bottom:0;font-size:0.9375rem;line-height:1.5;color:#fff;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:0.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*="col-"]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:0.3rem;margin-left:-1.25rem}.form-check-input[disabled] ~ .form-check-label,.form-check-input:disabled ~ .form-check-label{color:#888}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:0.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:0.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#00bc8c}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#fff;background-color:rgba(0,188,140,0.9);border-radius:0.25rem}.was-validated :valid ~ .valid-feedback,.was-validated :valid ~ .valid-tooltip,.is-valid ~ .valid-feedback,.is-valid ~ .valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#00bc8c;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#00bc8c;-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#00bc8c;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23303030' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2300bc8c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#00bc8c;-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25)}.was-validated .form-check-input:valid ~ .form-check-label,.form-check-input.is-valid ~ .form-check-label{color:#00bc8c}.was-validated .form-check-input:valid ~ .valid-feedback,.was-validated .form-check-input:valid ~ .valid-tooltip,.form-check-input.is-valid ~ .valid-feedback,.form-check-input.is-valid ~ .valid-tooltip{display:block}.was-validated .custom-control-input:valid ~ .custom-control-label,.custom-control-input.is-valid ~ .custom-control-label{color:#00bc8c}.was-validated .custom-control-input:valid ~ .custom-control-label::before,.custom-control-input.is-valid ~ .custom-control-label::before{border-color:#00bc8c}.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before,.custom-control-input.is-valid:checked ~ .custom-control-label::before{border-color:#00efb2;background-color:#00efb2}.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before,.custom-control-input.is-valid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25)}.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{border-color:#00bc8c}.was-validated .custom-file-input:valid ~ .custom-file-label,.custom-file-input.is-valid ~ .custom-file-label{border-color:#00bc8c}.was-validated .custom-file-input:valid:focus ~ .custom-file-label,.custom-file-input.is-valid:focus ~ .custom-file-label{border-color:#00bc8c;-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.25)}.invalid-feedback{display:none;width:100%;margin-top:0.25rem;font-size:80%;color:#e74c3c}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:0.25rem 0.5rem;margin-top:.1rem;font-size:0.8203125rem;line-height:1.5;color:#fff;background-color:rgba(231,76,60,0.9);border-radius:0.25rem}.was-validated :invalid ~ .invalid-feedback,.was-validated :invalid ~ .invalid-tooltip,.is-invalid ~ .invalid-feedback,.is-invalid ~ .invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#e74c3c;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74c3c' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#e74c3c;-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#e74c3c;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23303030' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e74c3c' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e74c3c' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#e74c3c;-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25)}.was-validated .form-check-input:invalid ~ .form-check-label,.form-check-input.is-invalid ~ .form-check-label{color:#e74c3c}.was-validated .form-check-input:invalid ~ .invalid-feedback,.was-validated .form-check-input:invalid ~ .invalid-tooltip,.form-check-input.is-invalid ~ .invalid-feedback,.form-check-input.is-invalid ~ .invalid-tooltip{display:block}.was-validated .custom-control-input:invalid ~ .custom-control-label,.custom-control-input.is-invalid ~ .custom-control-label{color:#e74c3c}.was-validated .custom-control-input:invalid ~ .custom-control-label::before,.custom-control-input.is-invalid ~ .custom-control-label::before{border-color:#e74c3c}.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before,.custom-control-input.is-invalid:checked ~ .custom-control-label::before{border-color:#ed7669;background-color:#ed7669}.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before,.custom-control-input.is-invalid:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25)}.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{border-color:#e74c3c}.was-validated .custom-file-input:invalid ~ .custom-file-label,.custom-file-input.is-invalid ~ .custom-file-label{border-color:#e74c3c}.was-validated .custom-file-input:invalid:focus ~ .custom-file-label,.custom-file-input.is-invalid:focus ~ .custom-file-label{border-color:#e74c3c;-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width: 576px){.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:0.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#fff;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:0.375rem 0.75rem;font-size:0.9375rem;line-height:1.5;border-radius:0.25rem;-webkit-transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#fff;text-decoration:none}.btn:focus,.btn.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.btn.disabled,.btn:disabled{opacity:0.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#375a7f;border-color:#375a7f}.btn-primary:hover{color:#fff;background-color:#2b4764;border-color:#28415b}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#2b4764;border-color:#28415b;-webkit-box-shadow:0 0 0 0.2rem rgba(85,115,146,0.5);box-shadow:0 0 0 0.2rem rgba(85,115,146,0.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#375a7f;border-color:#375a7f}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#28415b;border-color:#243a53}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(85,115,146,0.5);box-shadow:0 0 0 0.2rem rgba(85,115,146,0.5)}.btn-secondary{color:#fff;background-color:#444;border-color:#444}.btn-secondary:hover{color:#fff;background-color:#313131;border-color:#2b2a2a}.btn-secondary:focus,.btn-secondary.focus{color:#fff;background-color:#313131;border-color:#2b2a2a;-webkit-box-shadow:0 0 0 0.2rem rgba(96,96,96,0.5);box-shadow:0 0 0 0.2rem rgba(96,96,96,0.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#444;border-color:#444}.btn-secondary:not(:disabled):not(.disabled):active,.btn-secondary:not(:disabled):not(.disabled).active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#2b2a2a;border-color:#242424}.btn-secondary:not(:disabled):not(.disabled):active:focus,.btn-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(96,96,96,0.5);box-shadow:0 0 0 0.2rem rgba(96,96,96,0.5)}.btn-success{color:#fff;background-color:#00bc8c;border-color:#00bc8c}.btn-success:hover{color:#fff;background-color:#009670;border-color:#008966}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#009670;border-color:#008966;-webkit-box-shadow:0 0 0 0.2rem rgba(38,198,157,0.5);box-shadow:0 0 0 0.2rem rgba(38,198,157,0.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#00bc8c;border-color:#00bc8c}.btn-success:not(:disabled):not(.disabled):active,.btn-success:not(:disabled):not(.disabled).active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#008966;border-color:#007c5d}.btn-success:not(:disabled):not(.disabled):active:focus,.btn-success:not(:disabled):not(.disabled).active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(38,198,157,0.5);box-shadow:0 0 0 0.2rem rgba(38,198,157,0.5)}.btn-info{color:#fff;background-color:#3498db;border-color:#3498db}.btn-info:hover{color:#fff;background-color:#2384c6;border-color:#217dbb}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#2384c6;border-color:#217dbb;-webkit-box-shadow:0 0 0 0.2rem rgba(82,167,224,0.5);box-shadow:0 0 0 0.2rem rgba(82,167,224,0.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#3498db;border-color:#3498db}.btn-info:not(:disabled):not(.disabled):active,.btn-info:not(:disabled):not(.disabled).active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#217dbb;border-color:#1f76b0}.btn-info:not(:disabled):not(.disabled):active:focus,.btn-info:not(:disabled):not(.disabled).active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(82,167,224,0.5);box-shadow:0 0 0 0.2rem rgba(82,167,224,0.5)}.btn-warning{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-warning:hover{color:#fff;background-color:#d4860b;border-color:#c87f0a}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#d4860b;border-color:#c87f0a;-webkit-box-shadow:0 0 0 0.2rem rgba(245,171,54,0.5);box-shadow:0 0 0 0.2rem rgba(245,171,54,0.5)}.btn-warning.disabled,.btn-warning:disabled{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-warning:not(:disabled):not(.disabled):active,.btn-warning:not(:disabled):not(.disabled).active,.show>.btn-warning.dropdown-toggle{color:#fff;background-color:#c87f0a;border-color:#bc770a}.btn-warning:not(:disabled):not(.disabled):active:focus,.btn-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(245,171,54,0.5);box-shadow:0 0 0 0.2rem rgba(245,171,54,0.5)}.btn-danger{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-danger:hover{color:#fff;background-color:#e12e1c;border-color:#d62c1a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#e12e1c;border-color:#d62c1a;-webkit-box-shadow:0 0 0 0.2rem rgba(235,103,89,0.5);box-shadow:0 0 0 0.2rem rgba(235,103,89,0.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-danger:not(:disabled):not(.disabled):active,.btn-danger:not(:disabled):not(.disabled).active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#d62c1a;border-color:#ca2a19}.btn-danger:not(:disabled):not(.disabled):active:focus,.btn-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(235,103,89,0.5);box-shadow:0 0 0 0.2rem rgba(235,103,89,0.5)}.btn-light{color:#222;background-color:#adb5bd;border-color:#adb5bd}.btn-light:hover{color:#fff;background-color:#98a2ac;border-color:#919ca6}.btn-light:focus,.btn-light.focus{color:#fff;background-color:#98a2ac;border-color:#919ca6;-webkit-box-shadow:0 0 0 0.2rem rgba(152,159,166,0.5);box-shadow:0 0 0 0.2rem rgba(152,159,166,0.5)}.btn-light.disabled,.btn-light:disabled{color:#222;background-color:#adb5bd;border-color:#adb5bd}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#fff;background-color:#919ca6;border-color:#8a95a1}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(152,159,166,0.5);box-shadow:0 0 0 0.2rem rgba(152,159,166,0.5)}.btn-dark{color:#fff;background-color:#303030;border-color:#303030}.btn-dark:hover{color:#fff;background-color:#1d1d1d;border-color:#171616}.btn-dark:focus,.btn-dark.focus{color:#fff;background-color:#1d1d1d;border-color:#171616;-webkit-box-shadow:0 0 0 0.2rem rgba(79,79,79,0.5);box-shadow:0 0 0 0.2rem rgba(79,79,79,0.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#303030;border-color:#303030}.btn-dark:not(:disabled):not(.disabled):active,.btn-dark:not(:disabled):not(.disabled).active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#171616;border-color:#101010}.btn-dark:not(:disabled):not(.disabled):active:focus,.btn-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(79,79,79,0.5);box-shadow:0 0 0 0.2rem rgba(79,79,79,0.5)}.btn-outline-primary{color:#375a7f;border-color:#375a7f}.btn-outline-primary:hover{color:#fff;background-color:#375a7f;border-color:#375a7f}.btn-outline-primary:focus,.btn-outline-primary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#375a7f;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#375a7f;border-color:#375a7f}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5)}.btn-outline-secondary{color:#444;border-color:#444}.btn-outline-secondary:hover{color:#fff;background-color:#444;border-color:#444}.btn-outline-secondary:focus,.btn-outline-secondary.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5);box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#444;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled):active,.btn-outline-secondary:not(:disabled):not(.disabled).active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#444;border-color:#444}.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5);box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5)}.btn-outline-success{color:#00bc8c;border-color:#00bc8c}.btn-outline-success:hover{color:#fff;background-color:#00bc8c;border-color:#00bc8c}.btn-outline-success:focus,.btn-outline-success.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00bc8c;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled):active,.btn-outline-success:not(:disabled):not(.disabled).active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#00bc8c;border-color:#00bc8c}.btn-outline-success:not(:disabled):not(.disabled):active:focus,.btn-outline-success:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5)}.btn-outline-info{color:#3498db;border-color:#3498db}.btn-outline-info:hover{color:#fff;background-color:#3498db;border-color:#3498db}.btn-outline-info:focus,.btn-outline-info.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5);box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#3498db;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled):active,.btn-outline-info:not(:disabled):not(.disabled).active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#3498db;border-color:#3498db}.btn-outline-info:not(:disabled):not(.disabled):active:focus,.btn-outline-info:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5);box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5)}.btn-outline-warning{color:#f39c12;border-color:#f39c12}.btn-outline-warning:hover{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-outline-warning:focus,.btn-outline-warning.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5);box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f39c12;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled):active,.btn-outline-warning:not(:disabled):not(.disabled).active,.show>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:#f39c12;border-color:#f39c12}.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5);box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5)}.btn-outline-danger{color:#e74c3c;border-color:#e74c3c}.btn-outline-danger:hover{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-outline-danger:focus,.btn-outline-danger.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#e74c3c;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled):active,.btn-outline-danger:not(:disabled):not(.disabled).active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#e74c3c;border-color:#e74c3c}.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5)}.btn-outline-light{color:#adb5bd;border-color:#adb5bd}.btn-outline-light:hover{color:#222;background-color:#adb5bd;border-color:#adb5bd}.btn-outline-light:focus,.btn-outline-light.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#adb5bd;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#222;background-color:#adb5bd;border-color:#adb5bd}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5)}.btn-outline-dark{color:#303030;border-color:#303030}.btn-outline-dark:hover{color:#fff;background-color:#303030;border-color:#303030}.btn-outline-dark:focus,.btn-outline-dark.focus{-webkit-box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5);box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#303030;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled):active,.btn-outline-dark:not(:disabled):not(.disabled).active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#303030;border-color:#303030}.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5);box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5)}.btn-link{font-weight:400;color:#00bc8c;text-decoration:none}.btn-link:hover{color:#007053;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#888;pointer-events:none}.btn-lg,.btn-group-lg>.btn{padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}.btn-sm,.btn-group-sm>.btn{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:0.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{-webkit-transition:opacity 0.15s linear;transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height 0.35s ease;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{-webkit-transition:none;transition:none}}.dropup,.dropright,.dropdown,.dropleft{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid;border-right:0.3em solid transparent;border-bottom:0;border-left:0.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:0.5rem 0;margin:0.125rem 0 0;font-size:0.9375rem;color:#fff;text-align:left;list-style:none;background-color:#222;background-clip:padding-box;border:1px solid #444;border-radius:0.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:0.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0;border-right:0.3em solid transparent;border-bottom:0.3em solid;border-left:0.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:0.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0;border-bottom:0.3em solid transparent;border-left:0.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:0.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:0.255em;vertical-align:0.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:0.255em;vertical-align:0.255em;content:"";border-top:0.3em solid transparent;border-right:0.3em solid;border-bottom:0.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^="top"],.dropdown-menu[x-placement^="right"],.dropdown-menu[x-placement^="bottom"],.dropdown-menu[x-placement^="left"]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:0.5rem 0;overflow:hidden;border-top:1px solid #444}.dropdown-item{display:block;width:100%;padding:0.25rem 1.5rem;clear:both;font-weight:400;color:#fff;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:#fff;text-decoration:none;background-color:#375a7f}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#375a7f}.dropdown-item.disabled,.dropdown-item:disabled{color:#888;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0.5rem 1.5rem;margin-bottom:0;font-size:0.8203125rem;color:#888;white-space:nowrap}.dropdown-item-text{display:block;padding:0.25rem 1.5rem;color:#fff}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:1}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:0.5625rem;padding-left:0.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:0.375rem;padding-left:0.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:0.75rem;padding-left:0.75rem}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type="radio"],.btn-group-toggle>.btn input[type="checkbox"],.btn-group-toggle>.btn-group>.btn input[type="radio"],.btn-group-toggle>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-control-plaintext,.input-group>.custom-select,.input-group>.custom-file{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.form-control+.form-control,.input-group>.form-control+.custom-select,.input-group>.form-control+.custom-file,.input-group>.form-control-plaintext+.form-control,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.custom-file,.input-group>.custom-select+.form-control,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.custom-file,.input-group>.custom-file+.form-control,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.custom-file{margin-left:-1px}.input-group>.form-control:focus,.input-group>.custom-select:focus,.input-group>.custom-file .custom-file-input:focus ~ .custom-file-label{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.form-control:not(:last-child),.input-group>.custom-select:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-control:not(:first-child),.input-group>.custom-select:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-prepend,.input-group-append{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-prepend .btn,.input-group-append .btn{position:relative;z-index:2}.input-group-prepend .btn:focus,.input-group-append .btn:focus{z-index:3}.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.input-group-text,.input-group-append .input-group-text+.btn{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.375rem 0.75rem;margin-bottom:0;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#adb5bd;text-align:center;white-space:nowrap;background-color:#444;border:1px solid #222;border-radius:0.25rem}.input-group-text input[type="radio"],.input-group-text input[type="checkbox"]{margin-top:0}.input-group-lg>.form-control:not(textarea),.input-group-lg>.custom-select{height:calc(1.5em + 1rem + 2px)}.input-group-lg>.form-control,.input-group-lg>.custom-select,.input-group-lg>.input-group-prepend>.input-group-text,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-append>.btn{padding:0.5rem 1rem;font-size:1.171875rem;line-height:1.5;border-radius:0.3rem}.input-group-sm>.form-control:not(textarea),.input-group-sm>.custom-select{height:calc(1.5em + 0.5rem + 2px)}.input-group-sm>.form-control,.input-group-sm>.custom-select,.input-group-sm>.input-group-prepend>.input-group-text,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-append>.btn{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5;border-radius:0.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text,.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.40625rem;padding-left:1.5rem}.custom-control-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.203125rem;opacity:0}.custom-control-input:checked ~ .custom-control-label::before{color:#fff;border-color:#375a7f;background-color:#375a7f}.custom-control-input:focus ~ .custom-control-label::before{-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{border-color:#739ac2}.custom-control-input:not(:disabled):active ~ .custom-control-label::before{color:#fff;background-color:#97b3d2;border-color:#97b3d2}.custom-control-input[disabled] ~ .custom-control-label,.custom-control-input:disabled ~ .custom-control-label{color:#888}.custom-control-input[disabled] ~ .custom-control-label::before,.custom-control-input:disabled ~ .custom-control-label::before{background-color:#ebebeb}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:0.203125rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50% / 50% 50%}.custom-checkbox .custom-control-label::before{border-radius:0.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{border-color:#375a7f;background-color:#375a7f}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(55,90,127,0.5)}.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{background-color:rgba(55,90,127,0.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(55,90,127,0.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:0.5rem}.custom-switch .custom-control-label::after{top:calc(0.203125rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:0.5rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-switch .custom-control-label::after{-webkit-transition:none;transition:none}}.custom-switch .custom-control-input:checked ~ .custom-control-label::after{background-color:#fff;-webkit-transform:translateX(0.75rem);transform:translateX(0.75rem)}.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{background-color:rgba(55,90,127,0.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 1.75rem 0.375rem 0.75rem;font-size:0.9375rem;font-weight:400;line-height:1.5;color:#444;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23303030' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px;border:1px solid #222;border-radius:0.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#739ac2;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-select:focus::-ms-value{color:#444;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:0.75rem;background-image:none}.custom-select:disabled{color:#888;background-color:#ebebeb}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #444}.custom-select-sm{height:calc(1.5em + 0.5rem + 2px);padding-top:0.25rem;padding-bottom:0.25rem;padding-left:0.5rem;font-size:0.8203125rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:0.5rem;padding-bottom:0.5rem;padding-left:1rem;font-size:1.171875rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + 0.75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + 0.75rem + 2px);margin:0;opacity:0}.custom-file-input:focus ~ .custom-file-label{border-color:#739ac2;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-file-input[disabled] ~ .custom-file-label,.custom-file-input:disabled ~ .custom-file-label{background-color:#ebebeb}.custom-file-input:lang(en) ~ .custom-file-label::after{content:"Browse"}.custom-file-input ~ .custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + 0.75rem + 2px);padding:0.375rem 0.75rem;font-weight:400;line-height:1.5;color:#adb5bd;background-color:#fff;border:1px solid #222;border-radius:0.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + 0.75rem);padding:0.375rem 0.75rem;line-height:1.5;color:#adb5bd;content:"Browse";background-color:#444;border-left:inherit;border-radius:0 0.25rem 0.25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 1px #222,0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 1px #222,0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #222,0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #222,0 0 0 0.2rem rgba(55,90,127,0.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#375a7f;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#97b3d2}.custom-range::-webkit-slider-runnable-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#375a7f;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-moz-range-thumb{-webkit-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#97b3d2}.custom-range::-moz-range-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:0.2rem;margin-left:0.2rem;background-color:#375a7f;border:0;border-radius:1rem;-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;appearance:none}@media (prefers-reduced-motion: reduce){.custom-range::-ms-thumb{-webkit-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#97b3d2}.custom-range::-ms-track{width:100%;height:0.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:0.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.custom-control-label::before,.custom-file-label,.custom-select{-webkit-transition:none;transition:none}}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:0.5rem 2rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#adb5bd;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #444}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:0.25rem;border-top-right-radius:0.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#444 #444 transparent}.nav-tabs .nav-link.disabled{color:#adb5bd;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#fff;background-color:#222;border-color:#444 #444 transparent}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:0.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#375a7f}.nav-fill>.nav-link,.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:0.32421875rem;padding-bottom:0.32421875rem;margin-right:1rem;font-size:1.171875rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:0.5rem;padding-bottom:0.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:0.25rem 0.75rem;font-size:1.171875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 576px){.navbar-expand-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 768px){.navbar-expand-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 992px){.navbar-expand-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width: 1200px){.navbar-expand-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0.5rem;padding-left:0.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:#222}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#222}.navbar-light .navbar-nav .nav-link{color:rgba(34,34,34,0.7)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#222}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:#222}.navbar-light .navbar-toggler{color:rgba(34,34,34,0.7);border-color:rgba(34,34,34,0.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2834, 34, 34, 0.7%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(34,34,34,0.7)}.navbar-light .navbar-text a{color:#222}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#222}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.6)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:#fff}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,0.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,0.6);border-color:rgba(255,255,255,0.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.6%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,0.6)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#303030;background-clip:border-box;border:1px solid rgba(0,0,0,0.125);border-radius:0.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:0.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:0.75rem 1.25rem;margin-bottom:0;background-color:#444;border-bottom:1px solid rgba(0,0,0,0.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:0.75rem 1.25rem;background-color:#444;border-top:1px solid rgba(0,0,0,0.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{-ms-flex-negative:0;flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width: 576px){.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width: 576px){.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:0.75rem}@media (min-width: 576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#444;border-radius:0.25rem}.breadcrumb-item{display:-webkit-box;display:-ms-flexbox;display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:0.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:0.5rem;color:#888;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#888}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:0.25rem}.page-link{position:relative;display:block;padding:0.5rem 0.75rem;margin-left:0;line-height:1.25;color:#fff;background-color:#00bc8c;border:0 solid transparent}.page-link:hover{z-index:2;color:#fff;text-decoration:none;background-color:#00efb2;border-color:transparent}.page-link:focus{z-index:3;outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:0.25rem;border-bottom-left-radius:0.25rem}.page-item:last-child .page-link{border-top-right-radius:0.25rem;border-bottom-right-radius:0.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#00efb2;border-color:transparent}.page-item.disabled .page-link{color:#fff;pointer-events:none;cursor:auto;background-color:#007053;border-color:transparent}.pagination-lg .page-link{padding:0.75rem 1.5rem;font-size:1.171875rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:0.3rem;border-bottom-left-radius:0.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:0.3rem;border-bottom-right-radius:0.3rem}.pagination-sm .page-link{padding:0.25rem 0.5rem;font-size:0.8203125rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:0.2rem;border-bottom-left-radius:0.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:0.2rem;border-bottom-right-radius:0.2rem}.badge{display:inline-block;padding:0.25em 0.4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0.25rem;-webkit-transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;transition:color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.badge{-webkit-transition:none;transition:none}}a.badge:hover,a.badge:focus{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:0.6em;padding-left:0.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#375a7f}a.badge-primary:hover,a.badge-primary:focus{color:#fff;background-color:#28415b}a.badge-primary:focus,a.badge-primary.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5);box-shadow:0 0 0 0.2rem rgba(55,90,127,0.5)}.badge-secondary{color:#fff;background-color:#444}a.badge-secondary:hover,a.badge-secondary:focus{color:#fff;background-color:#2b2a2a}a.badge-secondary:focus,a.badge-secondary.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5);box-shadow:0 0 0 0.2rem rgba(68,68,68,0.5)}.badge-success{color:#fff;background-color:#00bc8c}a.badge-success:hover,a.badge-success:focus{color:#fff;background-color:#008966}a.badge-success:focus,a.badge-success.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5);box-shadow:0 0 0 0.2rem rgba(0,188,140,0.5)}.badge-info{color:#fff;background-color:#3498db}a.badge-info:hover,a.badge-info:focus{color:#fff;background-color:#217dbb}a.badge-info:focus,a.badge-info.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5);box-shadow:0 0 0 0.2rem rgba(52,152,219,0.5)}.badge-warning{color:#fff;background-color:#f39c12}a.badge-warning:hover,a.badge-warning:focus{color:#fff;background-color:#c87f0a}a.badge-warning:focus,a.badge-warning.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5);box-shadow:0 0 0 0.2rem rgba(243,156,18,0.5)}.badge-danger{color:#fff;background-color:#e74c3c}a.badge-danger:hover,a.badge-danger:focus{color:#fff;background-color:#d62c1a}a.badge-danger:focus,a.badge-danger.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5);box-shadow:0 0 0 0.2rem rgba(231,76,60,0.5)}.badge-light{color:#222;background-color:#adb5bd}a.badge-light:hover,a.badge-light:focus{color:#222;background-color:#919ca6}a.badge-light:focus,a.badge-light.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5);box-shadow:0 0 0 0.2rem rgba(173,181,189,0.5)}.badge-dark{color:#fff;background-color:#303030}a.badge-dark:hover,a.badge-dark:focus{color:#fff;background-color:#171616}a.badge-dark:focus,a.badge-dark.focus{outline:0;-webkit-box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5);box-shadow:0 0 0 0.2rem rgba(48,48,48,0.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#303030;border-radius:0.3rem}@media (min-width: 576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:0.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:0.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.90625rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:0.75rem 1.25rem;color:inherit}.alert-primary{color:#1d2f42;background-color:#d7dee5;border-color:#c7d1db}.alert-primary hr{border-top-color:#b7c4d1}.alert-primary .alert-link{color:#0d161f}.alert-secondary{color:#232323;background-color:#dadada;border-color:#cbcbcb}.alert-secondary hr{border-top-color:#bebebe}.alert-secondary .alert-link{color:#0a0909}.alert-success{color:#006249;background-color:#ccf2e8;border-color:#b8ecdf}.alert-success hr{border-top-color:#a4e7d6}.alert-success .alert-link{color:#002f23}.alert-info{color:#1b4f72;background-color:#d6eaf8;border-color:#c6e2f5}.alert-info hr{border-top-color:#b0d7f1}.alert-info .alert-link{color:#113249}.alert-warning{color:#7e5109;background-color:#fdebd0;border-color:#fce3bd}.alert-warning hr{border-top-color:#fbd9a5}.alert-warning .alert-link{color:#4e3206}.alert-danger{color:#78281f;background-color:#fadbd8;border-color:#f8cdc8}.alert-danger hr{border-top-color:#f5b8b1}.alert-danger .alert-link{color:#4f1a15}.alert-light{color:#5a5e62;background-color:#eff0f2;border-color:#e8eaed}.alert-light hr{border-top-color:#dadde2}.alert-light .alert-link{color:#424547}.alert-dark{color:#191919;background-color:#d6d6d6;border-color:#c5c5c5}.alert-dark hr{border-top-color:#b8b8b8}.alert-dark .alert-link{color:black}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-webkit-box;display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;line-height:0;font-size:0.703125rem;background-color:#444;border-radius:0.25rem}.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#375a7f;-webkit-transition:width 0.6s ease;transition:width 0.6s ease}@media (prefers-reduced-motion: reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion: reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:0.25rem}.list-group-item-action{width:100%;color:#444;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#444;text-decoration:none;background-color:#444}.list-group-item-action:active{color:#fff;background-color:#ebebeb}.list-group-item{position:relative;display:block;padding:0.75rem 1.25rem;background-color:#303030;border:1px solid #444}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#888;pointer-events:none;background-color:#303030}.list-group-item.active{z-index:2;color:#fff;background-color:#375a7f;border-color:#375a7f}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width: 576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width: 1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:0.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:0.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#1d2f42;background-color:#c7d1db}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#1d2f42;background-color:#b7c4d1}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1d2f42;border-color:#1d2f42}.list-group-item-secondary{color:#232323;background-color:#cbcbcb}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#232323;background-color:#bebebe}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#232323;border-color:#232323}.list-group-item-success{color:#006249;background-color:#b8ecdf}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#006249;background-color:#a4e7d6}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006249;border-color:#006249}.list-group-item-info{color:#1b4f72;background-color:#c6e2f5}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#1b4f72;background-color:#b0d7f1}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#1b4f72;border-color:#1b4f72}.list-group-item-warning{color:#7e5109;background-color:#fce3bd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#7e5109;background-color:#fbd9a5}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7e5109;border-color:#7e5109}.list-group-item-danger{color:#78281f;background-color:#f8cdc8}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#78281f;background-color:#f5b8b1}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#78281f;border-color:#78281f}.list-group-item-light{color:#5a5e62;background-color:#e8eaed}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#5a5e62;background-color:#dadde2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#5a5e62;border-color:#5a5e62}.list-group-item-dark{color:#191919;background-color:#c5c5c5}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#191919;background-color:#b8b8b8}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#191919;border-color:#191919}.close{float:right;font-size:1.40625rem;font-weight:700;line-height:1;color:#fff;text-shadow:none;opacity:.5}.close:hover{color:#fff;text-decoration:none}.close:not(:disabled):not(.disabled):hover,.close:not(:disabled):not(.disabled):focus{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{-ms-flex-preferred-size:350px;flex-basis:350px;max-width:350px;font-size:0.875rem;background-color:#444;background-clip:padding-box;border:1px solid rgba(0,0,0,0.1);-webkit-box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);box-shadow:0 0.25rem 0.75rem rgba(0,0,0,0.1);opacity:0;border-radius:0.25rem}.toast:not(:last-child){margin-bottom:0.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.25rem 0.75rem;color:#888;background-color:#303030;background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,0.05);border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.toast-body{padding:0.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:0.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform 0.3s ease-out;transition:-webkit-transform 0.3s ease-out;transition:transform 0.3s ease-out;transition:transform 0.3s ease-out, -webkit-transform 0.3s ease-out;-webkit-transform:translate(0, -50px);transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal.modal-static .modal-dialog{-webkit-transform:scale(1.02);transform:scale(1.02)}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-header,.modal-dialog-scrollable .modal-footer{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:-webkit-min-content;height:-moz-min-content;height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#303030;background-clip:padding-box;border:1px solid #444;border-radius:0.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:0.5}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #444;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:0.75rem;border-top:1px solid #444;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:0.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:-webkit-min-content;height:-moz-min-content;height:min-content}.modal-sm{max-width:300px}}@media (min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width: 1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:0.9}.tooltip .arrow{position:absolute;display:block;width:0.8rem;height:0.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^="top"]{padding:0.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^="top"] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^="top"] .arrow::before{top:0;border-width:0.4rem 0.4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^="right"]{padding:0 0.4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^="right"] .arrow{left:0;width:0.4rem;height:0.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^="right"] .arrow::before{right:0;border-width:0.4rem 0.4rem 0.4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^="bottom"]{padding:0.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^="bottom"] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^="bottom"] .arrow::before{bottom:0;border-width:0 0.4rem 0.4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^="left"]{padding:0 0.4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^="left"] .arrow{right:0;width:0.4rem;height:0.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^="left"] .arrow::before{left:0;border-width:0.4rem 0 0.4rem 0.4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:0.25rem 0.5rem;color:#fff;text-align:center;background-color:#000;border-radius:0.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Lato", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.8203125rem;word-wrap:break-word;background-color:#303030;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:0.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:0.5rem;margin:0 0.3rem}.popover .arrow::before,.popover .arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-top,.bs-popover-auto[x-placement^="top"]{margin-bottom:0.5rem}.bs-popover-top>.arrow,.bs-popover-auto[x-placement^="top"]>.arrow{bottom:calc(-0.5rem - 1px)}.bs-popover-top>.arrow::before,.bs-popover-auto[x-placement^="top"]>.arrow::before{bottom:0;border-width:0.5rem 0.5rem 0;border-top-color:rgba(0,0,0,0.25)}.bs-popover-top>.arrow::after,.bs-popover-auto[x-placement^="top"]>.arrow::after{bottom:1px;border-width:0.5rem 0.5rem 0;border-top-color:#303030}.bs-popover-right,.bs-popover-auto[x-placement^="right"]{margin-left:0.5rem}.bs-popover-right>.arrow,.bs-popover-auto[x-placement^="right"]>.arrow{left:calc(-0.5rem - 1px);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-right>.arrow::before,.bs-popover-auto[x-placement^="right"]>.arrow::before{left:0;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:rgba(0,0,0,0.25)}.bs-popover-right>.arrow::after,.bs-popover-auto[x-placement^="right"]>.arrow::after{left:1px;border-width:0.5rem 0.5rem 0.5rem 0;border-right-color:#303030}.bs-popover-bottom,.bs-popover-auto[x-placement^="bottom"]{margin-top:0.5rem}.bs-popover-bottom>.arrow,.bs-popover-auto[x-placement^="bottom"]>.arrow{top:calc(-0.5rem - 1px)}.bs-popover-bottom>.arrow::before,.bs-popover-auto[x-placement^="bottom"]>.arrow::before{top:0;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:rgba(0,0,0,0.25)}.bs-popover-bottom>.arrow::after,.bs-popover-auto[x-placement^="bottom"]>.arrow::after{top:1px;border-width:0 0.5rem 0.5rem 0.5rem;border-bottom-color:#303030}.bs-popover-bottom .popover-header::before,.bs-popover-auto[x-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-0.5rem;content:"";border-bottom:1px solid #444}.bs-popover-left,.bs-popover-auto[x-placement^="left"]{margin-right:0.5rem}.bs-popover-left>.arrow,.bs-popover-auto[x-placement^="left"]>.arrow{right:calc(-0.5rem - 1px);width:0.5rem;height:1rem;margin:0.3rem 0}.bs-popover-left>.arrow::before,.bs-popover-auto[x-placement^="left"]>.arrow::before{right:0;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:rgba(0,0,0,0.25)}.bs-popover-left>.arrow::after,.bs-popover-auto[x-placement^="left"]>.arrow::after{right:1px;border-width:0.5rem 0 0.5rem 0.5rem;border-left-color:#303030}.popover-header{padding:0.5rem 0.75rem;margin-bottom:0;font-size:0.9375rem;background-color:#444;border-bottom:1px solid #373737;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:0.5rem 0.75rem;color:#fff}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform 0.6s ease-in-out;transition:-webkit-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-left),.active.carousel-item-right{-webkit-transform:translateX(100%);transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-right),.active.carousel-item-left{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s 0.6s;transition:opacity 0s 0.6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:0.5;-webkit-transition:opacity 0.15s ease;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{-webkit-transition:none;transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:0.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50% / 100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity 0.6s ease;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:0.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:0.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1;-webkit-transform:none;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#375a7f !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#28415b !important}.bg-secondary{background-color:#444 !important}a.bg-secondary:hover,a.bg-secondary:focus,button.bg-secondary:hover,button.bg-secondary:focus{background-color:#2b2a2a !important}.bg-success{background-color:#00bc8c !important}a.bg-success:hover,a.bg-success:focus,button.bg-success:hover,button.bg-success:focus{background-color:#008966 !important}.bg-info{background-color:#3498db !important}a.bg-info:hover,a.bg-info:focus,button.bg-info:hover,button.bg-info:focus{background-color:#217dbb !important}.bg-warning{background-color:#f39c12 !important}a.bg-warning:hover,a.bg-warning:focus,button.bg-warning:hover,button.bg-warning:focus{background-color:#c87f0a !important}.bg-danger{background-color:#e74c3c !important}a.bg-danger:hover,a.bg-danger:focus,button.bg-danger:hover,button.bg-danger:focus{background-color:#d62c1a !important}.bg-light{background-color:#adb5bd !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#919ca6 !important}.bg-dark{background-color:#303030 !important}a.bg-dark:hover,a.bg-dark:focus,button.bg-dark:hover,button.bg-dark:focus{background-color:#171616 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#375a7f !important}.border-secondary{border-color:#444 !important}.border-success{border-color:#00bc8c !important}.border-info{border-color:#3498db !important}.border-warning{border-color:#f39c12 !important}.border-danger{border-color:#e74c3c !important}.border-light{border-color:#adb5bd !important}.border-dark{border-color:#303030 !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:0.2rem !important}.rounded{border-radius:0.25rem !important}.rounded-top{border-top-left-radius:0.25rem !important;border-top-right-radius:0.25rem !important}.rounded-right{border-top-right-radius:0.25rem !important;border-bottom-right-radius:0.25rem !important}.rounded-bottom{border-bottom-right-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-left{border-top-left-radius:0.25rem !important;border-bottom-left-radius:0.25rem !important}.rounded-lg{border-radius:0.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}@media (min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-sm-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-md-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-lg-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media (min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-xl-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important}.d-print-inline-flex{display:-webkit-inline-box !important;display:-ms-inline-flexbox !important;display:inline-flex !important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.8571428571%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}@media (min-width: 576px){.flex-sm-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-sm-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-sm-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-sm-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-sm-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-sm-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-sm-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-sm-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-sm-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-sm-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-sm-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-sm-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-sm-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-sm-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-sm-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-sm-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-sm-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-sm-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-sm-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-sm-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-sm-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-sm-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-sm-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-sm-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-sm-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-sm-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-sm-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-sm-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-sm-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-sm-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-sm-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-sm-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-sm-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 768px){.flex-md-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-md-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-md-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-md-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-md-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-md-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-md-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-md-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-md-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-md-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-md-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-md-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-md-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-md-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-md-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-md-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-md-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-md-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-md-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-md-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-md-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-md-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-md-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-md-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-md-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-md-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-md-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-md-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-md-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-md-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-md-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-md-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-md-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 992px){.flex-lg-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-lg-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-lg-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-lg-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-lg-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-lg-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-lg-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-lg-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-lg-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-lg-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-lg-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-lg-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-lg-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-lg-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-lg-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-lg-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-lg-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-lg-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-lg-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-lg-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-lg-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-lg-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-lg-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-lg-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-lg-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-lg-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-lg-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-lg-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-lg-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-lg-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-lg-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-lg-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-lg-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}@media (min-width: 1200px){.flex-xl-row{-webkit-box-orient:horizontal !important;-webkit-box-direction:normal !important;-ms-flex-direction:row !important;flex-direction:row !important}.flex-xl-column{-webkit-box-orient:vertical !important;-webkit-box-direction:normal !important;-ms-flex-direction:column !important;flex-direction:column !important}.flex-xl-row-reverse{-webkit-box-orient:horizontal !important;-webkit-box-direction:reverse !important;-ms-flex-direction:row-reverse !important;flex-direction:row-reverse !important}.flex-xl-column-reverse{-webkit-box-orient:vertical !important;-webkit-box-direction:reverse !important;-ms-flex-direction:column-reverse !important;flex-direction:column-reverse !important}.flex-xl-wrap{-ms-flex-wrap:wrap !important;flex-wrap:wrap !important}.flex-xl-nowrap{-ms-flex-wrap:nowrap !important;flex-wrap:nowrap !important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse !important;flex-wrap:wrap-reverse !important}.flex-xl-fill{-webkit-box-flex:1 !important;-ms-flex:1 1 auto !important;flex:1 1 auto !important}.flex-xl-grow-0{-webkit-box-flex:0 !important;-ms-flex-positive:0 !important;flex-grow:0 !important}.flex-xl-grow-1{-webkit-box-flex:1 !important;-ms-flex-positive:1 !important;flex-grow:1 !important}.flex-xl-shrink-0{-ms-flex-negative:0 !important;flex-shrink:0 !important}.flex-xl-shrink-1{-ms-flex-negative:1 !important;flex-shrink:1 !important}.justify-content-xl-start{-webkit-box-pack:start !important;-ms-flex-pack:start !important;justify-content:flex-start !important}.justify-content-xl-end{-webkit-box-pack:end !important;-ms-flex-pack:end !important;justify-content:flex-end !important}.justify-content-xl-center{-webkit-box-pack:center !important;-ms-flex-pack:center !important;justify-content:center !important}.justify-content-xl-between{-webkit-box-pack:justify !important;-ms-flex-pack:justify !important;justify-content:space-between !important}.justify-content-xl-around{-ms-flex-pack:distribute !important;justify-content:space-around !important}.align-items-xl-start{-webkit-box-align:start !important;-ms-flex-align:start !important;align-items:flex-start !important}.align-items-xl-end{-webkit-box-align:end !important;-ms-flex-align:end !important;align-items:flex-end !important}.align-items-xl-center{-webkit-box-align:center !important;-ms-flex-align:center !important;align-items:center !important}.align-items-xl-baseline{-webkit-box-align:baseline !important;-ms-flex-align:baseline !important;align-items:baseline !important}.align-items-xl-stretch{-webkit-box-align:stretch !important;-ms-flex-align:stretch !important;align-items:stretch !important}.align-content-xl-start{-ms-flex-line-pack:start !important;align-content:flex-start !important}.align-content-xl-end{-ms-flex-line-pack:end !important;align-content:flex-end !important}.align-content-xl-center{-ms-flex-line-pack:center !important;align-content:center !important}.align-content-xl-between{-ms-flex-line-pack:justify !important;align-content:space-between !important}.align-content-xl-around{-ms-flex-line-pack:distribute !important;align-content:space-around !important}.align-content-xl-stretch{-ms-flex-line-pack:stretch !important;align-content:stretch !important}.align-self-xl-auto{-ms-flex-item-align:auto !important;align-self:auto !important}.align-self-xl-start{-ms-flex-item-align:start !important;align-self:flex-start !important}.align-self-xl-end{-ms-flex-item-align:end !important;align-self:flex-end !important}.align-self-xl-center{-ms-flex-item-align:center !important;align-self:center !important}.align-self-xl-baseline{-ms-flex-item-align:baseline !important;align-self:baseline !important}.align-self-xl-stretch{-ms-flex-item-align:stretch !important;align-self:stretch !important}}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 576px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 992px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1200px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;-ms-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;-ms-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;-ms-user-select:none !important;user-select:none !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position: -webkit-sticky) or (position: sticky){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important;box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow{-webkit-box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important;box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important;box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{-webkit-box-shadow:none !important;box-shadow:none !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mw-100{max-width:100% !important}.mh-100{max-height:100% !important}.min-vw-100{min-width:100vw !important}.min-vh-100{min-height:100vh !important}.vw-100{width:100vw !important}.vh-100{height:100vh !important}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:0.25rem !important}.mt-1,.my-1{margin-top:0.25rem !important}.mr-1,.mx-1{margin-right:0.25rem !important}.mb-1,.my-1{margin-bottom:0.25rem !important}.ml-1,.mx-1{margin-left:0.25rem !important}.m-2{margin:0.5rem !important}.mt-2,.my-2{margin-top:0.5rem !important}.mr-2,.mx-2{margin-right:0.5rem !important}.mb-2,.my-2{margin-bottom:0.5rem !important}.ml-2,.mx-2{margin-left:0.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:0.25rem !important}.pt-1,.py-1{padding-top:0.25rem !important}.pr-1,.px-1{padding-right:0.25rem !important}.pb-1,.py-1{padding-bottom:0.25rem !important}.pl-1,.px-1{padding-left:0.25rem !important}.p-2{padding:0.5rem !important}.pt-2,.py-2{padding-top:0.5rem !important}.pr-2,.px-2{padding-right:0.5rem !important}.pb-2,.py-2{padding-bottom:0.5rem !important}.pl-2,.px-2{padding-left:0.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-0.25rem !important}.mt-n1,.my-n1{margin-top:-0.25rem !important}.mr-n1,.mx-n1{margin-right:-0.25rem !important}.mb-n1,.my-n1{margin-bottom:-0.25rem !important}.ml-n1,.mx-n1{margin-left:-0.25rem !important}.m-n2{margin:-0.5rem !important}.mt-n2,.my-n2{margin-top:-0.5rem !important}.mr-n2,.mx-n2{margin-right:-0.5rem !important}.mb-n2,.my-n2{margin-bottom:-0.5rem !important}.ml-n2,.mx-n2{margin-left:-0.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media (min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:0.25rem !important}.mt-sm-1,.my-sm-1{margin-top:0.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:0.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:0.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:0.25rem !important}.m-sm-2{margin:0.5rem !important}.mt-sm-2,.my-sm-2{margin-top:0.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:0.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:0.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:0.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:0.25rem !important}.pt-sm-1,.py-sm-1{padding-top:0.25rem !important}.pr-sm-1,.px-sm-1{padding-right:0.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:0.25rem !important}.pl-sm-1,.px-sm-1{padding-left:0.25rem !important}.p-sm-2{padding:0.5rem !important}.pt-sm-2,.py-sm-2{padding-top:0.5rem !important}.pr-sm-2,.px-sm-2{padding-right:0.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:0.5rem !important}.pl-sm-2,.px-sm-2{padding-left:0.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-0.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important}.m-sm-n2{margin:-0.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:0.25rem !important}.mt-md-1,.my-md-1{margin-top:0.25rem !important}.mr-md-1,.mx-md-1{margin-right:0.25rem !important}.mb-md-1,.my-md-1{margin-bottom:0.25rem !important}.ml-md-1,.mx-md-1{margin-left:0.25rem !important}.m-md-2{margin:0.5rem !important}.mt-md-2,.my-md-2{margin-top:0.5rem !important}.mr-md-2,.mx-md-2{margin-right:0.5rem !important}.mb-md-2,.my-md-2{margin-bottom:0.5rem !important}.ml-md-2,.mx-md-2{margin-left:0.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:0.25rem !important}.pt-md-1,.py-md-1{padding-top:0.25rem !important}.pr-md-1,.px-md-1{padding-right:0.25rem !important}.pb-md-1,.py-md-1{padding-bottom:0.25rem !important}.pl-md-1,.px-md-1{padding-left:0.25rem !important}.p-md-2{padding:0.5rem !important}.pt-md-2,.py-md-2{padding-top:0.5rem !important}.pr-md-2,.px-md-2{padding-right:0.5rem !important}.pb-md-2,.py-md-2{padding-bottom:0.5rem !important}.pl-md-2,.px-md-2{padding-left:0.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-0.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-0.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important}.m-md-n2{margin:-0.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-0.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media (min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:0.25rem !important}.mt-lg-1,.my-lg-1{margin-top:0.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:0.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:0.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:0.25rem !important}.m-lg-2{margin:0.5rem !important}.mt-lg-2,.my-lg-2{margin-top:0.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:0.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:0.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:0.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:0.25rem !important}.pt-lg-1,.py-lg-1{padding-top:0.25rem !important}.pr-lg-1,.px-lg-1{padding-right:0.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:0.25rem !important}.pl-lg-1,.px-lg-1{padding-left:0.25rem !important}.p-lg-2{padding:0.5rem !important}.pt-lg-2,.py-lg-2{padding-top:0.5rem !important}.pr-lg-2,.px-lg-2{padding-right:0.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:0.5rem !important}.pl-lg-2,.px-lg-2{padding-left:0.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-0.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important}.m-lg-n2{margin:-0.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media (min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:0.25rem !important}.mt-xl-1,.my-xl-1{margin-top:0.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:0.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:0.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:0.25rem !important}.m-xl-2{margin:0.5rem !important}.mt-xl-2,.my-xl-2{margin-top:0.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:0.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:0.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:0.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:0.25rem !important}.pt-xl-1,.py-xl-1{padding-top:0.25rem !important}.pr-xl-1,.px-xl-1{padding-right:0.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:0.25rem !important}.pl-xl-1,.px-xl-1{padding-left:0.25rem !important}.p-xl-2{padding:0.5rem !important}.pt-xl-2,.py-xl-2{padding-top:0.5rem !important}.pr-xl-2,.px-xl-2{padding-right:0.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:0.5rem !important}.pl-xl-2,.px-xl-2{padding-left:0.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-0.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important}.m-xl-n2{margin:-0.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important}.text-justify{text-align:justify !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left !important}.text-right{text-align:right !important}.text-center{text-align:center !important}@media (min-width: 576px){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-light{font-weight:300 !important}.font-weight-lighter{font-weight:lighter !important}.font-weight-normal{font-weight:400 !important}.font-weight-bold{font-weight:700 !important}.font-weight-bolder{font-weight:bolder !important}.font-italic{font-style:italic !important}.text-white{color:#fff !important}.text-primary{color:#375a7f !important}a.text-primary:hover,a.text-primary:focus{color:#20344a !important}.text-secondary{color:#444 !important}a.text-secondary:hover,a.text-secondary:focus{color:#1e1e1e !important}.text-success{color:#00bc8c !important}a.text-success:hover,a.text-success:focus{color:#007053 !important}.text-info{color:#3498db !important}a.text-info:hover,a.text-info:focus{color:#1d6fa5 !important}.text-warning{color:#f39c12 !important}a.text-warning:hover,a.text-warning:focus{color:#b06f09 !important}.text-danger{color:#e74c3c !important}a.text-danger:hover,a.text-danger:focus{color:#bf2718 !important}.text-light{color:#adb5bd !important}a.text-light:hover,a.text-light:focus{color:#838f9b !important}.text-dark{color:#303030 !important}a.text-dark:hover,a.text-dark:focus{color:#0a0a0a !important}.text-body{color:#fff !important}.text-muted{color:#888 !important}.text-black-50{color:rgba(0,0,0,0.5) !important}.text-white-50{color:rgba(255,255,255,0.5) !important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none !important}.text-break{word-break:break-word !important;overflow-wrap:break-word !important}.text-reset{color:inherit !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media print{*,*::before,*::after{text-shadow:none !important;-webkit-box-shadow:none !important;box-shadow:none !important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap !important}pre,blockquote{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px !important}.container{min-width:992px !important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #dee2e6 !important}.table-dark{color:inherit}.table-dark th,.table-dark td,.table-dark thead th,.table-dark tbody+tbody{border-color:#444}.table .thead-dark th{color:inherit;border-color:#444}}.blockquote-footer{color:#888}.table-primary,.table-primary>th,.table-primary>td{background-color:#375a7f}.table-secondary,.table-secondary>th,.table-secondary>td{background-color:#444}.table-light,.table-light>th,.table-light>td{background-color:#adb5bd}.table-dark,.table-dark>th,.table-dark>td{background-color:#303030}.table-success,.table-success>th,.table-success>td{background-color:#00bc8c}.table-info,.table-info>th,.table-info>td{background-color:#3498db}.table-danger,.table-danger>th,.table-danger>td{background-color:#e74c3c}.table-warning,.table-warning>th,.table-warning>td{background-color:#f39c12}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-primary:hover,.table-hover .table-primary:hover>th,.table-hover .table-primary:hover>td{background-color:#2f4d6d}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>th,.table-hover .table-secondary:hover>td{background-color:#373737}.table-hover .table-light:hover,.table-hover .table-light:hover>th,.table-hover .table-light:hover>td{background-color:#9fa8b2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>th,.table-hover .table-dark:hover>td{background-color:#232323}.table-hover .table-success:hover,.table-hover .table-success:hover>th,.table-hover .table-success:hover>td{background-color:#00a379}.table-hover .table-info:hover,.table-hover .table-info:hover>th,.table-hover .table-info:hover>td{background-color:#258cd1}.table-hover .table-danger:hover,.table-hover .table-danger:hover>th,.table-hover .table-danger:hover>td{background-color:#e43725}.table-hover .table-warning:hover,.table-hover .table-warning:hover>th,.table-hover .table-warning:hover>td{background-color:#e08e0b}.table-hover .table-active:hover,.table-hover .table-active:hover>th,.table-hover .table-active:hover>td{background-color:rgba(0,0,0,0.075)}.input-group-addon{color:#fff}.nav-tabs .nav-link,.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover,.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover,.nav-pills .nav-link,.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover,.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover{color:#fff}.breadcrumb a{color:#fff}.pagination a:hover{text-decoration:none}.close{opacity:0.4}.close:hover,.close:focus{opacity:1}.alert{border:none;color:#fff}.alert a,.alert .alert-link{color:#fff;text-decoration:underline}.alert-primary{background-color:#375a7f}.alert-secondary{background-color:#444}.alert-success{background-color:#00bc8c}.alert-info{background-color:#3498db}.alert-warning{background-color:#f39c12}.alert-danger{background-color:#e74c3c}.alert-light{background-color:#adb5bd}.alert-dark{background-color:#303030}.list-group-item-action{color:#fff}.list-group-item-action:hover,.list-group-item-action:focus{background-color:#444;color:#fff}.list-group-item-action .list-group-item-heading{color:#fff} diff --git a/components/wifi-manager/res/bootstrap.css.gz b/components/wifi-manager/res/bootstrap.css.gz deleted file mode 100644 index ed2be85a..00000000 Binary files a/components/wifi-manager/res/bootstrap.css.gz and /dev/null differ diff --git a/components/wifi-manager/res/bootstrap.css.map b/components/wifi-manager/res/bootstrap.css.map deleted file mode 100644 index 3c23c178..00000000 --- a/components/wifi-manager/res/bootstrap.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../scss/bootstrap.scss","../../scss/_root.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","bootstrap.css","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_interactions.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Bootstrap v4.5.2 (https://getbootstrap.com/)\n * Copyright 2011-2020 The Bootstrap Authors\n * Copyright 2011-2020 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","// Do not forget to update getting-started/theming.md!\n:root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Future-proof rule: in browsers that support :focus-visible, suppress the focus outline\n// on elements that programmatically receive focus but wouldn't normally show a visible\n// focus outline. In general, this would mean that the outline is only applied if the\n// interaction that led to the element receiving programmatic focus was a keyboard interaction,\n// or the browser has somehow determined that the user is primarily a keyboard user and/or\n// wants focus outlines to always be presented.\n//\n// See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible\n// and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/\n[tabindex=\"-1\"]:focus:not(:focus-visible) {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover() {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n color: inherit;\n text-decoration: none;\n\n @include hover() {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap,\n // making it impossible to interact with the content\n -ms-overflow-style: scrollbar;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Set the cursor for non-`

' - if (isConfig) { - innerhtml += ''; - innerhtml += ''; - } else { - innerhtml += ''; - } - innerhtml+= ''; - if (isConfig) { - $(targetDiv).append(innerhtml); - } else { - $("#commands-list").append(innerhtml); - } - } - }); - - data.commands.forEach(function(command) { - $('[cmdname='+command.name+']:input').val(''); - $('[cmdname='+command.name+']:checkbox').prop('checked',false); - if (command.hasOwnProperty("argtable")) { - command.argtable.forEach(function(arg) { - ctrlselector = '#' + command.name + '-' + arg.longopts; - ctrlValue = data.values?.[command.name]?.[arg.longopts]; - if (arg.checkbox) { - $(ctrlselector)[0].checked = ctrlValue; - } else { - if(ctrlValue!=undefined) $(ctrlselector).val( ctrlValue ).change(); - if ($(ctrlselector)[0].value.length == 0 && (arg?.datatype || '').includes('|')) { - $(ctrlselector)[0].value = '--'; - } - } - }); - } - }); - - }) - .fail(function(xhr, ajaxOptions, thrownError) { - handleExceptionResponse(xhr, ajaxOptions, thrownError); - $("#commands-list").empty(); - blockAjax = false; - }); -} - -function getConfig() { - $.getJSON("/config.json", function(entries) { - $("#nvsTable tr").remove(); - data = entries.hasOwnProperty('config') ? entries.config : entries; - Object.keys(data).sort().forEach(function(key, i) { - if (data.hasOwnProperty(key)) { - val = data[key].value; - if (key == 'autoexec') { - if (data["autoexec"].value === "0") { - $("#disable-squeezelite")[0].checked = true; - } else { - $("#disable-squeezelite")[0].checked = false; - } - } else if (key == 'autoexec1') { - var re = /-o\s?(["][^"]*["]|[^-]+)/g; - var m = re.exec(val); - if (m[1].toUpperCase().startsWith('I2S')) { - handleTemplateTypeRadio('i2s'); - } else if (m[1].toUpperCase().startsWith('SPDIF')) { - handleTemplateTypeRadio('spdif'); - } else if (m[1].toUpperCase().startsWith('"BT')) { - handleTemplateTypeRadio('bt'); - } - } else if (key == 'host_name') { - val = val.replaceAll('"', ''); - $("input#dhcp-name1").val(val); - $("input#dhcp-name2").val(val); - $("#player").val(val); - document.title=val; - } - - $("tbody#nvsTable").append( - "" + - "" + key + "" + - "" + - "" + - "" + - "" - ); - $("input#" + key).val(data[key].value); - } - }); - $("tbody#nvsTable").append(""); - if (entries.hasOwnProperty('gpio')) { - $("tbody#gpiotable tr").remove(); - entries.gpio.forEach(function(gpio_entry) { - cl = gpio_entry.fixed ? "table-secondary" : "table-primary"; - $("tbody#gpiotable").append('' + gpio_entry.group + '' + gpio_entry.name + '' + gpio_entry.gpio + '' + (gpio_entry.fixed ? 'Fixed':'Configuration') + ''); - }); - } - }) - .fail(function(xhr, ajaxOptions, thrownError) { - handleExceptionResponse(xhr, ajaxOptions, thrownError); - blockAjax = false; - }); -} -function showLocalMessage(message,severity, age = 0){ - msg={ - 'type':'Local', - 'message':message, - 'type' : severity - } - showMessage(msg,severity,age); -} - -function showMessage(msg, msg_time,age = 0) { - color='table-success'; - - if (msg['type'] == 'MESSAGING_WARNING') { - color='table-warning'; - if(messageseverity=='MESSAGING_INFO'){ - messageseverity = 'MESSAGING_WARNING'; - } - } else if (msg['type'] == 'MESSAGING_ERROR') { - if(messageseverity=='MESSAGING_INFO' || messageseverity=='MESSAGING_WARNING'){ - messageseverity = 'MESSAGING_ERROR'; - } - color ='table-danger'; - } - if(++messagecount>0){ - $('#msgcnt').removeClass('badge-success'); - $('#msgcnt').removeClass('badge-warning'); - $('#msgcnt').removeClass('badge-danger'); - $('#msgcnt').addClass(pillcolors[messageseverity]); - $('#msgcnt').text(messagecount); - } - - $("#syslogTable").append( - "" + - "" + msg_time.toLocaleString() + "" + - "" + escapeHTML(msg["message"]).replace(/\n/g, '
') + "" + - "" - ); -} - -function inRange(x, min, max) { - return ((x - min) * (x - max) <= 0); -} - -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} \ No newline at end of file diff --git a/components/wifi-manager/res/code.js.gz b/components/wifi-manager/res/code.js.gz deleted file mode 100644 index d7bdfdd2..00000000 Binary files a/components/wifi-manager/res/code.js.gz and /dev/null differ diff --git a/components/wifi-manager/res/favicon.ico.gz b/components/wifi-manager/res/favicon.ico.gz deleted file mode 100644 index b9d46bff..00000000 Binary files a/components/wifi-manager/res/favicon.ico.gz and /dev/null differ diff --git a/components/wifi-manager/res/jquery.js b/components/wifi-manager/res/jquery.js deleted file mode 100644 index b0614034..00000000 --- a/components/wifi-manager/res/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="
",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0Boilerplate - Bootstrap v4 - SASS - JQuery - WebPack
+ +

+ Webpack + Webpack + node-sass + jquery + jquery + popper.js + eslint + Font Awesome + Line Awesome +

+ +![webpack logo](https://abload.de/img/webpack1tkeb.png) +![bootstrap logo](https://abload.de/img/bootstrap-logo-vector78khf.png) +![babel logo](https://abload.de/img/2000px-babel_logo.svgrzkxw.png) +![sass logo](https://abload.de/img/1280px-sass_logo_colo0bjb4.png) + + +

+ + SASS + · Babel + · Bootstrap + · JQuery + · PopperJS + · Font Awesome + +

+ +This Webpack4-Sass Boilerplate contains the following features: + +- Webpack4 & Dev-Server +- TypeScript 3.7.5 +- Babel ES6 Compiler +- Bootstrap v4 - with Theme Support +- Font Awesome v5.7 +- Animate.css Library v3.7.2 +- JQuery v3.3.1 +- PopperJS v2 +- _lodash +- concentrate and minify JavaScript. +- Compile, minify, Autoprefix SASS. +- Optimize and Cache Images +- Preconfigured BootsWatch Template (YETI & Slate) +- Linting for your TS, JS and SASS + +## Features + +### Webpack Loaders & Plugins + +This project contains the following loaders & plugins: + +- `node-sass` for compiling sass (SCSS) +- `babel-loader` for compiling ES6 code +- `babel-eslint && eslint-loader` for Linting your .js +- `tslint` for Linting your .ts +- `lodash-webpack-plugin` create smaller Lodash builds by replacing feature sets of modules with noop, identity, or simpler alternatives. +- `webpack-dev-server` for serving & Hot-Reloading +- `css-loader` for compressing css +- `sass-loader` for compressing and loading scss & sass +- `url- & file-loader` for loading and optimizing images +- `xml and csv loader` for loading data files +- `html-loader` for loading & optimizing html files +- `clean-webpack-plugin` for keeping your dist folder clean +- `favicons-webpack-plugin` generate favicons form your "logo.png" + + +## Getting Started + +### Dependencies + +Make sure these are installed first. + +- [Node.js](http://nodejs.org) +- [Webpack](https://webpack.js.org/guides/installation/) + + `npm install --g webpack` + +
+ +### Quick Start + +1. Clone the repo : + `git clone https://github.com/AndyKorek/webpack-boilerplate-sass-ts-bootstrap4-fontawesome.git` +2. In bash/terminal/command line, `cd ` into project directory. +3. Run `npm i` to install required dependencies. + +4. Run the Dev Server with (with Hot Reloading) `npm run dev` + +
+ +### Build the Production Folder +`npm run build` + +This will: + +- Bundle and Minify SASS(scss) to css & Hash and Cash it +- generate GZip and Brodli Compressed Assets +- Bundle and Minify JS +- Optimize Images +- Optimize HTML +- generate Favicons + +
+ +## Documentation + +### Workflow structure + +`src` - > source directory + +`dist` -> build directory + + +``` + +├── src +│ ├── assets +│ │ └── images +│ ├── fonts +│ ├── sass +│ │ ├── layout +| | | └── _features.scss +│ │ ├── setup +| | | └── _normalize.scss +│ │ ├── themes +| | | ├── _slate.scss +| | | └── _yeti.scss +│ │ ├── utils +| | | ├── _mixins.scss +| | | └── _variables.scss +│ │ ├── _globals.scss +│ │ ├── _headings.scss +│ │ ├── _typography.scss +│ │ ├── _vendor.scss +│ │ └── main.scss +│ ├── ts +│ │ ├── custom.ts +│ │ ├── line-awesome.ts +│ │ ├── vendor.ts +│ |── .htaccess +│ |── 404.html +│ |── index.html +│ └── index.ts + + + +├── dist +│ ├── assets +│ │ ├── images +│ │ └── +│ ├── css +│ │ ├── vendors.[contenthash].css +│ │ └── main.contenthash].css +│ ├── js +│ │ ├── main.[contenthash].js +│ │ ├── runtime.[contenthash].js +│ │ └── vendors.[contenthash].js +│ │ +│ └── index.html + +``` +### Loading the Features you need + +in `src/js/vendor/_boostrap.js` uncomment all Features you need + +put your custom js to `src/js/_custom.js` + + +
+ +### Instructions + +- Add `sass`(.scss) files to `src/_scss` folder. + + - Make sure you import the scss file in `main.scss` + ``` + @import "filename"; + ``` +- Add your assets to `src/assets/` + +- Add `images` to `src/assets/images` + +## TODO list + +- [x] Bootstrap 4 +- [x] Webpack 4 +- [x] Jquery +- [x] PopperJS v2 +- [x] Include ES-Lint +- [x] Font-Awesome +- [x] Assets Loader +- [x] Separated location for Bundled Files +- [x] Adding EsLint +- [ ] Code Optimising +- [x] Uglify and Minify JS with Terser + +## Licence + +Code released under the [MIT License](https://github.com/AndyKorek/webpack4_boilerplate/blob/master/LICENSE). + +* with* :heart: *from Germany* diff --git a/components/wifi-manager/webapp/config/.stylelintrc b/components/wifi-manager/webapp/config/.stylelintrc new file mode 100644 index 00000000..10b61b94 --- /dev/null +++ b/components/wifi-manager/webapp/config/.stylelintrc @@ -0,0 +1,24 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "no-duplicate-selectors": true, + "indentation": null, + "color-hex-case": "lower", + "color-hex-length": "long", + "selector-combinator-space-after": "never", + "declaration-block-trailing-semicolon": "always", + "declaration-colon-space-before": "never", + "declaration-colon-newline-after": null, + "comment-whitespace-inside": "always", + "comment-empty-line-before": null, + "selector-pseudo-class-parentheses-space-inside": "always", + "selector-list-comma-newline-after": null, + "media-feature-range-operator-space-before": "always", + "media-feature-range-operator-space-after": "always", + "media-feature-parentheses-space-inside": "always", + "media-feature-colon-space-before": "always", + "media-feature-colon-space-after": "always", + "no-eol-whitespace": null, + "no-missing-end-of-source-newline": null, + "number-leading-zero": "never" } +} diff --git a/components/wifi-manager/webapp/debug.log b/components/wifi-manager/webapp/debug.log new file mode 100644 index 00000000..8f268507 --- /dev/null +++ b/components/wifi-manager/webapp/debug.log @@ -0,0 +1,3 @@ +[1211/165128.604:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3) +[1212/063417.746:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3) +[1213/063413.475:ERROR:directory_reader_win.cc(43)] FindFirstFile: Le chemin d’accès spécifié est introuvable. (0x3) diff --git a/components/wifi-manager/ap.json b/components/wifi-manager/webapp/mock/ap.json similarity index 82% rename from components/wifi-manager/ap.json rename to components/wifi-manager/webapp/mock/ap.json index de61f86a..cf27ca60 100644 --- a/components/wifi-manager/ap.json +++ b/components/wifi-manager/webapp/mock/ap.json @@ -8,5 +8,6 @@ {"ssid":"The Shah 5GHz-2","chan":1,"rssi":-90,"auth":3}, {"ssid":"SINGTEL-1D28 (2G)","chan":11,"rssi":-91,"auth":3}, {"ssid":"dlink-F864","chan":1,"rssi":-92,"auth":4}, -{"ssid":"dlink-74F0","chan":1,"rssi":-93,"auth":4} +{"ssid":"dlink-74F0","chan":1,"rssi":-93,"auth":4}, +{"ssid":"MyTestSSID","chan":2,"rssi":-53,"auth":4} ] \ No newline at end of file diff --git a/components/wifi-manager/commands.json b/components/wifi-manager/webapp/mock/commands.json similarity index 71% rename from components/wifi-manager/commands.json rename to components/wifi-manager/webapp/mock/commands.json index 12f5c116..b34e51a4 100644 --- a/components/wifi-manager/commands.json +++ b/components/wifi-manager/webapp/mock/commands.json @@ -1,117 +1,125 @@ { "commands": [{ - "help": "Squeezelite Options", + "help": "WiFi", "hascb": true, "argtable": [{ - "datatype": "[:]", - "glossary": "Connect to specified server, otherwise uses autodiscovery to find server", - "longopts": "server", - "shortopts": "s", + "datatype": "Fast|Comprehensive", + "glossary": "Sets the WiFi Scan Mode. Use Comprehensive where more than one AP has the same name on different channels. This will ensure that the AP with the strongest signal is chosen.", + "longopts": "scanmode", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 + }], + "hint": " [--scanmode=Fast|Comprehensive]", + "name": "cfg-syst-wifi" + }, { + "help": "Get the current size of free heap memory", + "hascb": false, + "name": "free" + }, { + "help": "Services", + "hascb": true, + "argtable": [{ + "glossary": "Bluetooth Speaker", + "longopts": "BT_Speaker", + "checkbox": true, + "hasvalue": false, + "mincount": 0, + "maxcount": 1 }, { - "datatype": ":", - "glossary": "Internal Stream and Output buffer sizes in Kbytes", - "longopts": "buffers", - "shortopts": "b", + "glossary": "AirPlay", + "longopts": "AirPlay", + "checkbox": true, + "hasvalue": false, + "mincount": 0, + "maxcount": 1 + }, { + "datatype": "Disabled|Telnet Only|Telnet and Serial", + "glossary": "Telnet server. Use only for troubleshooting", + "longopts": "telnet", + "shortopts": "t", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 - }, { - "datatype": ",", - "glossary": "Restrict codecs to those specified, otherwise load all available codecs; known codecs", - "longopts": "codecs", - "shortopts": "c", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 20 - }, { - "datatype": "", - "glossary": "Close output device when idle after timeout seconds, default is to keep it open while player is 'on", - "longopts": "timeout", - "shortopts": "C", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "log=level", - "glossary": "Set logging level, logs: all|slimproto|stream|decode|output|ir, level: info|debug|sdebug", - "longopts": "loglevel", - "shortopts": "d", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "", - "glossary": "Output device", - "longopts": "output_device", - "shortopts": "o", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "", - "glossary": "Mac address, format: ab:cd:ef:12:34:56", - "longopts": "mac_addr", - "shortopts": "m", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "", - "glossary": "Squeezelite player model name sent to the server", - "longopts": "modelname", - "shortopts": "M", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "", - "glossary": "Player name", + }], + "hint": " [--BT_Speaker] [--AirPlay] [-t Disabled|Telnet Only|Telnet and Serial]", + "name": "cfg-syst-services" + }, { + "help": "Get minimum size of free heap memory found during execution", + "hascb": false, + "name": "heap" + }, { + "help": "Device Name", + "hascb": true, + "argtable": [{ + "datatype": "Bureau-OLED", + "glossary": "New Name", "longopts": "name", "shortopts": "n", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 - }, { - "glossary": "Read wave and aiff format from header, ignore server parameters", - "longopts": "header_format", - "shortopts": "W", - "checkbox": true, - "hasvalue": false, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "[:]", - "glossary": "Sample rates supported, allows output to be off when squeezelite is started; rates = |-|,,; delay = optional delay switching rates in ms\n", - "longopts": "rates", - "shortopts": "r", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "", - "glossary": "Report rate to server in helo as the maximum sample rate we can support", - "longopts": "max_rate", - "shortopts": "Z", + }], + "hint": " [-n Bureau-OLED]", + "name": "cfg-syst-name" + }, { + "help": "Get version of chip and SDK", + "hascb": false, + "name": "version" + }, { + "help": "Reboot system", + "hascb": false, + "name": "restart" + }, { + "help": "Reboot system to Recovery", + "hascb": false, + "name": "recovery" + }, { + "help": "Reboot system to Squeezelite", + "hascb": false, + "name": "restart_ota" + }, { + "help": "General Audio Options", + "hascb": true, + "argtable": [{ + "datatype": "Headphones|Subwoofer", + "glossary": "On supported DAC, determines the audio jack behavior. Selecting headphones will cause the external amp to be muted on insert, while selecting Subwoofer will keep the amp active all the time.", + "longopts": "jack_behavior", + "shortopts": "j", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 }], - "hint": " [-W] [-s [:]] [-b :] [-c ,]... [-C ] [-d log=level] [-o ] [-m ] [-M ] [-n ] [-r [:]] [-Z ]", - "name": "cfg-syst-squeezelite" + "hint": " [-j Headphones|Subwoofer]", + "name": "cfg-audio-general" + }, { + "help": "Bluetooth Audio Output Options", + "hascb": true, + "argtable": [{ + "datatype": "name", + "glossary": "Bluetooth audio device name. This applies when output mode is Bluetooth", + "longopts": "sink_name", + "shortopts": "n", + "checkbox": false, + "hasvalue": true, + "mincount": 1, + "maxcount": 1 + }, { + "datatype": "pin", + "glossary": "Bluetooth security/pin code. Usually 0000. This applies when output mode is Bluetooth", + "longopts": "pin_code", + "shortopts": "p", + "checkbox": false, + "hasvalue": true, + "mincount": 1, + "maxcount": 1 + }], + "hint": " -n name -p pin", + "name": "cfg-audio-bt_source" }, { "help": "DAC Options", "hascb": true, @@ -156,7 +164,7 @@ "mincount": 0, "maxcount": 1 }, { - "glossary": "Mute active GPIO level", + "glossary": "Mute GPIO level. Checked=HIGH, Unchecked=LOW", "longopts": "mute_level", "checkbox": true, "hasvalue": false, @@ -197,80 +205,42 @@ "hint": " --model_name=TAS57xx|TAS5713|AC101|I2S --clock= --wordselect= --data= [--mute_gpio=] [--mute_level] [--dac_sda=] [--dac_scl=] [--dac_i2c=] [--clear]", "name": "cfg-hw-dac" }, { - "help": "Get the current size of free heap memory", - "hascb": false, - "name": "free" - }, { - "help": "Services", + "help": "SPDIF Options", "hascb": true, "argtable": [{ - "glossary": "Bluetooth Speaker", - "longopts": "BT_Speaker", - "checkbox": true, - "hasvalue": false, - "mincount": 0, - "maxcount": 1 - }, { - "glossary": "AirPlay", - "longopts": "AirPlay", - "checkbox": true, - "hasvalue": false, - "mincount": 0, - "maxcount": 1 - }, { - "datatype": "Disabled|Telnet Only|Telnet and Serial", - "glossary": "Telnet server. Use only for troubleshooting", - "longopts": "telnet", - "shortopts": "t", + "datatype": "", + "glossary": "Clock GPIO. e.g. 33", + "longopts": "clock", "checkbox": false, "hasvalue": true, - "mincount": 0, + "mincount": 1, "maxcount": 1 }, { - "glossary": "System Statistics. Use only for troubleshooting", - "longopts": "stats", + "datatype": "", + "glossary": "Word Select GPIO. e.g. 25", + "longopts": "wordselect", + "checkbox": false, + "hasvalue": true, + "mincount": 1, + "maxcount": 1 + }, { + "datatype": "", + "glossary": "Data GPIO. e.g. 32", + "longopts": "data", + "checkbox": false, + "hasvalue": true, + "mincount": 1, + "maxcount": 1 + }, { + "glossary": "Clear configuration", + "longopts": "clear", "checkbox": true, "hasvalue": false, "mincount": 0, "maxcount": 1 }], - "hint": " [--BT_Speaker] [--AirPlay] [-t Disabled|Telnet Only|Telnet and Serial] [--stats]", - "name": "cfg-syst-services" - }, { - "help": "Get minimum size of free heap memory found during execution", - "hascb": false, - "name": "heap" - }, { - "help": "Device Name", - "hascb": true, - "argtable": [{ - "datatype": "\"squeezelite-test3\"", - "glossary": "New Name", - "longopts": "name", - "shortopts": "n", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }], - "hint": " [-n \"squeezelite-test3\"]", - "name": "cfg-syst-name" - }, { - "help": "Get version of chip and SDK", - "hascb": false, - "name": "version" - }, { - "help": "Software reset of the chip", - "hascb": false, - "name": "restart" - }, { - "help": "Resets and boot to recovery (if available)", - "hascb": false, - "name": "recovery" - }, { - "help": "Selects the ota app partition to boot from and performa a software reset of the chip", - "hascb": false, - "name": "restart_ota" + "hint": " --clock= --wordselect= --data= [--clear]", + "name": "cfg-hw-spdif" }, { "help": "I2C Bus Parameters", "hascb": true, @@ -310,14 +280,6 @@ "hasvalue": true, "mincount": 0, "maxcount": 1 - }, { - "glossary": "Load Existing Configuration", - "longopts": "load", - "shortopts": "l", - "checkbox": true, - "hasvalue": false, - "mincount": 0, - "maxcount": 1 }, { "glossary": "Clear configuration", "longopts": "clear", @@ -326,7 +288,7 @@ "mincount": 0, "maxcount": 1 }], - "hint": " [-l] [-p 0|1] [-f int] [-d ] [-c ] [--clear]", + "hint": " [-p 0|1] [-f int] [-d ] [-c ] [--clear]", "name": "cfg-hw-i2c" }, { "help": "SPI Bus Parameters", @@ -359,7 +321,7 @@ "mincount": 0, "maxcount": 1 }, { - "datatype": "int", + "datatype": "1|2", "glossary": "SPI Host Number", "longopts": "host", "shortopts": "h", @@ -375,7 +337,7 @@ "mincount": 0, "maxcount": 1 }], - "hint": " [-d ] [-k ] [-c ] [-h int] [--clear]", + "hint": " [-d ] [-k ] [-c ] [-h 1|2] [--clear]", "name": "cfg-hw-spi" }, { "help": "Scan I2C bus for devices", @@ -491,14 +453,23 @@ "mincount": 0, "maxcount": 1 }, { - "datatype": "", - "glossary": "Driver (default SSD1306)", + "datatype": "", + "glossary": "Driver", "longopts": "driver", "shortopts": "d", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 + }, { + "datatype": "1|4", + "glossary": "Bit Depth (only for SSD1326 displays)", + "longopts": "depth", + "shortopts": "p", + "checkbox": false, + "hasvalue": true, + "mincount": 0, + "maxcount": 1 }, { "datatype": "", "glossary": "I2C address (default 60)", @@ -515,7 +486,7 @@ "shortopts": "w", "checkbox": false, "hasvalue": true, - "mincount": 0, + "mincount": 1, "maxcount": 1 }, { "datatype": "", @@ -524,7 +495,7 @@ "shortopts": "h", "checkbox": false, "hasvalue": true, - "mincount": 0, + "mincount": 1, "maxcount": 1 }, { "glossary": "Rotate 180 degrees", @@ -550,13 +521,22 @@ "maxcount": 1 }, { "datatype": "", - "glossary": "Bus Speed (Default 8000000 for SPI, 250000 for I2C). SPI interface can work up to 26MHz~40MHz", + "glossary": "SPI Only. Bus Speed (Default 8000000). SPI interface can work up to 26MHz~40MHz", "longopts": "speed", "shortopts": "s", "checkbox": false, "hasvalue": true, "mincount": 0, "maxcount": 1 + }, { + "datatype": "", + "glossary": "SPI Only. CS GPIO (for SPI displays)", + "longopts": "cs", + "shortopts": "b", + "checkbox": false, + "hasvalue": true, + "mincount": 0, + "maxcount": 1 }, { "datatype": "", "glossary": "Backlight GPIO (if applicable)", @@ -566,6 +546,14 @@ "hasvalue": true, "mincount": 0, "maxcount": 1 + }, { + "datatype": "", + "glossary": "Reset GPIO", + "longopts": "reset", + "checkbox": false, + "hasvalue": true, + "mincount": 0, + "maxcount": 1 }, { "glossary": "clear configuration and return", "longopts": "clear", @@ -574,77 +562,56 @@ "mincount": 0, "maxcount": 1 }], - "hint": " [-r] [-t ] [-d ] [-a ] [-w ] [-h ] [--hf] [--vf] [-s ] [-b ] [--clear]", + "hint": " [-r] [-t ] [-d ] [-p 1|4] [-a ] -w -h [--hf] [--vf] [-s ] [-b ] [-b ] [--reset=] [--clear]", "name": "cfg-hw-display" - }, { - "help": "Shows display options and global i2c configuration", - "hascb": false, - "name": "getdisplay" - }, { - "help": "Stop the I2C bus", - "hascb": false, - "argtable": [{ - "datatype": "<0|1>", - "glossary": "I2C bus port number", - "longopts": "port", - "shortopts": "p", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }], - "hint": " [-p <0|1>]", - "name": "i2cstop" - }, { - "help": "Check if the I2C bus is installed", - "hascb": false, - "argtable": [{ - "datatype": "<0|1>", - "glossary": "Set the I2C bus port number", - "longopts": "port", - "shortopts": "p", - "checkbox": false, - "hasvalue": true, - "mincount": 0, - "maxcount": 1 - }], - "hint": " [-p <0|1>]", - "name": "i2ccheck" }], "values": { - "cfg-syst-squeezelite": { - "buffers": "500:2000", - "header_format": true, - "loglevel": "all=info", - "output_device": "I2S", - "name": "squeezelite", - "timeout": 30 - }, - "cfg-hw-dac": { - "model_name": "i2s" + "cfg-syst-wifi": { + "scanmode": "Fast" }, "cfg-syst-services": { - "BT_Speaker": false, - "AirPlay": false, - "telnet": "Telnet and Serial", - "stats": true + "BT_Speaker": true, + "AirPlay": true, + "telnet": "Telnet Only" }, "cfg-syst-name": { - "name": "\"squeezelite-test3\"" + "name": "Bureau-OLED" + }, + "cfg-audio-general": { + "jack_behavior": "Subwoofer" + }, + "cfg-audio-bt_source": { + "sink_name": "SMSL BT4.2", + "pin_code": "0000" + }, + "cfg-hw-dac": { + "clock": 33, + "wordselect": 25, + "data": 32, + "model_name": "I2S" + }, + "cfg-hw-spdif": { }, "cfg-hw-i2c": { - "freq": 400000 + "speed": 400000 }, "cfg-hw-spi": { + "data": 4, + "clk": 5, + "dc": 18, + "host": 1 }, "cfg-hw-display": { - "address": 0, - "width": 0, - "height": 0, - "driver": "SSD1306", + "width": 256, + "height": 64, + "reset": 21, + "driver": "SSD1322", + "cs": 19, + "speed": 16000000, + "type": "SPI", + "rotate": false, "hf": false, - "vf": false, - "rotate": false + "vf": false } } } \ No newline at end of file diff --git a/components/wifi-manager/config.json b/components/wifi-manager/webapp/mock/config.json similarity index 100% rename from components/wifi-manager/config.json rename to components/wifi-manager/webapp/mock/config.json diff --git a/components/wifi-manager/messages.json b/components/wifi-manager/webapp/mock/messages.json similarity index 96% rename from components/wifi-manager/messages.json rename to components/wifi-manager/webapp/mock/messages.json index 7817adfc..b9244b49 100644 --- a/components/wifi-manager/messages.json +++ b/components/wifi-manager/webapp/mock/messages.json @@ -52,5 +52,27 @@ "class": "MESSAGING_CLASS_STATS", "sent_time": 141256, "current_time": 147319 + }, + { + "message": "Wifi connected", + "type": "MESSAGING_INFO", + "class": "MESSAGING_CLASS_SYSTEM", + "sent_time": 141256, + "current_time": 147319 + }, + { + "message": "[{\n\t\t\"name\":\t\"SMSL BT4.2\",\n\t\t\"rssi\":\t-64\n\t}]", + "type": "MESSAGING_INFO", + "class": "MESSAGING_CLASS_BT", + "sent_time": 6245, + "current_time": 6364 + }, { + "message": "[{\n\t\t\"name\":\t\"SMSL BT4.2\",\n\t\t\"rssi\":\t-129\n\t}]", + "type": "MESSAGING_INFO", + "class": "MESSAGING_CLASS_BT", + "sent_time": 6259, + "current_time": 6364 } + + ] \ No newline at end of file diff --git a/components/wifi-manager/messages_testing.json b/components/wifi-manager/webapp/mock/messages_testing.json similarity index 100% rename from components/wifi-manager/messages_testing.json rename to components/wifi-manager/webapp/mock/messages_testing.json diff --git a/components/wifi-manager/scan.json b/components/wifi-manager/webapp/mock/scan.json similarity index 100% rename from components/wifi-manager/scan.json rename to components/wifi-manager/webapp/mock/scan.json diff --git a/components/wifi-manager/status-messages.json b/components/wifi-manager/webapp/mock/status-messages.json similarity index 100% rename from components/wifi-manager/status-messages.json rename to components/wifi-manager/webapp/mock/status-messages.json diff --git a/components/wifi-manager/status.json b/components/wifi-manager/webapp/mock/status.json similarity index 73% rename from components/wifi-manager/status.json rename to components/wifi-manager/webapp/mock/status.json index 94865919..df501808 100644 --- a/components/wifi-manager/status.json +++ b/components/wifi-manager/webapp/mock/status.json @@ -1,6 +1,6 @@ { - "project_name": "recovery", - "version": "custom.build", + "project_name": "dev-server", + "version": "webpack", "recovery": 1, "Jack": "1", "Voltage": 0, @@ -9,6 +9,8 @@ "is_i2c_locked": false, "urc": 0, "bt_status": 0, + "bt_sub_status": 0, + "rssi": -59, "ssid": "MyTestSSID", "ip": "192.168.10.225", "netmask": "255.255.255.0", diff --git a/components/wifi-manager/webapp/mock/statusdefinition.json b/components/wifi-manager/webapp/mock/statusdefinition.json new file mode 100644 index 00000000..300ec98e --- /dev/null +++ b/components/wifi-manager/webapp/mock/statusdefinition.json @@ -0,0 +1,24 @@ +{ + "urc": { + "Wifi Connection OK": 0, + "Wifi Failed Connect Attempt": 1, + "WiFi User Disconnect": 2, + "WiFi Lost Connection": 3 + }, + "bt_status": { + "Idle": 0, + "Discovering": 1, + "Discovered": 2, + "Unconnected": 3, + "Connecting": 4, + "Connected": 5, + "Disconnecting": 6 + }, + "bt_sub_status": { + "Default": 0, + "Connected - Starting": 1, + "Connected - Started": 2, + "Connected - Pause": 3, + "Connected - Stop": 4 + } +} \ No newline at end of file diff --git a/components/wifi-manager/webapp/package.json b/components/wifi-manager/webapp/package.json new file mode 100644 index 00000000..2506ff78 --- /dev/null +++ b/components/wifi-manager/webapp/package.json @@ -0,0 +1,133 @@ +{ + "name": "squeezelite-esp32", + "version": "0.5.0", + "main": "src/index.html", + "repository": "git@github.com:sle118/squeezelite-esp32.git", + "author": "Andy K., Sebastien", + "license": "MIT", + "scripts": { + "dev": "webpack-dev-server --open --config webpack/webpack.dev.js", + "build": "webpack --config webpack/webpack.prod.js", + "prod": "webpack-dev-server --open --config webpack/webpack.prod.js" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "dependencies": { + "@popperjs/core": "^2.0.6", + "@types/bootstrap": "^4.3.1", + "animate.css": "^3.7.2", + "bootstrap": "^4.5.3", + "bootswatch": "^4.4.1", + "commander": "^6.2.0", + "expose-loader": "^1.0.3", + "hamburgers": "^1.1.3", + "jquery": "^3.3.1", + "line-awesome": "^1.3.0", + "lodash": "^4.17.15", + "perfect-scrollbar": "^1.5.0", + "popper": "^1.0.1", + "react": "^17.0.1", + "remixicon": "^2.5.0", + "stylelint-config-standard": "^20.0.0", + "svgo": "^1.3.2", + "webpack-icons-installer": "^2.0.0" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.12.10", + "@babel/preset-typescript": "^7.8.3", + "@fullhuman/postcss-purgecss": "^1.3.0", + "@types/lodash": "^4.14.149", + "autoprefixer": "^9.7.4", + "babel-eslint": "^10.0.3", + "babel-loader": "^8.2.2", + "babel-preset-minify": "^0.5.1", + "body-parser": "^1.19.0", + "browser-sync": "^2.26.7", + "browser-sync-webpack-plugin": "^2.2.2", + "browserlist": "^1.0.1", + "clean-webpack-plugin": "^2.0.0", + "compression-webpack-plugin": "^2.0.0", + "cross-env": "^5.2.1", + "css-loader": "^0.28.11", + "cssnano": "^4.1.10", + "eslint": "^7.0.0", + "eslint-config-google": "^0.9.1", + "eslint-webpack-plugin": "^2.4.1", + "extract-text-webpack-plugin": "^4.0.0-beta.0", + "favicons-webpack-plugin": "0.0.9", + "file-loader": "^1.1.11", + "glob": "^7.1.6", + "glob-all": "^3.2.1", + "html-loader": "^0.5.5", + "html-webpack-plugin": "^3.0.7", + "image-webpack-loader": "^7.0.1", + "imagemin-mozjpeg": "^8.0.0", + "imagemin-webpack-plugin": "^2.4.2", + "img-loader": "^3.0.1", + "install": "^0.10.4", + "less": "^3.13.0", + "lodash-webpack-plugin": "^0.11.5", + "mini-css-extract-plugin": "^0.5.0", + "miragejs": "^0.1.41", + "node-sass": "^4.13.1", + "offline-plugin": "^5.0.7", + "on-build-webpack": "^0.1.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "postcss-loader": "^3.0.0", + "preload-webpack-plugin": "^2.3.0", + "purgecss-webpack-plugin": "^3.1.3", + "purify-css": "^1.2.5", + "purifycss-webpack": "^0.7.0", + "raw-loader": "^2.0.0", + "resolve-url-loader": "^3.1.1", + "sass-loader": "^6.0.7", + "script-ext-html-webpack-plugin": "^2.1.4", + "source-map-loader": "^0.2.4", + "style-loader": "^0.20.3", + "stylelint": "^13.2.0", + "stylelint-config-recommended": "^3.0.0", + "stylelint-webpack-plugin": "^1.2.3", + "svg-sprite-loader": "^5.2.1", + "svg-transform-loader": "^2.0.13", + "svgo-loader": "^2.2.1", + "terser-webpack-plugin": "^1.4.3", + "ts-loader": "^6.2.1", + "tslint": "^5.20.1", + "tslint-webpack-plugin": "^2.1.0", + "typescript": "^3.7.5", + "url-loader": "^1.1.2", + "webpack": "^4.44.2", + "webpack-bundle-analyzer": "^4.3.0", + "webpack-cli": "^3.3.11", + "webpack-dev-server": "^3.10.3", + "webpack-merge": "^4.2.2", + "xml-loader": "^1.2.1" + }, + "keywords": [ + "webppack4", + "sass", + "bootstrap4", + "jquery", + "popperjs", + "livereload", + "dev-server", + "font-awesome", + "es-lint", + "typescript", + "line-awesome" + ] +} diff --git a/components/wifi-manager/webapp/postcss.config.js b/components/wifi-manager/webapp/postcss.config.js new file mode 100644 index 00000000..f4d62530 --- /dev/null +++ b/components/wifi-manager/webapp/postcss.config.js @@ -0,0 +1,3 @@ +module.exports = { + +}; diff --git a/components/wifi-manager/webapp/src/.htaccess b/components/wifi-manager/webapp/src/.htaccess new file mode 100644 index 00000000..49e752ba --- /dev/null +++ b/components/wifi-manager/webapp/src/.htaccess @@ -0,0 +1,37 @@ + + ExpiresActive On + ExpiresDefault "access plus 1 days" + ExpiresByType text/html "access plus 5 minutes" + ExpiresByType text/xml "access plus 6 hours" + ExpiresByType text/css "access plus 1 weeks" + ExpiresByType text/javascript "access plus 1 weeks" + ExpiresByType application/javascript "access plus 1 weeks" + ExpiresByType application/x-javascript "access plus 1 weeks" + ExpiresByType text/ecmascript "access plus 1 weeks" + ExpiresByType image/gif "access plus 1 years" + ExpiresByType image/png "access plus 1 years" + ExpiresByType image/jpeg "access plus 1 years" + ExpiresByType image/ico "access plus 1 years" + ExpiresByType image/icon "access plus 1 years" + ExpiresByType image/x-icon "access plus 1 years" + ExpiresByType video/x-flv "access plus 1 years" + ExpiresByType video/quicktime "access plus 1 years" + ExpiresByType application/x-shockwave-flash "access plus 1 years" + ExpiresByType application/pdf "access plus 1 years" + + + # gzip Compression if availiable +AddEncoding gzip .gzip + + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE text/javascript + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + AddOutputFilterByType DEFLATE application/x-shockwave-flash + diff --git a/components/wifi-manager/webapp/src/assets/images/200px-ControllerAppIcon.png b/components/wifi-manager/webapp/src/assets/images/200px-ControllerAppIcon.png new file mode 100644 index 00000000..f0fc205a Binary files /dev/null and b/components/wifi-manager/webapp/src/assets/images/200px-ControllerAppIcon.png differ diff --git a/components/wifi-manager/webapp/src/assets/images/favicon-32x32.png b/components/wifi-manager/webapp/src/assets/images/favicon-32x32.png new file mode 100644 index 00000000..533c03ab Binary files /dev/null and b/components/wifi-manager/webapp/src/assets/images/favicon-32x32.png differ diff --git a/components/wifi-manager/res/favicon.ico b/components/wifi-manager/webapp/src/assets/images/favicon.ico similarity index 100% rename from components/wifi-manager/res/favicon.ico rename to components/wifi-manager/webapp/src/assets/images/favicon.ico diff --git a/components/wifi-manager/webapp/src/index.ejs b/components/wifi-manager/webapp/src/index.ejs new file mode 100644 index 00000000..917406be --- /dev/null +++ b/components/wifi-manager/webapp/src/index.ejs @@ -0,0 +1,439 @@ + + + + + + + + SqueezeESP32 + + + + +
+ <% if (htmlWebpackPlugin.files.sprites) { %> + <% for (var spriteFileName in htmlWebpackPlugin.files.sprites) { %> + <%= htmlWebpackPlugin.files.sprites[spriteFileName] %> + <% } %> + <% } %> +
+ +
+
+
+
+
+
+
+
+
+ +
+
+

Check for firmware upgrade

+
+ +
+
+ + +
+ + + + + + + + + + + + + +
Firmware versionRelease date/timeHW platformIDF versionBranchFlash this FW
+

Firmware URL:

+ +
+ +
+
+

OR

+
+ +
+ +
+
+
+
+
+
+ 0% +
+
+
+
+
+ + + + + + + + + +
KeyValue
+
+
+
+ +
+
+ + + + +
+
+ +
+
+
Usage Templates
+
+
+
+ Output +
+ +
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ + + +
+
+
+
+
+
+
WiFi Status
+
+ + + + + + + + + + +
JoinedNameSignalSecurity
+ + +
+ + + +
+
+
+
+
+ +
+
+
Logs
+
+ + + + + + + + + +
TimestampMessage
+
+ +
+
+
+
+
Pin Assignments
+
+ + + + + + + + + + +
DevicePin NameGPIO NumberType
+
+
+
+
Tasks
+
+ + + + + + + + + + + + + + +
#Task NameCPUStateMin StackBase PriorityCur Priority
+
+
+
+ +
+
+
Credits
+
+

squeezelite-esp32
© + 2020, philippe44, sle118, daduke
This + software is released under the MIT License.

+

+ This app would not be possible without the following libraries: +

+
    +
  • squeezelite, © 2012-2019, Adrian Smith and Ralph Irving. Licensed under the GPL + License.
  • +
  • esp32-wifi-manager, © 2017-2019, Tony Pottier. Licensed under the MIT License.
  • +
  • SpinKit, © 2015, Tobias Ahlin. Licensed under the MIT License.
  • +
  • jQuery, The jQuery Foundation. Licensed under the MIT License.
  • +
  • cJSON, © 2009-2017, Dave Gamble and cJSON contributors. Licensed under the MIT + License. +
  • +
  • esp32-rotary-encoder, © 2011-2019, David Antliff and Ben Buxton. Licensed under the + GPL + License.
  • +
  • tarablessd1306, © 2017-2018, Tara Keeling. Licensed under the MIT license.
  • +
+
+
+
+
Extras/Overrides
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+ +
+
+ +
+ +
+ + + + \ No newline at end of file diff --git a/components/wifi-manager/webapp/src/index.ts b/components/wifi-manager/webapp/src/index.ts new file mode 100644 index 00000000..af4e48e7 --- /dev/null +++ b/components/wifi-manager/webapp/src/index.ts @@ -0,0 +1,24 @@ +//import $ from "jquery"; +import 'bootstrap'; +import '../src/sass/main.scss'; +import '../node_modules/remixicon/icons/Device/signal-wifi-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-3-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-2-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-1-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-low-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-fill.svg'; + +import '../node_modules/remixicon/icons/Media/headphone-fill.svg'; +import '../node_modules/remixicon/icons/Device/device-recover-fill.svg'; +import '../node_modules/remixicon/icons/Device/bluetooth-fill.svg'; +import '../node_modules/remixicon/icons/Device/bluetooth-connect-fill.svg'; +import '../node_modules/remixicon/icons/Media/stop-circle-fill.svg'; +import '../node_modules/remixicon/icons/Media/play-circle-fill.svg'; +import '../node_modules/remixicon/icons/Media/pause-circle-fill.svg'; +import '../node_modules/remixicon/icons/System/lock-fill.svg'; +import '../node_modules/remixicon/icons/System/lock-unlock-fill.svg'; + +import './js/custom.js'; +// <%= `` %> \ No newline at end of file diff --git a/components/wifi-manager/webapp/src/js/custom.js b/components/wifi-manager/webapp/src/js/custom.js new file mode 100644 index 00000000..27185c2f --- /dev/null +++ b/components/wifi-manager/webapp/src/js/custom.js @@ -0,0 +1,1702 @@ +import he from 'he'; +import { Promise } from 'es6-promise'; + +if (!String.prototype.format) { + Object.assign(String.prototype, { + format() { + const args = arguments; + return this.replace(/{(\d+)}/g, function(match, number) { + return typeof args[number] !== 'undefined' ? args[number] : match; + }); + }, + }); +} +if (!String.prototype.encodeHTML) { + Object.assign(String.prototype, { + encodeHTML() { + return he.encode(this).replace(/\n/g, '
') + }, + }); +} +Object.assign(Date.prototype, { + toLocalShort() { + const opt = { dateStyle: 'short', timeStyle: 'short' }; + return this.toLocaleString(undefined, opt); + }, +}); + +const nvsTypes = { + NVS_TYPE_U8: 0x01, + + /*! < Type uint8_t */ + NVS_TYPE_I8: 0x11, + + /*! < Type int8_t */ + NVS_TYPE_U16: 0x02, + + /*! < Type uint16_t */ + NVS_TYPE_I16: 0x12, + + /*! < Type int16_t */ + NVS_TYPE_U32: 0x04, + + /*! < Type uint32_t */ + NVS_TYPE_I32: 0x14, + + /*! < Type int32_t */ + NVS_TYPE_U64: 0x08, + + /*! < Type uint64_t */ + NVS_TYPE_I64: 0x18, + + /*! < Type int64_t */ + NVS_TYPE_STR: 0x21, + + /*! < Type string */ + NVS_TYPE_BLOB: 0x42, + + /*! < Type blob */ + NVS_TYPE_ANY: 0xff /*! < Must be last */, +}; +const btIcons = { + bt_playing: 'play-circle-fill', + bt_disconnected: 'bluetooth-fill', + bt_neutral: '', + bt_connected: 'bluetooth-connect-fill', + bt_disabled: '', + play_arrow: 'play-circle-fill', + pause: 'pause-circle-fill', + stop: 'stop-circle-fill', + '': '', +}; + +const btStateIcons = [ + { desc: 'Idle', sub: ['bt_neutral'] }, + { desc: 'Discovering', sub: ['bt_disconnected'] }, + { desc: 'Discovered', sub: ['bt_disconnected'] }, + { desc: 'Unconnected', sub: ['bt_disconnected'] }, + { desc: 'Connecting', sub: ['bt_disconnected'] }, + { + desc: 'Connected', + sub: ['bt_connected', 'play_arrow', 'bt_playing', 'pause', 'stop'], + }, + { desc: 'Disconnecting', sub: ['bt_disconnected'] }, +]; + +const pillcolors = { + MESSAGING_INFO: 'badge-success', + MESSAGING_WARNING: 'badge-warning', + MESSAGING_ERROR: 'badge-danger', +}; +const connectReturnCode = { + UPDATE_CONNECTION_OK : 0, + UPDATE_FAILED_ATTEMPT : 1, + UPDATE_USER_DISCONNECT : 2, + UPDATE_LOST_CONNECTION : 3, + UPDATE_FAILED_ATTEMPT_AND_RESTORE : 4 +} +const taskStates = { + 0: 'eRunning', + + /*! < A task is querying the state of itself, so must be running. */ + 1: 'eReady', + + /*! < The task being queried is in a read or pending ready list. */ + 2: 'eBlocked', + + /*! < The task being queried is in the Blocked state. */ + 3: 'eSuspended', + + /*! < The task being queried is in the Suspended state, or is in the Blocked state with an infinite time out. */ + 4: 'eDeleted', +}; + +window.hideSurrounding = function(obj){ + $(obj).parent().parent().hide() +} + +window.handleReboot = function(ota){ + if(ota){ + $('#reboot_ota_nav').removeClass('active'); delayReboot(500,'', true); + } + else { + $('#reboot_nav').removeClass('active'); delayReboot(500,'', false); + } +} + +function handlebtstate(data) { + let icon = ''; + let tt = ''; + if (data.bt_status !== undefined && data.bt_sub_status !== undefined) { + const iconsvg = btStateIcons[data.bt_status].sub[data.bt_sub_status]; + if (iconsvg) { + icon = `#${btIcons[iconsvg]}`; + tt = btStateIcons[data.bt_status].desc; + } else { + icon = `#${btIcons.bt_connected}`; + tt = 'Output status'; + } + } + $('#o_type').title = tt; + $('#o_bt').attr('xlink:href',icon); + + +} +function handleTemplateTypeRadio(outtype) { + if (outtype === 'bt') { + $('#bt').prop('checked', true); + $('#o_bt').attr('display', 'inline'); + $('#o_spdif').attr('display', 'none'); + $('#o_i2s').attr('display', 'none'); + output = 'bt'; + } else if (outtype === 'spdif') { + $('#spdif').prop('checked', true); + $('#o_bt').attr('display', 'none'); + $('#o_spdif').attr('display', 'inline'); + $('#o_i2s').attr('display', 'none'); + output = 'spdif'; + } else { + $('#i2s').prop('checked', true); + $('#o_bt').attr('display', 'none'); + $('#o_spdif').attr('display', 'none'); + $('#o_i2s').attr('display', 'inline'); + output = 'i2s'; + } +} + +function handleExceptionResponse(xhr, _ajaxOptions, thrownError) { + console.log(xhr.status); + console.log(thrownError); + enableStatusTimer = true; + if (thrownError !== '') { + showLocalMessage(thrownError, 'MESSAGING_ERROR'); + } +} +function HideCmdMessage(cmdname) { + $('#toast_' + cmdname).css('display', 'none'); + $('#toast_' + cmdname) + .removeClass('table-success') + .removeClass('table-warning') + .removeClass('table-danger') + .addClass('table-success'); + $('#msg_' + cmdname).html(''); +} +function showCmdMessage(cmdname, msgtype, msgtext, append = false) { + let color = 'table-success'; + if (msgtype === 'MESSAGING_WARNING') { + color = 'table-warning'; + } else if (msgtype === 'MESSAGING_ERROR') { + color = 'table-danger'; + } + $('#toast_' + cmdname).css('display', 'block'); + $('#toast_' + cmdname) + .removeClass('table-success') + .removeClass('table-warning') + .removeClass('table-danger') + .addClass(color); + let escapedtext = msgtext + .substring(0, msgtext.length - 1) + .encodeHTML() + .replace(/\n/g, '
'); + escapedtext = + ($('#msg_' + cmdname).html().length > 0 && append + ? $('#msg_' + cmdname).html() + '
' + : '') + escapedtext; + $('#msg_' + cmdname).html(escapedtext); +} + +const releaseURL = + 'https://api.github.com/repos/sle118/squeezelite-esp32/releases'; +let recovery = false; +var enableStatusTimer = true; +const commandHeader = 'squeezelite -b 500:2000 -d all=info -C 30 -W'; +let otapct, otadsc; +let blockAjax = false; +let blockFlashButton = false; +let apList = null; +//let selectedSSID = ''; +//let checkStatusInterval = null; +let messagecount = 0; +let messageseverity = 'MESSAGING_INFO'; +let StatusIntervalActive = false; +let LastRecoveryState = null; +let SystemConfig={}; +let LastCommandsState = null; +var output = ''; +let hostName = ''; +let versionName='SqueezeESP32'; +let appTitle=versionName; +let ConnectedToSSID={}; +let ConnectingToSSID={}; +const ConnectingToActions = { + 'CONN' : 0,'MAN' : 1,'STS' : 2, +} + +Promise.prototype.delay = function(duration) { + return this.then( + function(value) { + return new Promise(function(resolve) { + setTimeout(function() { + resolve(value); + }, duration); + }); + }, + function(reason) { + return new Promise(function(_resolve, reject) { + setTimeout(function() { + reject(reason); + }, duration); + }); + } + ); +}; +// function stopCheckStatusInterval() { +// if (checkStatusInterval != null) { +// clearTimeout(checkStatusInterval); +// checkStatusInterval = null; +// } +// StatusIntervalActive = false; +// } + + +function startCheckStatusInterval() { + StatusIntervalActive = true; + setTimeout(checkStatus, 3000); +} + + +function RepeatCheckStatusInterval() { + if (StatusIntervalActive) { + startCheckStatusInterval(); + } +} + +function getConfigJson(slimMode) { + const config = {}; + $('input.nvs').each(function(_index, entry) { + if (!slimMode) { + const nvsType = parseInt(entry.attributes.nvs_type.value, 10); + if (entry.id !== '') { + config[entry.id] = {}; + if ( + nvsType === nvsTypes.NVS_TYPE_U8 || + nvsType === nvsTypes.NVS_TYPE_I8 || + nvsType === nvsTypes.NVS_TYPE_U16 || + nvsType === nvsTypes.NVS_TYPE_I16 || + nvsType === nvsTypes.NVS_TYPE_U32 || + nvsType === nvsTypes.NVS_TYPE_I32 || + nvsType === nvsTypes.NVS_TYPE_U64 || + nvsType === nvsTypes.NVS_TYPE_I64 + ) { + config[entry.id].value = parseInt(entry.value); + } else { + config[entry.id].value = entry.value; + } + config[entry.id].type = nvsType; + } + } else { + config[entry.id] = entry.value; + } + }); + const key = $('#nvs-new-key').val(); + const val = $('#nvs-new-value').val(); + if (key !== '') { + if (!slimMode) { + config[key] = {}; + config[key].value = val; + config[key].type = 33; + } else { + config[key] = val; + } + } + return config; +} + +// eslint-disable-next-line no-unused-vars +function onFileLoad(elementId, event) { + let data = {}; + try { + data = JSON.parse(elementId.srcElement.result); + } catch (e) { + alert('Parsing failed!\r\n ' + e); + } + $('input.nvs').each(function(_index, entry) { + if (data[entry.id]) { + if (data[entry.id] !== entry.value) { + console.log( + 'Changed ' + entry.id + ' ' + entry.value + '==>' + data[entry.id] + ); + $(this).val(data[entry.id]); + } + } + }); +} + +// eslint-disable-next-line no-unused-vars +function onChooseFile(event, onLoadFileHandler) { + if (typeof window.FileReader !== 'function') { + throw "The file API isn't supported on this browser."; + } + const input = event.target; + if (!input) { + throw 'The browser does not properly implement the event object'; + } + if (!input.files) { + throw 'This browser does not support the `files` property of the file input.'; + } + if (!input.files[0]) { + return undefined; + } + const file = input.files[0]; + let fr = new FileReader(); + fr.onload = onLoadFileHandler; + fr.readAsText(file); + input.value = ''; +} +function delayReboot(duration, cmdname, ota = false) { + const url = ota ? '/reboot_ota.json' : '/reboot.json'; + $('tbody#tasks').empty(); + enableStatusTimer = false; + $('#tasks_sect').css('visibility', 'collapse'); + Promise.resolve({ cmdname: cmdname, url: url }) + .delay(duration) + .then(function(data) { + if (data.cmdname.length > 0) { + showCmdMessage( + data.cmdname, + 'MESSAGING_WARNING', + 'System is rebooting.\n', + true + ); + } else { + showLocalMessage('System is rebooting.\n', 'MESSAGING_WARNING'); + } + console.log('now triggering reboot'); + $.ajax({ + url: data.url, + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({ + timestamp: Date.now(), + }), + error: handleExceptionResponse, + complete: function() { + console.log('reboot call completed'); + enableStatusTimer = true; + Promise.resolve(data) + .delay(6000) + .then(function(rdata) { + if (rdata.cmdname.length > 0) { + HideCmdMessage(rdata.cmdname); + } + getCommands(); + getConfig(); + }); + }, + }); + }); +} +// eslint-disable-next-line no-unused-vars +window.saveAutoexec1 = function(apply) { + showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Saving.\n', false); + let commandLine = commandHeader + ' -n "' + $('#player').val() + '"'; + if (output === 'bt') { + commandLine += ' -o "BT" -R -Z 192000'; + showCmdMessage( + 'cfg-audio-tmpl', + 'MESSAGING_INFO', + 'Remember to configure the Bluetooth audio device name.\n', + true + ); + } else if (output === 'spdif') { + commandLine += ' -o SPDIF -Z 192000'; + } else { + commandLine += ' -o I2S'; + } + if ($('#optional').val() !== '') { + commandLine += ' ' + $('#optional').val(); + } + const data = { + timestamp: Date.now(), + }; + data.config = { + autoexec1: { value: commandLine, type: 33 }, + autoexec: { + value: $('#disable-squeezelite').prop('checked') ? '0' : '1', + type: 33, + }, + }; + + $.ajax({ + url: '/config.json', + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data), + error: handleExceptionResponse, + complete: function(response) { + if ( + response.responseText.result && + JSON.parse(response.responseText).result === 'OK' + ) { + showCmdMessage('cfg-audio-tmpl', 'MESSAGING_INFO', 'Done.\n', true); + if (apply) { + delayReboot(1500, 'cfg-audio-tmpl'); + } + } else if (response.responseText.result) { + showCmdMessage( + 'cfg-audio-tmpl', + 'MESSAGING_WARNING', + JSON.parse(response.responseText).Result + '\n', + true + ); + } else { + showCmdMessage( + 'cfg-audio-tmpl', + 'MESSAGING_ERROR', + response.statusText + '\n' + ); + } + console.log(response.responseText); + }, + }); + console.log('sent data:', JSON.stringify(data)); +} +window.handleDisconnect = function(){ + $.ajax({ + url: '/connect.json', + dataType: 'text', + method: 'DELETE', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({ + timestamp: Date.now(), + }), + }); +} + +window.handleConnect = function(){ + ConnectingToSSID.ssid = $('#manual_ssid').val(); + ConnectingToSSID.pwd = $('#manual_pwd').val(); + ConnectingToSSID.dhcpname = $('#dhcp-name2').val(); + $("*[class*='connecting']").hide(); + $('#ssid-wait').text(ConnectingToSSID.ssid); + $('.connecting').show(); + + $.ajax({ + url: '/connect.json', + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({ + timestamp: Date.now(), + ssid: ConnectingToSSID.ssid, + pwd: ConnectingToSSID.pwd + }), + error: handleExceptionResponse, + }); + + // now we can re-set the intervals regardless of result + startCheckStatusInterval(); + +} +$(document).ready(function() { + setTimeout(refreshAP,1500); + $('#WifiConnectDialog').on('shown.bs.modal', function () { + $("*[class*='connecting']").hide(); + if(ConnectingToSSID.Action!==ConnectingToActions.STS){ + $('.connecting-init').show(); + $('#manual_ssid').trigger('focus'); + } + else { + handleWifiDialog(); + } + }) + $('#WifiConnectDialog').on('hidden.bs.modal', function () { + $('#WifiConnectDialog input').val(''); + }) + + + $('input#show-commands')[0].checked = LastCommandsState === 1; + $('a[href^="#tab-commands"]').hide(); + $('#load-nvs').on('click', function() { + $('#nvsfilename').trigger('click'); + }); + $('#clear-syslog').on('click', function() { + messagecount = 0; + messageseverity = 'MESSAGING_INFO'; + $('#msgcnt').text(''); + $('#syslogTable').html(''); + }); + + $('#wifiTable').on('click','tr', function() { + ConnectingToSSID.Action=ConnectingToActions.CONN; + if($(this).children('td:eq(1)').text() == ConnectedToSSID.ssid){ + ConnectingToSSID.Action=ConnectingToActions.STS; + return; + } + if(!$(this).is(':last-child')){ + ConnectingToSSID.ssid=$(this).children('td:eq(1)').text(); + $('#manual_ssid').val(ConnectingToSSID.ssid); + } + else { + ConnectingToSSID.Action=ConnectingToActions.MAN; + ConnectingToSSID.ssid=''; + $('#manual_ssid').val(ConnectingToSSID.ssid); + } + }); + + // $('#cancel').on('click', function() { + // selectedSSID = ''; + // $('#connect').slideUp('fast', function() {}); + // $('#connect_manual').slideUp('fast', function() {}); + // $('#wifi').slideDown('fast', function() {}); + // }); + + // $('#manual_cancel').on('click', function() { + // selectedSSID = ''; + // $('#connect').slideUp('fast', function() {}); + // $('#connect_manual').slideUp('fast', function() {}); + // $('#wifi').slideDown('fast', function() {}); + // }); + + // $('#ok-details').on('click', function() { + // $('#connect-details').slideUp('fast', function() {}); + // $('#wifi').slideDown('fast', function() {}); + // }); + + $('#ok-credits').on('click', function() { + $('#credits').slideUp('fast', function() {}); + $('#app').slideDown('fast', function() {}); + }); + + $('#acredits').on('click', function(event) { + event.preventDefault(); + $('#app').slideUp('fast', function() {}); + $('#credits').slideDown('fast', function() {}); + }); + + // $('#disconnect').on('click', function() { + // $('#connect-details-wrap').addClass('blur'); + // $('#diag-disconnect').slideDown('fast', function() {}); + // }); + + // $('#no-disconnect').on('click', function() { + // $('#diag-disconnect').slideUp('fast', function() {}); + // $('#connect-details-wrap').removeClass('blur'); + // }); + + // $('#yes-disconnect').on('click', function() { + // stopCheckStatusInterval(); + // selectedSSID = ''; + + // $('#diag-disconnect').slideUp('fast', function() {}); + // $('#connect-details-wrap').removeClass('blur'); + + // $.ajax({ + // url: '/connect.json', + // dataType: 'text', + // method: 'DELETE', + // cache: false, + // contentType: 'application/json; charset=utf-8', + // data: JSON.stringify({ + // timestamp: Date.now(), + // }), + // }); + + // startCheckStatusInterval(); + + // $('#connect-details').slideUp('fast', function() {}); + // $('#wifi').slideDown('fast', function() {}); + // }); + $('input#show-commands').on('click', function() { + this.checked = this.checked ? 1 : 0; + if (this.checked) { + $('a[href^="#tab-commands"]').show(); + LastCommandsState = 1; + } else { + LastCommandsState = 0; + $('a[href^="#tab-commands"]').hide(); + } + }); + + $('input#show-nvs').on('click', function() { + this.checked = this.checked ? 1 : 0; + if (this.checked) { + $('*[href*="-nvs"]').show(); + } else { + $('*[href*="-nvs"]').hide(); + } + }); + + $('#save-as-nvs').on('click', function() { + const config = getConfigJson(true); + const a = document.createElement('a'); + a.href = URL.createObjectURL( + new Blob([JSON.stringify(config, null, 2)], { + type: 'text/plain', + }) + ); + a.setAttribute( + 'download', + 'nvs_config_' + hostName + '_' + Date.now() + 'json' + ); + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + }); + + $('#save-nvs').on('click', function() { + const headers = {}; + const data = { + timestamp: Date.now(), + }; + const config = getConfigJson(false); + data.config = config; + $.ajax({ + url: '/config.json', + dataType: 'text', + method: 'POST', + cache: false, + headers: headers, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data), + error: handleExceptionResponse, + }); + console.log('sent config JSON with headers:', JSON.stringify(headers)); + console.log('sent config JSON with data:', JSON.stringify(data)); + }); + $('#fwUpload').on('click', function() { + const uploadPath = '/flash.json'; + + if (!recovery) { + $('#flash-status').text('Rebooting to recovery. Please try again'); + window.handleReboot(false); + } + + const fileInput = document.getElementById('flashfilename').files; + if (fileInput.length === 0) { + alert('No file selected!'); + } else { + const file = fileInput[0]; + const xhttp = new XMLHttpRequest(); + xhttp.onreadystatechange = function() { + if (xhttp.readyState === 4) { + if (xhttp.status === 200) { + showLocalMessage(xhttp.responseText, 'MESSAGING_INFO'); + } else if (xhttp.status === 0) { + showLocalMessage( + 'Upload connection was closed abruptly!', + 'MESSAGING_ERROR' + ); + } else { + showLocalMessage( + xhttp.status + ' Error!\n' + xhttp.responseText, + 'MESSAGING_ERROR' + ); + } + } + }; + xhttp.open('POST', uploadPath, true); + xhttp.send(file); + } + enableStatusTimer = true; + }); + $('#flash').on('click', function() { + const data = { + timestamp: Date.now(), + }; + if (blockFlashButton) { + return; + } + blockFlashButton = true; + const url = $('#fwurl').val(); + data.config = { + fwurl: { + value: url, + type: 33, + }, + }; + + $.ajax({ + url: '/config.json', + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data), + error: handleExceptionResponse, + }); + enableStatusTimer = true; + }); + + $('[name=output-tmpl]').on('click', function() { + handleTemplateTypeRadio(this.id); + }); + + $('#fwcheck').on('click', function() { + $('#releaseTable').html(''); + $('#fwbranch').empty(); + $.getJSON(releaseURL, function(data) { + let i = 0; + const branches = []; + data.forEach(function(release) { + const namecomponents = release.name.split('#'); + const branch = namecomponents[3]; + if (!branches.includes(branch)) { + branches.push(branch); + } + }); + let fwb; + branches.forEach(function(branch) { + fwb += ''; + }); + $('#fwbranch').append(fwb); + + data.forEach(function(release) { + let url = ''; + release.assets.forEach(function(asset) { + if (asset.name.match(/\.bin$/)) { + url = asset.browser_download_url; + } + }); + const namecomponents = release.name.split('#'); + const ver = namecomponents[0]; + const idf = namecomponents[1]; + const cfg = namecomponents[2]; + const branch = namecomponents[3]; + + let body = release.body; + body = body.replace(/'/gi, '"'); + body = body.replace( + /[\s\S]+(### Revision Log[\s\S]+)### ESP-IDF Version Used[\s\S]+/, + '$1' + ); + body = body.replace(/- \(.+?\) /g, '- '); + const trclass = i++ > 6 ? ' hide' : ''; + $('#releaseTable').append( + "" + + "" + + ver + + '' + + '' + + new Date(release.created_at).toLocalShort() + + '' + + '' + + cfg + + '' + + '' + + idf + + '' + + '' + + branch + + '' + + "" + + '' + ); + }); + if (i > 7) { + $('#releaseTable').append( + "" + + "" + + "" + + '' + + '' + ); + $('#showallbutton').on('click', function() { + $('tr.hide').removeClass('hide'); + $('tr#showall').addClass('hide'); + }); + } + $('#searchfw').css('display', 'inline'); + }).fail(function() { + alert('failed to fetch release history!'); + }); + }); + + $('input#searchinput').on('input', function() { + const s = $('input#searchinput').val(); + const re = new RegExp(s, 'gi'); + if (s.length === 0) { + $('tr.release').removeClass('hide'); + } else if (s.length < 3) { + $('tr.release').addClass('hide'); + } else { + $('tr.release').addClass('hide'); + $('tr.release').each(function() { + $(this) + .find('td') + .each(function() { + if ( + $(this) + .html() + .match(re) + ) { + $(this) + .parent() + .removeClass('hide'); + } + }); + }); + } + }); + + $('#fwbranch').on('change', function() { + const branch = this.value; + const re = new RegExp('^' + branch + '$', 'gi'); + $('tr.release').addClass('hide'); + $('tr.release').each(function() { + $(this) + .find('td') + .each(function() { + console.log($(this).html()); + if ( + $(this) + .html() + .match(re) + ) { + $(this) + .parent() + .removeClass('hide'); + } + }); + }); + }); + + $('#boot-button').on('click', function() { + enableStatusTimer = true; + }); + $('#reboot-button').on('click', function() { + enableStatusTimer = true; + }); + + $('#updateAP').on('click', function() { + refreshAP(); + console.log('refresh AP'); + }); + + // first time the page loads: attempt to get the connection status and start the wifi scan + getConfig(); + getCommands(); + + // start timers + startCheckStatusInterval(); +}); + +// eslint-disable-next-line no-unused-vars +window.setURL = function(button) { + const url = button.dataset.url; + $('#fwurl').val(url); + + $('[data-url^="http"]') + .addClass('btn-success') + .removeClass('btn-danger'); + $('[data-url="' + url + '"]') + .addClass('btn-danger') + .removeClass('btn-success'); +} + +// function performConnect(conntype) { +// // stop the status refresh. This prevents a race condition where a status +// // request would be refreshed with wrong ip info from a previous connection +// // and the request would automatically shows as succesful. +// stopCheckStatusInterval(); + +// // stop refreshing wifi list + +// let pwd; +// let dhcpname; +// if (conntype === 'manual') { +// // Grab the manual SSID and PWD +// selectedSSID = $('#manual_ssid').val(); +// pwd = $('#manual_pwd').val(); +// dhcpname = $('#dhcp-name2').val(); +// } else { +// pwd = $('#pwd').val(); +// dhcpname = $('#dhcp-name1').val(); +// } + +// // reset connection +// $('#connect-success').hide(); +// $('#connect-fail').hide(); + +// $('#ok-connect').prop('disabled', true); +// $('#ssid-wait').text(selectedSSID); +// $('#connect').slideUp('fast', function() {}); +// $('#connect_manual').slideUp('fast', function() {}); + +// $.ajax({ +// url: '/connect.json', +// dataType: 'text', +// method: 'POST', +// cache: false, + +// // headers: { 'X-Custom-ssid': selectedSSID, 'X-Custom-pwd': pwd, 'X-Custom-host_name': dhcpname }, +// contentType: 'application/json; charset=utf-8', +// data: JSON.stringify({ +// timestamp: Date.now(), +// ssid: selectedSSID, +// pwd: pwd, +// host_name: dhcpname, +// }), +// error: handleExceptionResponse, +// }); + +// // now we can re-set the intervals regardless of result +// startCheckStatusInterval(); +// } + +function rssiToIcon(rssi) { + if (rssi >= -55) { + return `#signal-wifi-fill`; + } else if (rssi >= -60) { + return `#signal-wifi-3-fill`; + } else if (rssi >= -65) { + return `#signal-wifi-2-fill`; + } else if (rssi >= -70) { + return `#signal-wifi-1-fill`; + } else { + return `#signal-wifi-line`; + } +} + +function refreshAP() { + $.getJSON('/scan.json', async function() { + await sleep(2000); + $.getJSON('/ap.json', function(data) { + if (data.length > 0) { + // sort by signal strength + data.sort(function(a, b) { + const x = a.rssi; + const y = b.rssi; + // eslint-disable-next-line no-nested-ternary + return x < y ? 1 : x > y ? -1 : 0; + }); + apList = data; + refreshAPHTML2(apList); + + } + }); + }); +} +function formatAP(ssid, rssi, auth){ + return `${ssid} + + + + + + + + + + + `; +} +function refreshAPHTML2(data) { + let h = ''; + $('#wifiTable tr td:first-of-type').text(''); + $('#wifiTable tr').removeClass('table-success table-warning'); + if(data){ + data.forEach(function(e) { + h+=formatAP(e.ssid, e.rssi, e.auth); + }); + $('#wifiTable').html(h); + } + if($('.manual_add').length == 0){ + $('#wifiTable').append(formatAP('Manual add', 0,0)); + $('#wifiTable tr:last').addClass('table-light text-dark').addClass('manual_add'); + } + if(ConnectedToSSID.ssid && ( ConnectedToSSID.urc === connectReturnCode.UPDATE_CONNECTION_OK || ConnectedToSSID.urc === connectReturnCode.UPDATE_FAILED_ATTEMPT_AND_RESTORE )){ + const wifiSelector=`#wifiTable td:contains("${ConnectedToSSID.ssid}")`; + if($(wifiSelector).filter(function() {return $(this).text() === ConnectedToSSID.ssid; }).length==0){ + $('#wifiTable').prepend(`${formatAP(ConnectedToSSID.ssid, ConnectedToSSID.rssi ?? 0, 0)}`); + } + $(wifiSelector).filter(function() {return $(this).text() === ConnectedToSSID.ssid; }).siblings().first().html('✓').parent().addClass((ConnectedToSSID.urc === connectReturnCode.UPDATE_CONNECTION_OK?'table-success':'table-warning')); + $('span#foot-wifi').html(`, SSID: ${ConnectedToSSID.ssid}, IP: ${ConnectedToSSID.ip}`); + $('#wifiStsIcon').attr('xlink:href',rssiToIcon(ConnectedToSSID.rssi)); + } + else { + $('span#foot-wifi').html(''); + } + +} +function showTask(task) { + console.debug( + this.toLocaleString() + + '\t' + + task.nme + + '\t' + + task.cpu + + '\t' + + taskStates[task.st] + + '\t' + + task.minstk + + '\t' + + task.bprio + + '\t' + + task.cprio + + '\t' + + task.num + ); + $('tbody#tasks').append( + '' + + task.num + + '' + + task.nme + + '' + + task.cpu + + '' + + taskStates[task.st] + + '' + + task.minstk + + '' + + task.bprio + + '' + + task.cprio + + '' + ); +} +function getMessages() { + $.getJSON('/messages.json?1', async function(data) { + for (const msg of data) { + const msgAge = msg.current_time - msg.sent_time; + var msgTime = new Date(); + msgTime.setTime(msgTime.getTime() - msgAge); + switch (msg.class) { + case 'MESSAGING_CLASS_OTA': + // message: "{"ota_dsc":"Erasing flash complete","ota_pct":0}" + var otaData = JSON.parse(msg.message); + if ((otaData.ota_pct ?? 0) !== 0) { + otapct = otaData.ota_pct; + $('.progress-bar') + .css('width', otapct + '%') + .attr('aria-valuenow', otapct); + $('.progress-bar').html(otapct + '%'); + } + if ((otaData.ota_dsc ??'') !== '') { + otadsc = otaData.ota_dsc; + $('span#flash-status').html(otadsc); + if (msg.type === 'MESSAGING_ERROR' || otapct > 95) { + blockFlashButton = false; + enableStatusTimer = true; + } + } + break; + case 'MESSAGING_CLASS_STATS': + // for task states, check structure : task_state_t + var statsData = JSON.parse(msg.message); + console.debug( + msgTime.toLocalShort() + + ' - Number of running tasks: ' + + statsData.ntasks + ); + console.debug( + msgTime.toLocalShort() + + '\tname' + + '\tcpu' + + '\tstate' + + '\tminstk' + + '\tbprio' + + '\tcprio' + + '\tnum' + ); + if (statsData.tasks) { + if ($('#tasks_sect').css('visibility') === 'collapse') { + $('#tasks_sect').css('visibility', 'visible'); + } + $('tbody#tasks').html(''); + statsData.tasks + .sort(function(a, b) { + return b.cpu - a.cpu; + }) + .forEach(showTask, msgTime); + } else if ($('#tasks_sect').css('visibility') === 'visible') { + $('tbody#tasks').empty(); + $('#tasks_sect').css('visibility', 'collapse'); + } + break; + case 'MESSAGING_CLASS_SYSTEM': + showMessage(msg, msgTime); + break; + case 'MESSAGING_CLASS_CFGCMD': + var msgparts = msg.message.split(/([^\n]*)\n(.*)/gs); + showCmdMessage(msgparts[1], msg.type, msgparts[2], true); + break; + case 'MESSAGING_CLASS_BT': + JSON.parse(msg.message).forEach(function(btEntry) { + showMessage({ type:msg.type, message:`BT Audio device found: ${btEntry.name} RSSI: ${btEntry.rssi} `}, msgTime); + }); + break; + default: + break; + } + } + }).fail(handleExceptionResponse); + + /* + Minstk is minimum stack space left +Bprio is base priority +cprio is current priority +nme is name +st is task state. I provided a "typedef" that you can use to convert to text +cpu is cpu percent used +*/ +} +function handleRecoveryMode(data) { + const locRecovery= data.recovery ??0; + if (LastRecoveryState !== locRecovery) { + LastRecoveryState = locRecovery; + $('input#show-nvs')[0].checked = LastRecoveryState === 1; + } + if ($('input#show-nvs')[0].checked) { + $('*[href*="-nvs"]').show(); + + } else { + $('*[href*="-nvs"]').hide(); + } + enableStatusTimer = true; + if (locRecovery === 1) { + recovery = true; + $('.recovery_element').show(); + $('.ota_element').hide(); + $('#boot-button').html('Reboot'); + $('#boot-form').attr('action', '/reboot_ota.json'); + } else { + recovery = false; + $('.recovery_element').hide(); + $('.ota_element').show(); + $('#boot-button').html('Recovery'); + $('#boot-form').attr('action', '/recovery.json'); + } +} +function hasConnectionChanged(data){ +// gw: "192.168.10.1" +// ip: "192.168.10.225" +// netmask: "255.255.255.0" +// ssid: "MyTestSSID" + + return (data.urc !== ConnectedToSSID.urc || + data.ssid !== ConnectedToSSID.ssid || + data.gw !== ConnectedToSSID.gw || + data.netmask !== ConnectedToSSID.netmask || + data.ip !== ConnectedToSSID.ip || data.rssi !== ConnectedToSSID.rssi ) +} +function handleWifiDialog(data){ + if($('#WifiConnectDialog').is(':visible')){ + if(ConnectedToSSID.ip) { + $('#ipAddress').text(ConnectedToSSID.ip); + } + if(ConnectedToSSID.ssid) { + $('#connectedToSSID' ).text(ConnectedToSSID.ssid); + } + if(ConnectedToSSID.gw) { + $('#gateway' ).text(ConnectedToSSID.gw); + } + if(ConnectedToSSID.netmask) { + $('#netmask' ).text(ConnectedToSSID.netmask); + } + if(ConnectingToSSID.Action===undefined || (ConnectingToSSID.Action && ConnectingToSSID.Action == ConnectingToActions.STS)) { + $("*[class*='connecting']").hide(); + $('.connecting-status').show(); + } + if(SystemConfig.ap_ssid){ + $('#apName').text(SystemConfig.ap_ssid); + } + if(SystemConfig.ap_pwd){ + $('#apPass').text(SystemConfig.ap_pwd); + } + if(!data) + { + return; + } + else { + switch (data.urc) { + case connectReturnCode.UPDATE_CONNECTION_OK: + if(data.ssid && data.ssid===ConnectingToSSID.ssid){ + $("*[class*='connecting']").hide(); + $('.connecting-success').show(); + ConnectingToSSID.Action = ConnectingToActions.STS; + } + break; + case connectReturnCode.UPDATE_FAILED_ATTEMPT: + // + if(ConnectingToSSID.Action !=ConnectingToActions.STS && ConnectingToSSID.ssid == data.ssid ){ + $("*[class*='connecting']").hide(); + $('.connecting-fail').show(); + } + break; + case connectReturnCode.UPDATE_LOST_CONNECTION: + + break; + case connectReturnCode.UPDATE_FAILED_ATTEMPT_AND_RESTORE: + if(ConnectingToSSID.Action !=ConnectingToActions.STS && ConnectingToSSID.ssid != data.ssid ){ + $("*[class*='connecting']").hide(); + $('.connecting-fail').show(); + } + break; + case connectReturnCode.UPDATE_USER_DISCONNECT: + // that's a manual disconnect + // if ($('#wifi-status').is(':visible')) { + // $('#wifi-status').slideUp('fast', function() {}); + // $('span#foot-wifi').html(''); + + // } + break; + default: + break; + } + } + + } +} +function handleWifiStatus(data) { + if(hasConnectionChanged(data)){ + ConnectedToSSID=data; + refreshAPHTML2(); + } + handleWifiDialog(data); +} + +function batteryToIcon(voltage) { + /* Assuming Li-ion 18650s as a power source, 3.9V per cell, or above is treated + as full charge (>75% of capacity). 3.4V is empty. The gauge is loosely + following the graph here: + https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages + using the 0.2C discharge profile for the rest of the values. + */ + if (voltage > 0) { + if (inRange(voltage, 5.8, 6.8) || inRange(voltage, 8.8, 10.2)) { + return `battery-low-line`; + } else if (inRange(voltage, 6.8, 7.4) || inRange(voltage, 10.2, 11.1)) { + return `battery-low-line`; + } else if ( + inRange(voltage, 7.4, 7.5) || + inRange(voltage, 11.1, 11.25) + ) { + return `battery-low-line`; + } else if ( + inRange(voltage, 7.5, 7.8) || + inRange(voltage, 11.25, 11.7) + ) { + return `battery-fill`; + } else { + return `battery-line`; + } + } +} +function checkStatus() { + RepeatCheckStatusInterval(); + if (!enableStatusTimer) { + return; + } + if (blockAjax) { + return; + } + blockAjax = true; + getMessages(); + $.getJSON('/status.json', function(data) { + handleRecoveryMode(data); + handleWifiStatus(data); + handlebtstate(data); + let pname = ''; + if (data.project_name && data.project_name !== '') { + pname = data.project_name; + } + if (data.version && data.version !== '') { + versionName=data.version; + appTitle= (versionName.toLowerCase().includes('squeezeamp')?"SqueezeAmp":"SqueezeESP32"); + $("#navtitle").text= `${appTitle}`; + $('span#foot-fw').html(`fw: ${versionName}, mode: ${pname}`); + } else { + $('span#flash-status').html(''); + } + if (data.Voltage) { + $('#battery').attr('xlink:href', `#${batteryToIcon(data.Voltage)}`); + $('#battery').show(); + } else { + $('#battery').hide(); + } + + $('#o_jack').attr('display', Number(data.Jack) ? 'inline' : 'none'); + blockAjax = false; + }).fail(function(xhr, ajaxOptions, thrownError) { + handleExceptionResponse(xhr, ajaxOptions, thrownError); + blockAjax = false; + }); +} +// eslint-disable-next-line no-unused-vars +window.runCommand = function(button, reboot) { + let cmdstring = button.attributes.cmdname.value; + showCmdMessage( + button.attributes.cmdname.value, + 'MESSAGING_INFO', + 'Executing.', + false + ); + const fields = document.getElementById('flds-' + cmdstring); + cmdstring += ' '; + if (fields) { + const allfields = fields.querySelectorAll('select,input'); + for (var i = 0; i < allfields.length; i++) { + const attr = allfields[i].attributes; + let qts = ''; + let opt = ''; + let isSelect = allfields[i].attributes.class.value === 'custom-select'; + if ((isSelect && allfields[i].selectedIndex !== 0) || !isSelect) { + if (attr.longopts.value !== 'undefined') { + opt += '--' + attr.longopts.value; + } else if (attr.shortopts.value !== 'undefined') { + opt = '-' + attr.shortopts.value; + } + + if (attr.hasvalue.value === 'true') { + if (allfields[i].value !== '') { + qts = /\s/.test(allfields[i].value) ? '"' : ''; + cmdstring += opt + ' ' + qts + allfields[i].value + qts + ' '; + } + } else { + // this is a checkbox + if (allfields[i].checked) { + cmdstring += opt + ' '; + } + } + } + } + } + console.log(cmdstring); + + const data = { + timestamp: Date.now(), + }; + data.command = cmdstring; + + $.ajax({ + url: '/commands.json', + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data), + error: handleExceptionResponse, + complete: function(response) { + // var returnedResponse = JSON.parse(response.responseText); + console.log(response.responseText); + if ( + response.responseText && + JSON.parse(response.responseText).Result === 'Success' && + reboot + ) { + delayReboot(2500, button.attributes.cmdname.value); + } + }, + }); + enableStatusTimer = true; +} +function getLongOps(data, name, longopts){ + return data.values[name]!==undefined?data.values[name][longopts]:""; +} +function getCommands() { + $.getJSON('/commands.json', function(data) { + console.log(data); + data.commands.forEach(function(command) { + if ($('#flds-' + command.name).length === 0) { + const cmdParts = command.name.split('-'); + const isConfig = cmdParts[0] === 'cfg'; + const targetDiv = '#tab-' + cmdParts[0] + '-' + cmdParts[1]; + let innerhtml = ''; + + // innerhtml+=''+(isConfig?'

':''); + innerhtml += + '
' + + command.help.encodeHTML().replace(/\n/g, '
') + + '
'; + innerhtml += '
'; + if (command.argtable) { + command.argtable.forEach(function(arg) { + let placeholder = arg.datatype || ''; + const ctrlname = command.name + '-' + arg.longopts; + const curvalue = getLongOps(data,command.name,arg.longopts); + + let attributes = 'hasvalue=' + arg.hasvalue + ' '; + + // attributes +='datatype="'+arg.datatype+'" '; + attributes += 'longopts="' + arg.longopts + '" '; + attributes += 'shortopts="' + arg.shortopts + '" '; + attributes += 'checkbox=' + arg.checkbox + ' '; + attributes += 'cmdname="' + command.name + '" '; + attributes += + 'id="' + + ctrlname + + '" name="' + + ctrlname + + '" hasvalue="' + + arg.hasvalue + + '" '; + let extraclass = arg.mincount > 0 ? 'bg-success' : ''; + if (arg.glossary === 'hidden') { + attributes += ' style="visibility: hidden;"'; + } + if (arg.checkbox) { + innerhtml += + '
'; + } else { + innerhtml += + '
'; + if (placeholder.includes('|')) { + extraclass = placeholder.startsWith('+') ? ' multiple ' : ''; + placeholder = placeholder + .replace('<', '') + .replace('=', '') + .replace('>', ''); + innerhtml += `'; + } else { + innerhtml += + ''; + } + innerhtml += + 'Previous value: ' + + (curvalue || '') + + ''; + } + innerhtml += '
'; + }); + } + innerhtml += '
'; + innerhtml += + ''; + if (isConfig) { + innerhtml += + ''; + innerhtml += + ''; + } else { + innerhtml += + ''; + } + innerhtml += '
'; + if (isConfig) { + $(targetDiv).append(innerhtml); + } else { + $('#commands-list').append(innerhtml); + } + } + }); + + data.commands.forEach(function(command) { + $('[cmdname=' + command.name + ']:input').val(''); + $('[cmdname=' + command.name + ']:checkbox').prop('checked', false); + if (command.argtable) { + command.argtable.forEach(function(arg) { + const ctrlselector = '#' + command.name + '-' + arg.longopts; + const ctrlValue = getLongOps(data,command.name,arg.longopts); + if (arg.checkbox) { + $(ctrlselector)[0].checked = ctrlValue; + } else { + if (ctrlValue !== undefined) { + $(ctrlselector) + .val(ctrlValue) + .trigger('change'); + } + if ( + $(ctrlselector)[0].value.length === 0 && + (arg.datatype || '').includes('|') + ) { + $(ctrlselector)[0].value = '--'; + } + } + }); + } + }); + }).fail(function(xhr, ajaxOptions, thrownError) { + handleExceptionResponse(xhr, ajaxOptions, thrownError); + $('#commands-list').empty(); + blockAjax = false; + }); +} + +function getConfig() { + $.getJSON('/config.json', function(entries) { + $('#nvsTable tr').remove(); + const data = (entries.config? entries.config : entries); + SystemConfig = data; + Object.keys(data) + .sort() + .forEach(function(key) { + let val = data[key].value; + if (key === 'autoexec') { + if (data.autoexec.value === '0') { + $('#disable-squeezelite')[0].checked = true; + } else { + $('#disable-squeezelite')[0].checked = false; + } + } else if (key === 'autoexec1') { + const re = /-o\s?(["][^"]*["]|[^-]+)/g; + const m = re.exec(val); + if (m[1].toUpperCase().startsWith('I2S')) { + handleTemplateTypeRadio('i2s'); + } else if (m[1].toUpperCase().startsWith('SPDIF')) { + handleTemplateTypeRadio('spdif'); + } else if (m[1].toUpperCase().startsWith('"BT')) { + handleTemplateTypeRadio('bt'); + } + } else if (key === 'host_name') { + val = val.replaceAll('"', ''); + $('input#dhcp-name1').val(val); + $('input#dhcp-name2').val(val); + $('#player').val(val); + document.title = val; + hostName = val; + } + $('tbody#nvsTable').append( + '' + + '' + + key + + '' + + "" + + "" + ); + if (entries.gpio) { + $('tbody#gpiotable tr').remove(); + entries.gpio.forEach(function(gpioEntry) { + $('tbody#gpiotable').append( + '' + + gpioEntry.group + + '' + + gpioEntry.name + + '' + + gpioEntry.gpio + + '' + + (gpioEntry.fixed ? 'Fixed' : 'Configuration') + + '' + ); + }); + } + }).fail(function(xhr, ajaxOptions, thrownError) { + handleExceptionResponse(xhr, ajaxOptions, thrownError); + blockAjax = false; + }); +} +function showLocalMessage(message, severity) { + const msg = { + message: message, + type: severity, + }; + showMessage(msg, new Date()); +} + +function showMessage(msg, msgTime) { + let color = 'table-success'; + + if (msg.type === 'MESSAGING_WARNING') { + color = 'table-warning'; + if (messageseverity === 'MESSAGING_INFO') { + messageseverity = 'MESSAGING_WARNING'; + } + } else if (msg.type === 'MESSAGING_ERROR') { + if ( + messageseverity === 'MESSAGING_INFO' || + messageseverity === 'MESSAGING_WARNING' + ) { + messageseverity = 'MESSAGING_ERROR'; + } + color = 'table-danger'; + } + if (++messagecount > 0) { + $('#msgcnt').removeClass('badge-success'); + $('#msgcnt').removeClass('badge-warning'); + $('#msgcnt').removeClass('badge-danger'); + $('#msgcnt').addClass(pillcolors[messageseverity]); + $('#msgcnt').text(messagecount); + } + + $('#syslogTable').append( + "" + + '' + + msgTime.toLocalShort() + + '' + + '' + + msg.message.encodeHTML() + + '' + + '' + ); +} + +function inRange(x, min, max) { + return (x - min) * (x - max) <= 0; +} + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + diff --git a/components/wifi-manager/webapp/src/js/test.js b/components/wifi-manager/webapp/src/js/test.js new file mode 100644 index 00000000..214df1cd --- /dev/null +++ b/components/wifi-manager/webapp/src/js/test.js @@ -0,0 +1,135 @@ +let sd = {}; +let rf=false; +function getStatus() { + const config = {}; + window.$(`#valuesTable input:text, #valuesTable input:checked`).each(function(_index, entry) { + switch (entry.attributes.dtype.value) { + case 'string': + config[entry.name] = entry.value; + break; + case 'number': + config[entry.name] = Number(entry.value); + break; + case 'boolean': + config[entry.name] = entry.value=='true'; + break; + default: + break; + } + + }); + return config; + } + + // function getOptions(entry) { + // let output=''; + // for (const property in entry) { + // output+=``; + // } + // return output; + // } + function getRadioButton(entry){ + let output=''; + for (const property in sd[entry]) { + output+=` +
+ + +
+ `; + } + return output; + + } + + window.refreshStatus = function() { + if(Object.keys(sd).length>0){ + if(rf) return; + rf=true; + window.$.getJSON('/status.json', function(data) { + for (const property in data) { + const val = data[property]; + let input = $(`#val_${property}, #valuesTable input[name="${property}"]`) ; + if(input.length>0){ + if(input.is(':radio') ){ + $(`#${property}_${val ?? 0}`).prop('checked',true); + } + else { + if(input.val() !==val && !input.is(":focus")){ + input.val(val); + } + } + + } + else { + + if(sd[property]){ + window.$('#valuesTable').append( + `${property} + + ${getRadioButton(property)} + `); + $(`#${property}_${val ?? 0}`).prop('checked',true); + } + else { + window.$('#valuesTable').append(`${property}`); + window.$(`#val_${property}`).val(val); + } + + + } + + } + }) + .fail(function() { + + }) + .done(function(){ + rf=false; + }); + + } + else { + window.$.getJSON('/statusdefinition.json', function(data) { + sd=data; + }) + .fail(function() { + + }) + .done(function(){ + }); + } + + } + function pushStatus(){ + const data = { + timestamp: Date.now(), + status: getStatus() + }; + window.$.ajax({ + url: '/status.json', + dataType: 'text', + method: 'POST', + cache: false, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify(data), + }); + console.log('sent config JSON with data:', JSON.stringify(data)); + } + + window.$(document).ready(function() { + window.$('#save_status').on('click', function() { + pushStatus(); + }); + window.$( "#valuesTable" ).change(function() { + pushStatus(); + }); + + setInterval(window.refreshStatus, 1000); + $('svg >> symbol').each(function() { + $('#allIcons').append( ` + + `); + }); + + }) ; diff --git a/components/wifi-manager/webapp/src/sass/layout/_features.scss b/components/wifi-manager/webapp/src/sass/layout/_features.scss new file mode 100644 index 00000000..bec35c4a --- /dev/null +++ b/components/wifi-manager/webapp/src/sass/layout/_features.scss @@ -0,0 +1,34 @@ +.features:hover { + cursor: pointer; + animation: jello-horizontal 1.2s; +} + +@keyframes jello-horizontal { + 0% { + transform: scale3d(1, 1, 1); + } + + 30% { + transform: scale3d(1.25, .75, 1); + } + + 40% { + transform: scale3d(.75, 1.25, 1); + } + + 50% { + transform: scale3d(1.15, .85, 1); + } + + 65% { + transform: scale3d(.95, 1.05, 1); + } + + 75% { + transform: scale3d(1.05, .95, 1); + } + + 100% { + transform: scale3d(1, 1, 1); + } +} diff --git a/components/wifi-manager/webapp/src/sass/main.scss b/components/wifi-manager/webapp/src/sass/main.scss new file mode 100644 index 00000000..a8c52a45 --- /dev/null +++ b/components/wifi-manager/webapp/src/sass/main.scss @@ -0,0 +1,5 @@ +@import 'themes/darkly'; +@import "utils/style"; +@import "utils/mixins"; +@import "setup/normalize"; +@import "layout/features"; diff --git a/components/wifi-manager/webapp/src/sass/setup/_normalize.scss b/components/wifi-manager/webapp/src/sass/setup/_normalize.scss new file mode 100644 index 00000000..e6e73053 --- /dev/null +++ b/components/wifi-manager/webapp/src/sass/setup/_normalize.scss @@ -0,0 +1,348 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: .67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: .35em .75em .625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/components/wifi-manager/webapp/src/sass/themes/_darkly.scss b/components/wifi-manager/webapp/src/sass/themes/_darkly.scss new file mode 100644 index 00000000..15cb8b25 --- /dev/null +++ b/components/wifi-manager/webapp/src/sass/themes/_darkly.scss @@ -0,0 +1,3 @@ +@import "~bootswatch/dist/darkly/variables"; +@import "~bootstrap/scss/bootstrap"; +@import "~bootswatch/dist/darkly/bootswatch"; diff --git a/components/wifi-manager/webapp/src/sass/utils/_mixins.scss b/components/wifi-manager/webapp/src/sass/utils/_mixins.scss new file mode 100644 index 00000000..583b8295 --- /dev/null +++ b/components/wifi-manager/webapp/src/sass/utils/_mixins.scss @@ -0,0 +1,24 @@ + +/* Device = Most of the Smartphones Mobiles (Portrait) */ +$screen-xxs-min: 320px; +$screen-xxs-max: 480px; + +/* Device = Low Resolution Tablets, Mobiles (Landscape) */ +$screen-xs-min: 481px; +$screen-xs-max: 767px; + +/* Device = Tablets, Ipads (portrait) */ +$screen-sm-min: 768px; +$screen-sm-max: 1024px; + +/* Device = Laptops, Desktops */ +$screen-md-min: 1025px; +$screen-md-max: 1280px; + +/* Device = Desktops */ +$screen-lg-min: 1281px; +$screen-lg-max: 1440px; + +/* Higher Resolution Screens */ +$screen-xlg-min: 1441px; +$screen-xlg-max: 2560px; diff --git a/components/wifi-manager/res/style.css b/components/wifi-manager/webapp/src/sass/utils/_style.css similarity index 89% rename from components/wifi-manager/res/style.css rename to components/wifi-manager/webapp/src/sass/utils/_style.css index b6b6686d..687897b1 100644 --- a/components/wifi-manager/res/style.css +++ b/components/wifi-manager/webapp/src/sass/utils/_style.css @@ -14,6 +14,9 @@ a:hover { color: #99f; text-decoration: none } +.glyphicon { + font-size: 18px; +} input:focus, select:focus, textarea:focus, @@ -133,43 +136,36 @@ h3 { float: right; margin-right: 20px; } -.w0 { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTJDBGvsAAABzUlEQVRIS+WUTShEURTH3zyRhjQ+8hWxmCJMoSzEwsbCgi1LZRYW9pONptiwka9iI81CWFpYaEqNMkVKmpWN1IhYKN9ZDL/z3p3mxZh5g9X4168799xz/vPefedeLeuVC+3gdTgc07CsmCQ2DI2gg21Jci30wSpGt/CeghickTsHPVACDkgqp67rPgpO4E0ZZMIj7OHhxSvPtEyomcVDeFXJv+EZNvEsNa01rZfAuSUhThR2wU+ObJkbyhRNMMDaDIThBqy1MdZ3wAPawqfFC2Lj0Ab5kpBGxdAJs9TeW72ITUhCPZMjFYwwbwXpnkwlDzOIx50yXwP5c0MeggHGanNqSDqqBqQ7/Kxvg2zHAfMN8IE8uZhYO6eBnBXGKnOakLWfaQZ9jMRjSPXhZUuC5A9JjVFpKkeNSVVA0Tq8KJN0yFl4gilqbW2tm+SQKoybXIG8jcT34RSsh1Byt6iVg2ZLlRCg6JpROqEDpFheXZ5S9rcLFsl5YJwHad+MVA5y13w5lRY5oRsKjdm/Vz/7LR86zG+5wr+9NX+iOowjEO+aELEic+lv1ILppeUPosRst6QduTANgnE2mC+BnYswI1VwfYzCCL9dZij7pWkf6UeSTYAuE/QAAAAASUVORK5CYII=') no-repeat right top; +/* .w0 { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTJDBGvsAAABzUlEQVRIS+WUTShEURTH3zyRhjQ+8hWxmCJMoSzEwsbCgi1LZRYW9pONptiwka9iI81CWFpYaEqNMkVKmpWN1IhYKN9ZDL/z3p3mxZh5g9X4168799xz/vPefedeLeuVC+3gdTgc07CsmCQ2DI2gg21Jci30wSpGt/CeghickTsHPVACDkgqp67rPgpO4E0ZZMIj7OHhxSvPtEyomcVDeFXJv+EZNvEsNa01rZfAuSUhThR2wU+ObJkbyhRNMMDaDIThBqy1MdZ3wAPawqfFC2Lj0Ab5kpBGxdAJs9TeW72ITUhCPZMjFYwwbwXpnkwlDzOIx50yXwP5c0MeggHGanNqSDqqBqQ7/Kxvg2zHAfMN8IE8uZhYO6eBnBXGKnOakLWfaQZ9jMRjSPXhZUuC5A9JjVFpKkeNSVVA0Tq8KJN0yFl4gilqbW2tm+SQKoybXIG8jcT34RSsh1Byt6iVg2ZLlRCg6JpROqEDpFheXZ5S9rcLFsl5YJwHad+MVA5y13w5lRY5oRsKjdm/Vz/7LR86zG+5wr+9NX+iOowjEO+aELEic+lv1ILppeUPosRst6QduTANgnE2mC+BnYswI1VwfYzCCL9dZij7pWkf6UeSTYAuE/QAAAAASUVORK5CYII=') no-repeat left top; height: 24px; - margin-right: 20px; } .w1 { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAAHiSURBVEhL5dRPKINxHMfxPVskpA35F3FYEVasHBYHFwcHrhyVZ8vBfblIceEi/4qLtINwdHCQUpQVKcnJRYqIg/J3OYz399nv0YPNtuzEt149+31/v+/n4fGYLVHpup4Rnyregd+K27TIghe63+8fx7wySqsPdbAj3qzha0MOV6ETiwTd4u0HUZxydgrtKISGj0xreG4gEAgycIRXFZCOR2yTQZSebeaa4Q1s7iOiDv/GM1bJLDJv0EHjzHLAdIFNjHBGHpkbxUo9utmbQBg3sM5G2d+AR24w82XznN4QmpGjXrCExRkXfJhk9t6aRW9YDtSwOFDNE9ZNyFLzKRczOegh406FL8ElG8JDM8S1Qtaq7KhEO0Y0TVtHGHusVxCEDy5oMLNqyVrgWm5kqaYw3mdVdmqQsENE8JbAPbY43yszMqiyHOr66QayL5XH0DJeVEgyUTxhjNmPR/vtBpZyc3hHDZohV5DfRvq7OMYtrDdZY7YwFpG8yhBi6JrrMFogww7IT1mOVsxy5oHrNIqRVpWgDtnGKn7log35xurfVxfPW/7QYT57Ybz7mapqgk9gvjU79ApiW5mpRkIvLTe4oJfyK5lKOQndgvG/wXoOSb8I061Svj4G0M9nZ6z198tmeweYtIrMYP17VAAAAABJRU5ErkJggg==') no-repeat right top; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAAHiSURBVEhL5dRPKINxHMfxPVskpA35F3FYEVasHBYHFwcHrhyVZ8vBfblIceEi/4qLtINwdHCQUpQVKcnJRYqIg/J3OYz399nv0YPNtuzEt149+31/v+/n4fGYLVHpup4Rnyregd+K27TIghe63+8fx7wySqsPdbAj3qzha0MOV6ETiwTd4u0HUZxydgrtKISGj0xreG4gEAgycIRXFZCOR2yTQZSebeaa4Q1s7iOiDv/GM1bJLDJv0EHjzHLAdIFNjHBGHpkbxUo9utmbQBg3sM5G2d+AR24w82XznN4QmpGjXrCExRkXfJhk9t6aRW9YDtSwOFDNE9ZNyFLzKRczOegh406FL8ElG8JDM8S1Qtaq7KhEO0Y0TVtHGHusVxCEDy5oMLNqyVrgWm5kqaYw3mdVdmqQsENE8JbAPbY43yszMqiyHOr66QayL5XH0DJeVEgyUTxhjNmPR/vtBpZyc3hHDZohV5DfRvq7OMYtrDdZY7YwFpG8yhBi6JrrMFogww7IT1mOVsxy5oHrNIqRVpWgDtnGKn7log35xurfVxfPW/7QYT57Ybz7mapqgk9gvjU79ApiW5mpRkIvLTe4oJfyK5lKOQndgvG/wXoOSb8I061Svj4G0M9nZ6z198tmeweYtIrMYP17VAAAAABJRU5ErkJggg==') no-repeat left top; height: 24px; - margin-right: 20px; } .w2 { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAAHkSURBVEhL3dRLKERRGMDxuSPSkLzyilgo8iiUhVjYWFiwZancmSzsZSPFho28io1kISwtLKQURZGSrGykiFgo7yyG/zdzznRm5iK5Sk79uvd85/u++5hzx2Pb9q9yDLrJMWhIRB1sv98/ghlliFAXyuGFU21IbECSi9CKORrd4O0TQZyQO45mZMJCpKfZ3BcIBPooOMSravAdD9ikB63sJN1XN69kcQ8vKvknnrBMzyx9gRYCp0aCdo51DJIjr6wU2UoF2lkbxS6uYdYGWV9DtVxgMmbxjFg/apEM/ZQfyUADxqi9M3sRG5CEEib7KnjMvAaye2IbfUVupoMet6r5PDL0YjXBBY4Fai5kRxVCdscg66uQ17HDfAl9kDuXJzB3Thk5sxzzZa6DumHknN3QS+IBPvvh5ZVskN8ZU5+gz3XAlELRIp5Vk6/It/CIYWrjXm3URCkleUsV6iaXkKeR+DaOYH6EkrtCrXxoUf2iJoY8LFB0xXEA9ZBieXS5S3m/jZgi557jBGT7xvWKCxhyIP81ka/SgQ9NSDViURyDbvpTo82yrAPscl4HKxR1aRTT+BhvyhaxtPCSO6OKphfGBc6JZYaX3BnpNN1AUC7AfBrJoRUXR67X6+1BN+fp4dD/Hx7PO4o9VGuAapKIAAAAAElFTkSuQmCC') no-repeat right top; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEQAACxEBf2RfkQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAAHkSURBVEhL3dRLKERRGMDxuSPSkLzyilgo8iiUhVjYWFiwZancmSzsZSPFho28io1kISwtLKQURZGSrGykiFgo7yyG/zdzznRm5iK5Sk79uvd85/u++5hzx2Pb9q9yDLrJMWhIRB1sv98/ghlliFAXyuGFU21IbECSi9CKORrd4O0TQZyQO45mZMJCpKfZ3BcIBPooOMSravAdD9ikB63sJN1XN69kcQ8vKvknnrBMzyx9gRYCp0aCdo51DJIjr6wU2UoF2lkbxS6uYdYGWV9DtVxgMmbxjFg/apEM/ZQfyUADxqi9M3sRG5CEEib7KnjMvAaye2IbfUVupoMet6r5PDL0YjXBBY4Fai5kRxVCdscg66uQ17HDfAl9kDuXJzB3Thk5sxzzZa6DumHknN3QS+IBPvvh5ZVskN8ZU5+gz3XAlELRIp5Vk6/It/CIYWrjXm3URCkleUsV6iaXkKeR+DaOYH6EkrtCrXxoUf2iJoY8LFB0xXEA9ZBieXS5S3m/jZgi557jBGT7xvWKCxhyIP81ka/SgQ9NSDViURyDbvpTo82yrAPscl4HKxR1aRTT+BhvyhaxtPCSO6OKphfGBc6JZYaX3BnpNN1AUC7AfBrJoRUXR67X6+1BN+fp4dD/Hx7PO4o9VGuAapKIAAAAAElFTkSuQmCC') no-repeat left top; height: 24px; - margin-right: 20px; } .w3 { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAACAElEQVRIS7XUP0gbYRjH8VSpiBZJWvEflXYQKtqACg6ig4uDg651LPQSHLpLlyDoUhdpVdBFxEG0YwcHCQgRFJSCFKcuUohY6iC0VYtD9PuE9w3vXZ74h16HD3fv733e53KX9y7ied5/pYZhUkPHQ3TBSyQS7zFvTBC9RivKoK3NCwZS3IxBLNLoBFc3yOEbtR/Qj8d4gEJPt3lVMpkcY8E+Lk2D+/iDTXrQyquwfW3zdiZ38dcU/4tzrNHzib3AAMGhU2BlsYFxauSRtaDWaMMwc1PYwU+4a3PMryMuF5gJTH4ne4dOVMLeZSkx9GCatb/cXmQpKXjOYM+EB4w7ILsn2Og28mNe0ePUNF9CzE7GCZc5NpmxkB31FLI7xpn/DHkc24xXMQb55XIH7s55Qc0Cx0YZ29A2LJyzG95S+AU3/fHySNLUjwTWl9tzG7iqWbSCC9PkNvIunGGStUWP1jcwWijOmIW2yTHkbiTfwle4L6HUfmKtvGi+fr6BowHLLPrBMYVuyGK5dfmV8nx7MUvNb44fIdu3qFdR4KiDfGsKb6WiCn145GQ+ahgmNQyTGpYwxPOWP3qHc/mE+76apaih4hmND2B3TYasJlCjUkPFS5oeORfIkhVtSY0aKqI0TSP/bjCew10+hPf6D+r5fIziDefRwFxJahgmNQyPF7kGEsc1es+A2E4AAAAASUVORK5CYII=') no-repeat right top; + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAACAElEQVRIS7XUP0gbYRjH8VSpiBZJWvEflXYQKtqACg6ig4uDg651LPQSHLpLlyDoUhdpVdBFxEG0YwcHCQgRFJSCFKcuUohY6iC0VYtD9PuE9w3vXZ74h16HD3fv733e53KX9y7ied5/pYZhUkPHQ3TBSyQS7zFvTBC9RivKoK3NCwZS3IxBLNLoBFc3yOEbtR/Qj8d4gEJPt3lVMpkcY8E+Lk2D+/iDTXrQyquwfW3zdiZ38dcU/4tzrNHzib3AAMGhU2BlsYFxauSRtaDWaMMwc1PYwU+4a3PMryMuF5gJTH4ne4dOVMLeZSkx9GCatb/cXmQpKXjOYM+EB4w7ILsn2Og28mNe0ePUNF9CzE7GCZc5NpmxkB31FLI7xpn/DHkc24xXMQb55XIH7s55Qc0Cx0YZ29A2LJyzG95S+AU3/fHySNLUjwTWl9tzG7iqWbSCC9PkNvIunGGStUWP1jcwWijOmIW2yTHkbiTfwle4L6HUfmKtvGi+fr6BowHLLPrBMYVuyGK5dfmV8nx7MUvNb44fIdu3qFdR4KiDfGsKb6WiCn145GQ+ahgmNQyTGpYwxPOWP3qHc/mE+76apaih4hmND2B3TYasJlCjUkPFS5oeORfIkhVtSY0aKqI0TSP/bjCew10+hPf6D+r5fIziDefRwFxJahgmNQyPF7kGEsc1es+A2E4AAAAASUVORK5CYII=') no-repeat left top; height: 24px; - margin-right: 20px; -} -.pw { - background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTJDBGvsAAABIUlEQVRIS+3VsU7CUBTGcYhBJCwqwcmEJ2DkCQgzb8ADmLgYWXTzMVjcGNjYGEAXgoSRhTg5OroYIyFY/h+hWGwvtzQ0LpzkF8i5l/uRQ2kTjuPEKrC5T79vzHWJO4wxwzeGuMY5AitsQBFvmEObvNQboQBfhQk4gQ5wD+zgBrcYrHrSwzE2KkxAHVrQWB6QgiqJLB7xA+2pYaNsAWm8QAsa0Sn+1gU+oT1NHGFdtoAcJtBCSw1DuaPqQiNdly0gj1doQaMwleavPc+IJUDffKeADO7Rxxe08A4dEOQD2qPXJ1xh+VuYAirQVaNGFFPov2MM0OXm/UAUZRwCtjoEWP1vQBXuLTgKPYRKMAacoY0oIboDNLB8+PgC4hLY3B8nsQCQEf56jLJoQAAAAABJRU5ErkJggg==') no-repeat right top; +} */ +/* .pw { + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAACxIAAAsSAdLdfvwAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTJDBGvsAAABIUlEQVRIS+3VsU7CUBTGcYhBJCwqwcmEJ2DkCQgzb8ADmLgYWXTzMVjcGNjYGEAXgoSRhTg5OroYIyFY/h+hWGwvtzQ0LpzkF8i5l/uRQ2kTjuPEKrC5T79vzHWJO4wxwzeGuMY5AitsQBFvmEObvNQboQBfhQk4gQ5wD+zgBrcYrHrSwzE2KkxAHVrQWB6QgiqJLB7xA+2pYaNsAWm8QAsa0Sn+1gU+oT1NHGFdtoAcJtBCSw1DuaPqQiNdly0gj1doQaMwleavPc+IJUDffKeADO7Rxxe08A4dEOQD2qPXJ1xh+VuYAirQVaNGFFPov2MM0OXm/UAUZRwCtjoEWP1vQBXuLTgKPYRKMAacoY0oIboDNLB8+PgC4hLY3B8nsQCQEf56jLJoQAAAAABJRU5ErkJggg==') no-repeat left top; height: 24px; - margin-right: 20px; - height: 24px; - margin-right: 30px; -} +} */ /* SpinKit is licensed under the MIT License. Copyright (c) 2015 Tobias Ahlin */ - .spinner { width: 40px; height: 40px; + position: relative; margin: 100px auto; -} -.double-bounce1, -.double-bounce2 { + } + + .double-bounce1, .double-bounce2 { width: 100%; height: 100%; border-radius: 50%; @@ -178,35 +174,34 @@ h3 { position: absolute; top: 0; left: 0; - -webkit-animation: sk-bounce 2.0s infinite ease-in-out; - animation: sk-bounce 2.0s infinite ease-in-out; -} -.double-bounce2 { + + -webkit-animation: bounce 2.0s infinite ease-in-out; + animation: bounce 2.0s infinite ease-in-out; + } + + .double-bounce2 { -webkit-animation-delay: -1.0s; animation-delay: -1.0s; -} -@-webkit-keyframes sk-bounce { - 0%, 100% { - -webkit-transform: scale(0.0) + } + + @-webkit-keyframes bounce { + 0%, 100% { -webkit-transform: scale(0.0) } + 50% { -webkit-transform: scale(1.0) } + } + + @keyframes bounce { + 0%, 100% { + transform: scale(0.0); + -webkit-transform: scale(0.0); + } 50% { + transform: scale(1.0); + -webkit-transform: scale(1.0); } - 50% { - -webkit-transform: scale(1.0) - } -} -@keyframes sk-bounce { - 0%, 100% { - transform: scale(0.0); - -webkit-transform: scale(0.0); - } - 50% { - transform: scale(1.0); - -webkit-transform: scale(1.0); - } -} + } /* end of SpinKit */ /* daduke stuff */ -input[type='text'], input[type='password'], textarea { +input[type='text'], input[type='password'], textarea, select, option { background: #999; border: 0; padding: 4px; @@ -259,8 +254,8 @@ input[type='text'], input[type='password'], textarea { .custom-switch .custom-control-input:checked ~ .custom-control-label::after { background-color: #fff; - -webkit-transform: translateX(1.5rem); //translateX(0.75rem); - transform: translateX(1.5rem); //translateX(0.75rem); + -webkit-transform: translateX(1.5rem); + transform: translateX(1.5rem); } textarea#autoexec1, textarea#fwurl, div#upload { @@ -314,12 +309,13 @@ span#flash-status { font-size: 120%; } -#info { +/* #info { padding-top: 7px; float: right; -} + display: grid; +} */ -svg#battery { +/* svg#battery { fill: #ddd; } @@ -331,15 +327,20 @@ svg#output { svg#jack { fill: #ddd; padding-right: 4px; -} - +} */ +/* ul#navbar { border-bottom: 0px; } +.navbar-nav { + float: left; + margin: 0; + padding-top: 1rem; +} #content { border-top: 1px solid black; -} +} */ .footer { position: fixed; @@ -365,12 +366,6 @@ td.value { #boot-div { float: right; } - -iframe#dummyframe { - float: right; - border: none; -} - div#message { display: none; color: #000; diff --git a/components/wifi-manager/webapp/src/test.ejs b/components/wifi-manager/webapp/src/test.ejs new file mode 100644 index 00000000..890b1f60 --- /dev/null +++ b/components/wifi-manager/webapp/src/test.ejs @@ -0,0 +1,122 @@ + + + + + esp32-wifi-manager testing + + + + + + +
+ <% if (htmlWebpackPlugin.files.sprites) { %> + <% for (var spriteFileName in htmlWebpackPlugin.files.sprites) { %> + <%= htmlWebpackPlugin.files.sprites[spriteFileName] %> + <% } %> + <% } %> +
+
+
+
Status Variables
+
+ + + + + + + + + +
VariableValue
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#BT StateSub state #Sub state
0Idle0bt_neutral
1Discovering0bt_searching
2Discovered0bt_searching
3Unconnected0bt_disabled
4Connecting0bt_disabled
5Connected0bt_connected
1play_circle_outline
2bt_playing
3pause
4stop
6Disconnecting0bt_neutral
+
+ + + \ No newline at end of file diff --git a/components/wifi-manager/webapp/src/test.ts b/components/wifi-manager/webapp/src/test.ts new file mode 100644 index 00000000..03c27ef7 --- /dev/null +++ b/components/wifi-manager/webapp/src/test.ts @@ -0,0 +1,23 @@ +import 'bootstrap'; +import '../src/sass/main.scss'; +import './js/test.js'; +import '../node_modules/remixicon/icons/Device/signal-wifi-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-3-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-2-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-1-fill.svg'; +import '../node_modules/remixicon/icons/Device/signal-wifi-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-low-line.svg'; +import '../node_modules/remixicon/icons/Device/battery-fill.svg'; + +import '../node_modules/remixicon/icons/Media/headphone-fill.svg'; +import '../node_modules/remixicon/icons/Device/device-recover-fill.svg'; +import '../node_modules/remixicon/icons/Device/bluetooth-fill.svg'; +import '../node_modules/remixicon/icons/Device/bluetooth-connect-fill.svg'; +import '../node_modules/remixicon/icons/Media/stop-circle-fill.svg'; +import '../node_modules/remixicon/icons/Media/stop-circle-line.svg'; +import '../node_modules/remixicon/icons/Logos/google-play-fill.svg'; +import '../node_modules/remixicon/icons/Media/pause-fill.svg'; +import '../node_modules/remixicon/icons/Media/stop-fill.svg'; +import '../node_modules/remixicon/icons/System/lock-fill.svg'; +import '../node_modules/remixicon/icons/System/lock-unlock-fill.svg'; diff --git a/components/wifi-manager/webapp/test.js b/components/wifi-manager/webapp/test.js new file mode 100644 index 00000000..f294cef9 --- /dev/null +++ b/components/wifi-manager/webapp/test.js @@ -0,0 +1,55 @@ +const stats=''; +// Merges webpack.common config with this production config +const fs = require('fs'); +const glob = require('glob'); +var getDirectories = function (src, callback) { +glob(src + '/**/*.gz', callback); +}; +getDirectories('./webpack/', function (err, list) { +if (err) { + console.log('Error', err); +} else { + const regex = /^(.*\/)([^\/]*)$/ + const relativeRegex = /(\w+\/[^\/]*)$/ + const makePathRegex = /([^\.].*)$/ + let exportDefHead= + '/***********************************\n'+ + 'webpack_headers\n'+ + stats+'\n'+ + '***********************************/\n'+ + '#pragma once\n'+ + '#include \n'+ + 'extern const char * resource_lookups[];\n'+ + 'extern const uint8_t * resource_map_start[];\n'+ + 'extern const uint8_t * resource_map_end[];\n'; + let exportDef= '// Automatically generated. Do not edit manually!.\n'+ + '#include \n'; + let lookupDef='const char * resource_lookups[] = {\n'; + let lookupMapStart='const uint8_t * resource_map_start[] = {\n'; + let lookupMapEnd='const uint8_t * resource_map_end[] = {\n'; + let cMake=''; + list.forEach(fileName=>{ + console.log(fileName); + let exportName=fileName.match(regex)[2].replace(/[\. \-]/gm,'_'); + let relativeName=fileName.match(relativeRegex)[1]; + exportDef+= 'extern const uint8_t '+exportName+'_start[] asm("_binary_'+exportName+'_start");\n'+ + 'extern const uint8_t '+exportName+'_end[] asm("_binary_'+exportName+'_end");\n'; + lookupDef+='\t"/'+relativeName+'",\n'; + lookupMapStart+='\t'+ exportName+'_start,\n'; + lookupMapEnd+= '\t'+ exportName+'_end,\n'; + cMake+='target_add_binary_data( __idf_wifi-manager ./webapp'+fileName.match(makePathRegex)[1]+' BINARY)\n'; + + }); + lookupDef+='""\n};\n'; + lookupMapStart=lookupMapStart.substring(0,lookupMapStart.length-2)+'\n};\n'; + lookupMapEnd=lookupMapEnd.substring(0,lookupMapEnd.length-2)+'\n};\n'; + try { + fs.writeFileSync('webapp.cmake', cMake); + fs.writeFileSync('webpack.c', exportDef+lookupDef+lookupMapStart+lookupMapEnd); + fs.writeFileSync('webpack.h', exportDefHead); + //file written successfully + } catch (err) { + console.error(err); + } +} +}); diff --git a/components/wifi-manager/webapp/test.txt b/components/wifi-manager/webapp/test.txt new file mode 100644 index 00000000..e2e7bf40 --- /dev/null +++ b/components/wifi-manager/webapp/test.txt @@ -0,0 +1 @@ +Some content! \ No newline at end of file diff --git a/components/wifi-manager/webapp/test/test.js b/components/wifi-manager/webapp/test/test.js new file mode 100644 index 00000000..8ee4f8ed --- /dev/null +++ b/components/wifi-manager/webapp/test/test.js @@ -0,0 +1,8 @@ +var assert = require('assert'); +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal([1, 2, 3].indexOf(4), -1); + }); + }); +}); \ No newline at end of file diff --git a/components/wifi-manager/webapp/tsconfig.json b/components/wifi-manager/webapp/tsconfig.json new file mode 100644 index 00000000..4cafcb7c --- /dev/null +++ b/components/wifi-manager/webapp/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "paths": { "*": ["types/*"] }, + "outDir": "./dist/", + "noImplicitAny": true, + "sourceMap": true, + "module": "es6", + "target": "es2018", + "composite": true, +// "jsx": "react", + "allowJs": true + }, + "exclude": [ + "./node_modules" + ] +} diff --git a/components/wifi-manager/webapp/tslint.json b/components/wifi-manager/webapp/tslint.json new file mode 100644 index 00000000..8de125c2 --- /dev/null +++ b/components/wifi-manager/webapp/tslint.json @@ -0,0 +1,22 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "eofline": false, + "no-trailing-whitespace": false, + "comment-format": false, + "quotemark": false, + "no-console": false, + "one-line": false, + "no-consecutive-blank-lines": false, + "curly": false, + "ordered-imports": [false], + "object-literal-sort-keys": [false], + "only-arrow-functions": false, + "indent": false + }, + "rulesDirectory": [] +} diff --git a/components/wifi-manager/webapp/webapp.cmake b/components/wifi-manager/webapp/webapp.cmake new file mode 100644 index 00000000..369e8368 --- /dev/null +++ b/components/wifi-manager/webapp/webapp.cmake @@ -0,0 +1,5 @@ +target_add_binary_data( __idf_wifi-manager ./webapp/webpack/dist/favicon-32x32.png BINARY) +target_add_binary_data( __idf_wifi-manager ./webapp/webpack/dist/index.html.gz BINARY) +target_add_binary_data( __idf_wifi-manager ./webapp/webpack/dist/js/index.e644c0.bundle.js.gz BINARY) +target_add_binary_data( __idf_wifi-manager ./webapp/webpack/dist/js/node-modules.e644c0.bundle.js.gz BINARY) +target_add_binary_data( __idf_wifi-manager ./webapp/webpack/dist/js/runtime.e644c0.bundle.js.gz BINARY) diff --git a/components/wifi-manager/webapp/webpack.c b/components/wifi-manager/webapp/webpack.c new file mode 100644 index 00000000..056f3a9d --- /dev/null +++ b/components/wifi-manager/webapp/webpack.c @@ -0,0 +1,34 @@ +// Automatically generated. Do not edit manually!. +#include +extern const uint8_t _favicon_32x32_png_start[] asm("_binary_favicon_32x32_png_start"); +extern const uint8_t _favicon_32x32_png_end[] asm("_binary_favicon_32x32_png_end"); +extern const uint8_t _index_html_gz_start[] asm("_binary_index_html_gz_start"); +extern const uint8_t _index_html_gz_end[] asm("_binary_index_html_gz_end"); +extern const uint8_t _index_e644c0_bundle_js_gz_start[] asm("_binary_index_e644c0_bundle_js_gz_start"); +extern const uint8_t _index_e644c0_bundle_js_gz_end[] asm("_binary_index_e644c0_bundle_js_gz_end"); +extern const uint8_t _node_modules_e644c0_bundle_js_gz_start[] asm("_binary_node_modules_e644c0_bundle_js_gz_start"); +extern const uint8_t _node_modules_e644c0_bundle_js_gz_end[] asm("_binary_node_modules_e644c0_bundle_js_gz_end"); +extern const uint8_t _runtime_e644c0_bundle_js_gz_start[] asm("_binary_runtime_e644c0_bundle_js_gz_start"); +extern const uint8_t _runtime_e644c0_bundle_js_gz_end[] asm("_binary_runtime_e644c0_bundle_js_gz_end"); +const char * resource_lookups[] = { + "/dist/favicon-32x32.png", + "/dist/index.html.gz", + "/js/index.e644c0.bundle.js.gz", + "/js/node-modules.e644c0.bundle.js.gz", + "/js/runtime.e644c0.bundle.js.gz", +"" +}; +const uint8_t * resource_map_start[] = { + _favicon_32x32_png_start, + _index_html_gz_start, + _index_e644c0_bundle_js_gz_start, + _node_modules_e644c0_bundle_js_gz_start, + _runtime_e644c0_bundle_js_gz_start +}; +const uint8_t * resource_map_end[] = { + _favicon_32x32_png_end, + _index_html_gz_end, + _index_e644c0_bundle_js_gz_end, + _node_modules_e644c0_bundle_js_gz_end, + _runtime_e644c0_bundle_js_gz_end +}; diff --git a/components/wifi-manager/webapp/webpack.h b/components/wifi-manager/webapp/webpack.h new file mode 100644 index 00000000..6f63d91b --- /dev/null +++ b/components/wifi-manager/webapp/webpack.h @@ -0,0 +1,72 @@ +/*********************************** +webpack_headers +Hash: e644c04d107606ae748d +Version: webpack 4.44.2 +Time: 6267ms +Built at: 2020-12-21 10 h 59 min 46 s + Asset Size Chunks Chunk Names + ./js/index.e644c0.bundle.js 230 KiB 0 [emitted] [immutable] index + ./js/index.e644c0.bundle.js.br 31.3 KiB [emitted] + ./js/index.e644c0.bundle.js.gz 40.9 KiB [emitted] + ./js/node-modules.e644c0.bundle.js 265 KiB 1 [emitted] [immutable] [big] node-modules +./js/node-modules.e644c0.bundle.js.br 76.2 KiB [emitted] +./js/node-modules.e644c0.bundle.js.gz 88.6 KiB [emitted] + ./js/runtime.e644c0.bundle.js 1.46 KiB 2 [emitted] [immutable] runtime + ./js/runtime.e644c0.bundle.js.br 644 bytes [emitted] + ./js/runtime.e644c0.bundle.js.gz 722 bytes [emitted] + favicon-32x32.png 578 bytes [emitted] + index.html 19.5 KiB [emitted] + index.html.br 4.48 KiB [emitted] + index.html.gz 5.46 KiB [emitted] + sprite.svg 4.4 KiB [emitted] + sprite.svg.br 912 bytes [emitted] +Entrypoint index [big] = ./js/runtime.e644c0.bundle.js ./js/node-modules.e644c0.bundle.js ./js/index.e644c0.bundle.js + [6] ./node_modules/bootstrap/dist/js/bootstrap-exposed.js 437 bytes {1} [built] +[11] ./src/sass/main.scss 1.55 KiB {0} [built] +[16] ./node_modules/remixicon/icons/Device/signal-wifi-fill.svg 340 bytes {1} [built] +[17] ./node_modules/remixicon/icons/Device/signal-wifi-3-fill.svg 344 bytes {1} [built] +[18] ./node_modules/remixicon/icons/Device/signal-wifi-2-fill.svg 344 bytes {1} [built] +[19] ./node_modules/remixicon/icons/Device/signal-wifi-1-fill.svg 344 bytes {1} [built] +[20] ./node_modules/remixicon/icons/Device/signal-wifi-line.svg 340 bytes {1} [built] +[21] ./node_modules/remixicon/icons/Device/battery-line.svg 332 bytes {1} [built] +[22] ./node_modules/remixicon/icons/Device/battery-low-line.svg 340 bytes {1} [built] +[23] ./node_modules/remixicon/icons/Device/battery-fill.svg 332 bytes {1} [built] +[24] ./node_modules/remixicon/icons/Media/headphone-fill.svg 335 bytes {1} [built] +[25] ./node_modules/remixicon/icons/Device/device-recover-fill.svg 346 bytes {1} [built] +[26] ./node_modules/remixicon/icons/Device/bluetooth-fill.svg 336 bytes {1} [built] +[27] ./node_modules/remixicon/icons/Device/bluetooth-connect-fill.svg 352 bytes {1} [built] +[37] ./src/index.ts + 1 modules 52.6 KiB {0} [built] + | ./src/index.ts 1.36 KiB [built] + | ./src/js/custom.js 51.2 KiB [built] + + 23 hidden modules + +WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). +This can impact web performance. +Assets: + ./js/node-modules.e644c0.bundle.js (265 KiB) + +WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance. +Entrypoints: + index (497 KiB) + ./js/runtime.e644c0.bundle.js + ./js/node-modules.e644c0.bundle.js + ./js/index.e644c0.bundle.js + + +WARNING in webpack performance recommendations: +You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application. +For more info visit https://webpack.js.org/guides/code-splitting/ +Child html-webpack-plugin for "index.html": + Asset Size Chunks Chunk Names + index.html 556 KiB 0 + Entrypoint undefined = index.html + [0] ./node_modules/html-webpack-plugin/lib/loader.js!./src/index.ejs 21.1 KiB {0} [built] + [1] ./node_modules/lodash/lodash.js 530 KiB {0} [built] + [2] (webpack)/buildin/global.js 472 bytes {0} [built] + [3] (webpack)/buildin/module.js 497 bytes {0} [built] +***********************************/ +#pragma once +#include +extern const char * resource_lookups[]; +extern const uint8_t * resource_map_start[]; +extern const uint8_t * resource_map_end[]; diff --git a/components/wifi-manager/webapp/webpack/cmdline.js b/components/wifi-manager/webapp/webpack/cmdline.js new file mode 100644 index 00000000..e69de29b diff --git a/components/wifi-manager/webapp/webpack/postcss.config.js b/components/wifi-manager/webapp/webpack/postcss.config.js new file mode 100644 index 00000000..434504de --- /dev/null +++ b/components/wifi-manager/webapp/webpack/postcss.config.js @@ -0,0 +1,9 @@ +module.exports = { + parser: 'sugarss', + // syntax: 'postcss-scss', + plugins: { + 'postcss-import': {}, + 'postcss-cssnext': {}, + cssnano: {} + } + } \ No newline at end of file diff --git a/components/wifi-manager/webapp/webpack/webpack.common.js b/components/wifi-manager/webapp/webpack/webpack.common.js new file mode 100644 index 00000000..11c6d832 --- /dev/null +++ b/components/wifi-manager/webapp/webpack/webpack.common.js @@ -0,0 +1,231 @@ +/* eslint-disable */ +// Common Config is used in Development and Production Mode. +const path = require('path'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const webpack = require('webpack'); +const HtmlWebPackPlugin = require('html-webpack-plugin'); +const LodashModuleReplacementPlugin = require('lodash-webpack-plugin'); +const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); +const StylelintPlugin = require('stylelint-webpack-plugin'); +const ESLintPlugin = require('eslint-webpack-plugin'); +const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); +// Linting +const TSLintPlugin = require('tslint-webpack-plugin'); + + +module.exports = { + entry: { + index: './src/index.ts' + }, + output: { + path: path.resolve(__dirname, 'dist'), + filename: './js/[name].[hash:6].bundle.js' + }, + module: { + rules: [ + // Raw Loader + { + test: /\.txt$/, + use: 'raw-loader' + }, + // HTML Loader + { + test: /\.html$/, + use: [ + { + loader: 'html-loader', + options: {minimize: true} + } + ] + }, + // CSS/SCSS Loader & Minimizer + { + test: /\.(sa|sc|c)ss$/, + use: [ + "style-loader", + "css-loader", + { + loader: 'postcss-loader', + options: { + postcssOptions: { + parser: "sugarss", + }, + }, + }, + { + loader: 'resolve-url-loader', + options: {} + }, + { + loader: 'sass-loader', + options: { + sourceMap: true, + sourceMapContents: false + + } + } + ], + + }, + { + test: /\.svg$/, + use: [ + { + loader: 'svg-sprite-loader', + options: { + extract: true, + } }, + 'svg-transform-loader', + { + loader: 'svgo-loader', + options: { + plugins: [ + {removeTitle: true}, + {convertColors: {shorthex: false}}, + {convertPathData: false}, + {convertPathData:true} + ] + } + } + ] + }, + // Image Loader + { + test: /\.(png|jpeg|jpg|webp|gif|ico)/i, + use: [ + { + loader: 'url-loader', + options: { + // publicPath: '../', + name: './assets/images/' + '[name].[ext]', + limit: 10000, + publicPath: '../' + } + + }, + ] + }, + // Babel Loader + { + test: /\.ts(x?)$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.m?js$/, + exclude: /(node_modules|bower_components)/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env'], + plugins: [ + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-proposal-nullish-coalescing-operator', + '@babel/plugin-proposal-optional-chaining', + '@babel/plugin-proposal-class-properties' + ] + } + }, + }, + // XML Loader + { + test: /\.xml$/, + use: [ + 'xml-loader' + ] + }, + { + test: require.resolve("bootstrap"), + loader: "expose-loader", + options: { + exposes: ["bootstrap"], + }, + }, + { + test: require.resolve("jquery"), + loader: "expose-loader", + options: { + exposes: ["$", "jQuery"], + }, + }, + { + test: require.resolve("underscore"), + loader: "expose-loader", + options: { + exposes: [ + "_.map|map", + { + globalName: "_.reduce", + moduleLocalName: "reduce", + }, + { + globalName: ["_", "filter"], + moduleLocalName: "filter", + }, + ], + }, + }, + + ] + }, + resolve: { + extensions: ['.js', '.jsx', '.tsx', '.ts', '.json'], + alias: { + riSvg: 'remixicon/icons/' + } + }, + + plugins: [ + new CleanWebpackPlugin(), + new ESLintPlugin({ + cache: true, + ignore: true, + useEslintrc: true, + }), + new HtmlWebPackPlugin({ + title: 'SqueezeESP32', + template: './src/index.ejs', + filename: 'index.html', + inject: 'body', + minify: { + html5 : true, + collapseWhitespace : true, + minifyCSS : true, + minifyJS : true, + minifyURLs : false, + removeAttributeQuotes : true, + removeComments : true, // false for Vue SSR to find app placeholder + removeEmptyAttributes : true, + removeOptionalTags : true, + removeRedundantAttributes : true, + removeScriptTypeAttributes : true, + removeStyleLinkTypeAttributese : true, + useShortDoctype : true + }, + favicon: "./src/assets/images/favicon-32x32.png", + excludeChunks: ['test'], + }), + + new ScriptExtHtmlWebpackPlugin({ + defaultAttribute: 'defer' + }), + + // // Load Lodash Features Separately https://www.npmjs.com/package/lodash-webpack-plugin + new LodashModuleReplacementPlugin({ + 'collections': true, + 'paths': true, + }), + new TSLintPlugin({ + files: ['./src/ts/*.ts'] + }), + new StylelintPlugin( { + files: ['./src/sass/*.s?(a|c)ss'], + configFile: './config/.stylelintrc', + emitError: true, + emitWarning: true, + failOnError: false, + fix: true + }), + new SpriteLoaderPlugin({plainSprite: true}) + ], +}; diff --git a/components/wifi-manager/webapp/webpack/webpack.dev.js b/components/wifi-manager/webapp/webpack/webpack.dev.js new file mode 100644 index 00000000..59f3e4a1 --- /dev/null +++ b/components/wifi-manager/webapp/webpack/webpack.dev.js @@ -0,0 +1,235 @@ +/* eslint-disable */ +var path = require('path'); +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); +const bodyParser = require('body-parser') +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const { config } = require('process'); +const HtmlWebPackPlugin = require('html-webpack-plugin'); +const SpriteLoaderPlugin = require('svg-sprite-loader/plugin'); +const { Command } = require('commander'); +let cmdLines= { }; +const data = { + messages: require("../mock/messages.json"), + messagequeue: require("../mock/messages.json"), + commands: require("../mock/commands.json"), + scan: require("../mock/scan.json"), + ap: require("../mock/ap.json"), + config: require("../mock/config.json"), + statusdefinition: require("../mock/statusdefinition.json"), + status: require("../mock/status.json") +}; +const messagingTypes= { + MESSAGING_INFO : 'MESSAGING_INFO', + MESSAGING_WARNING : 'MESSAGING_WARNING', + MESSAGING_ERROR : 'MESSAGING_ERROR' +}; +const messagingClass= { + MESSAGING_CLASS_OTA : 'MESSAGING_CLASS_OTA', + MESSAGING_CLASS_SYSTEM : 'MESSAGING_CLASS_SYSTEM', + MESSAGING_CLASS_STATS : 'MESSAGING_CLASS_STATS', + MESSAGING_CLASS_CFGCMD: 'MESSAGING_CLASS_CFGCMD', + MESSAGING_CLASS_BT: 'MESSAGING_CLASS_BT' +} ; +function requeueMessages(){ + data.messagequeue.push(...data.messages); + console.log(`Re-queued ${data.messages.length} messages. Total queue length is: ${data.messagequeue.length}`); +} +function sendMessaging(cmdname,msgtype,msgClass,msg){ + let message_txt=`${cmdname}\n${msg}`; + var d = new Date(); + var n = d.getMilliseconds(); + data.messagequeue.push({ + message: message_txt, + type: msgtype, + class: msgClass, + sent_time: n, + current_time: n}); + console.log(`Queued message ~${data.messagequeue.length} type ${msgtype}, class ${msgClass}: ${message_txt}`); +} +Array.prototype.filter = function(fun /*, thisp*/) { + var len = this.length >>> 0; + if (typeof fun != "function") + throw new TypeError(); + + var res = []; + var thisp = arguments[1]; + for (var i = 0; i < len; i++) { + if (i in this) { + var val = this[i]; + if (fun.call(thisp, val, i, this)) + res.push(val); + } + } + return res; + }; +for(const cmdIdx in data.commands.commands){ + const cmd = data.commands.commands[cmdIdx]; + //console.log(`Creating command structure for ${cmd.name}`); + cmdLines[cmd.name] = { + cmd: new Command(), + }; + cmdLines[cmd.name].cmd + .storeOptionsAsProperties(false) + .name(cmd.name) + .exitOverride(); + for(const argIdx in cmd.argtable){ + const arg=cmd.argtable[argIdx]; + const optstr=((arg.shortopts?'-'+arg.shortopts:'')+ + (arg.shortopts && arg.longopts?', ':'')+ + (arg.longopts?'--'+arg.longopts:'') + + (arg.hasvalue?`${(arg.shortopts || arg.longopts?' ':'')}<${arg.datatype.replace(/[<>]/gm,'')}>`:'')); + //console.log(` Option: ${optstr}, Glossary: ${arg.glossary}`); + if(arg.mincount>0){ + cmdLines[cmd.name].cmd.requiredOption( optstr,arg.glossary); + } + else { + cmdLines[cmd.name].cmd.option( optstr,arg.glossary); + } + } +} +const connectReturnCode = { + UPDATE_CONNECTION_OK : 0, + UPDATE_FAILED_ATTEMPT : 1, + UPDATE_USER_DISCONNECT : 2, + UPDATE_LOST_CONNECTION : 3, + UPDATE_FAILED_ATTEMPT_AND_RESTORE : 4 + } +module.exports = merge(common, { + mode: 'development', + devtool: 'inline-source-map', + entry: { + test: './src/test.ts' + }, + devServer: { + contentBase: path.join(__dirname, 'dist'), + publicPath: '/', + port: 9100, + host: 'desktop-n8u8515',//your ip address + disableHostCheck: true, + overlay: true, + + before: function(app) { + app.use(bodyParser.json()) // for parsing application/json + app.use(bodyParser.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded + app.get('/ap.json', function(req, res) { res.json( data.ap ); }); + app.get('/scan.json', function(req, res) { res.json( data.scan ); }); + app.get('/config.json', function(req, res) { res.json( data.config ); }); + app.get('/status.json', function(req, res) { res.json( data.status ); }); + app.get('/messages.json', function(req, res) { + res.json( data.messagequeue ) ; + data.messagequeue=[]; + }); + + app.get('/statusdefinition.json', function(req, res) { res.json( data.statusdefinition ); }); + app.get('/commands.json', function(req, res) { res.json( data.commands ); }); + app.post('/commands.json', function(req, res) { + console.log(req.body.command); + try { + const cmdName=req.body.command.split(" ")[0]; + const args=('node '+req.body.command).split(" "); + let cmd=cmdLines[cmdName].cmd; + if(cmd){ + cmd.parse(args); + const msg=`Received Options: ${JSON.stringify(cmd.opts())}\n`; + console.log('Options: ', cmd.opts()); + console.log('Remaining arguments: ', cmd.args); + sendMessaging(cmdName,messagingTypes.MESSAGING_INFO,messagingClass.MESSAGING_CLASS_CFGCMD,msg); + } + } catch (error) { + console.error(error); + } + res.json( { 'Result' : 'Success' } ); + }); + app.post('/config.json', function(req, res) { + console.log(req.body); + console.log(data.config); + for (const property in req.body.config) { + console.log(`${property}: ${req.body.config[property].value}`); + if(data.config[property]=== undefined){ + console.log(`Added config value ${property} [${req.body.config[property].value}]`); + data.config[property] = {value: req.body.config[property].value}; + } + else if (data.config[property].value!=req.body.config[property].value){ + console.log(`Updated config value ${property}\nFrom: ${data.config[property].value}\nTo: ${req.body.config[property].value}]`); + data.config[property].value=req.body.config[property].value; + } + } + res.json( {} ); + }); + app.post('/status.json', function(req, res) { + + for (const property in req.body.status) { + if(data.status[property]=== undefined){ + console.log(`Added status value ${property} [${req.body.status[property]}]`); + data.status[property] = {value: req.body.status[property]}; + } + else if (data.status[property]!==req.body.status[property]){ + console.log(`Updated status value ${property}\nFrom: ${data.status[property]}\nTo: ${req.body.status[property]}`); + data.status[property]=req.body.status[property]; + } + } + res.json( {} ); + }); + app.post('/connect.json', function(req, res) { + setTimeout(function(r){ + if(r.body.ssid.search('fail')>=0){ + if(data.status.ssid){ + // in this case, the same ssid will be reused - the ESP32 would restore its previous state on failure + data.status.urc=connectReturnCode.UPDATE_FAILED_ATTEMPT_AND_RESTORE; + } + else { + data.status.urc=connectReturnCode.UPDATE_FAILED_ATTEMPT; + } + } + else { + data.status.ssid=r.body.ssid; + data.status.urc=connectReturnCode.UPDATE_CONNECTION_OK; + } + }, 1000, req); + res.json( {} ); + }); + app.post('/reboot_ota.json', function(req, res) { + data.status.recovery=0; + requeueMessages(); + res.json( {} ); + }); + app.post('/reboot.json', function(req, res) { + res.json( {} ); + requeueMessages(); + }); + app.post('/recovery.json', function(req, res) { + data.status.recovery=1; + requeueMessages(); + res.json( { } ); + }); + app.post('/flash.json', function(req, res) { + if(data.status.recovery>0){ + res.json({}); + } + else { + res.status(404).end(); + } + }); + app.delete('/connect.json', function(req, res) { + data.status.ssid=''; + res.json( {} ); }); + app.get('/reboot', function(req, res) { res.json( {} ); }); + }, + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: 'css/[name].css', + chunkFilename: 'css/[id].css' , + }), + new HtmlWebPackPlugin({ + title: 'SqueezeESP32-test', + template: './src/test.ejs', + filename: 'test', + minify: false, + excludeChunks: ['index'], + }), + new SpriteLoaderPlugin({plainSprite: true}) + + ], +}); diff --git a/components/wifi-manager/webapp/webpack/webpack.prod.js b/components/wifi-manager/webapp/webpack/webpack.prod.js new file mode 100644 index 00000000..9e741cd6 --- /dev/null +++ b/components/wifi-manager/webapp/webpack/webpack.prod.js @@ -0,0 +1,182 @@ +/* eslint-disable */ +// Merges webpack.common config with this production config +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); + +const webpack = require('webpack'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); + +// Optimisations and Compression +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const TerserPlugin = require('terser-webpack-plugin'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); +const CompressionPlugin = require('compression-webpack-plugin'); +const ImageminPlugin = require('imagemin-webpack-plugin').default; +const imageminMozjpeg = require('imagemin-mozjpeg'); +const fs = require('fs'); +const glob = require('glob'); +var WebpackOnBuildPlugin = require('on-build-webpack'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +const path = require('path') +const ExtractTextPlugin = require('extract-text-webpack-plugin') +const PurgecssPlugin = require('purgecss-webpack-plugin') + +// Optional +const FaviconsWebpackPlugin = require('favicons-webpack-plugin'); +const PATHS = { + src: path.join(__dirname, 'src') + } +module.exports = merge(common, { + mode: 'production', + stats: 'errors-only', + optimization: { + minimizer: [ + new TerserPlugin({ + test: /\.js(\?.*)?$/i, + exclude: /node_modules/, + cache: true, + parallel: 4, + sourceMap: true, + }), + new OptimizeCSSAssetsPlugin({}) + ], + runtimeChunk: 'single', + splitChunks: { + chunks: 'all', + // maxInitialRequests: Infinity, + // minSize: 0, + cacheGroups: { + vendor: { + test: /node_modules/, // you may add "vendor.js" here if you want to + name: "node-modules", + chunks: "initial", + enforce: true + }, + } + }, + }, + plugins: [ + new MiniCssExtractPlugin({ + filename: 'css/[name].[hash:6].css', + chunkFilename: 'css/[name].[contenthash].css', + + }), + new ExtractTextPlugin('[name].css?[hash]'), + new PurgecssPlugin({ + paths: glob.sync(`${PATHS.src}/*`), + whitelist: ['whitelisted'] + }), + new CleanWebpackPlugin(), + new CompressionPlugin({ + test: /\.(js|css|html|svg)$/, + filename: '[path].br[query]', + algorithm: 'brotliCompress', + compressionOptions: { level: 11 }, + threshold: 100, + minRatio: 0.8, + deleteOriginalAssets: false + }), + new CompressionPlugin({ + filename: '[path].gz[query]', + algorithm: 'gzip', + test: /\.js$|\.css$|\.html$/, + threshold: 100, + minRatio: 0.8, + }), + new ImageminPlugin({ + test: /\.(jpe?g|png|gif|svg)$/i, + // lossLess gif compressor + gifsicle: { + optimizationLevel: 9 + }, + // lossy png compressor, remove for default lossLess + pngquant: ({ + quality: '75' + }), + // lossy jpg compressor + plugins: [imageminMozjpeg({ + quality: '75' + })] + }), + // new FaviconsWebpackPlugin({ + // // Your source logo + // logo: './src/assets/images/200px-ControllerAppIcon.png', + // // // The prefix for all image files (might be a folder or a name) + // //prefix: 'assets/icons_[hash:6]/', + // prefix: 'icons_[hash:6]/', + // // // Emit all stats of the generated icons + // //emitStats: false, + // // // The name of the json containing all favicon information + // // statsFilename: 'iconstats-[hash].json', + // // // Generate a cache file with control hashes and + // // // don't rebuild the favicons until those hashes change + // persistentCache: true, + // // // Inject the html into the html-webpack-plugin + // inject: true, + // // // favicon background color (see https://github.com/haydenbleasel/favicons#usage) + // background: '#fff', + // // // which icons should be generated (see https://github.com/haydenbleasel/favicons#usage) + // icons: { + // // android: false, + // // appleIcon: false, + // favicons: true + // // firefox: true, + // // windows: false + // } + // }), + new WebpackOnBuildPlugin(function(stats) { + var getDirectories = function (src, callback) { + glob(`${src}/**/*(*.gz|favicon-32x32.png)`, callback); + }; + getDirectories('./webpack/dist', function (err, list) { + if (err) { + console.log('Error', err); + } else { + const regex = /^(.*\/)([^\/]*)$/ + const relativeRegex = /(\w+\/[^\/]*)$/ + const makePathRegex = /([^\.].*)$/ + let exportDefHead= + '/***********************************\n'+ + 'webpack_headers\n'+ + stats+'\n'+ + '***********************************/\n'+ + '#pragma once\n'+ + '#include \n'+ + 'extern const char * resource_lookups[];\n'+ + 'extern const uint8_t * resource_map_start[];\n'+ + 'extern const uint8_t * resource_map_end[];\n'; + let exportDef= '// Automatically generated. Do not edit manually!.\n'+ + '#include \n'; + let lookupDef='const char * resource_lookups[] = {\n'; + let lookupMapStart='const uint8_t * resource_map_start[] = {\n'; + let lookupMapEnd='const uint8_t * resource_map_end[] = {\n'; + let cMake=''; + list.forEach(fileName=>{ + let exportName=fileName.match(regex)[2].replace(/[\. \-]/gm,'_'); + let relativeName=fileName.match(relativeRegex)[1]; + exportDef+= 'extern const uint8_t _'+exportName+'_start[] asm("_binary_'+exportName+'_start");\n'+ + 'extern const uint8_t _'+exportName+'_end[] asm("_binary_'+exportName+'_end");\n'; + lookupDef+='\t"/'+relativeName+'",\n'; + lookupMapStart+='\t_'+ exportName+'_start,\n'; + lookupMapEnd+= '\t_'+ exportName+'_end,\n'; + cMake+='target_add_binary_data( __idf_wifi-manager ./webapp'+fileName.match(makePathRegex)[1]+' BINARY)\n'; + }); + + lookupDef+='""\n};\n'; + lookupMapStart=lookupMapStart.substring(0,lookupMapStart.length-2)+'\n};\n'; + lookupMapEnd=lookupMapEnd.substring(0,lookupMapEnd.length-2)+'\n};\n'; + try { + fs.writeFileSync('webapp.cmake', cMake); + fs.writeFileSync('webpack.c', exportDef+lookupDef+lookupMapStart+lookupMapEnd); + fs.writeFileSync('webpack.h', exportDefHead); + //file written successfully + } catch (e) { + console.error(e); + } + } + }); + }), + new BundleAnalyzerPlugin() + ] +}); + diff --git a/components/wifi-manager/wifi_manager.c b/components/wifi-manager/wifi_manager.c index fa1ea895..343b0430 100644 --- a/components/wifi-manager/wifi_manager.c +++ b/components/wifi-manager/wifi_manager.c @@ -153,6 +153,9 @@ const int WIFI_MANAGER_SCAN_BIT = BIT7; /* @brief When set, means user requested for a disconnect */ const int WIFI_MANAGER_REQUEST_DISCONNECT_BIT = BIT8; +/* @brief When set, means user requested connecting to a new network and it failed */ +const int WIFI_MANAGER_REQUEST_STA_CONNECT_FAILED_BIT = BIT9; + char * get_disconnect_code_desc(uint8_t reason){ switch (reason) { @@ -539,8 +542,9 @@ void wifi_manager_generate_ip_info_json(update_reason_code_t update_reason_code) cJSON_AddNumberToObject(ip_info_cjson, "urc", update_reason_code); if(config){ - cJSON_AddItemToObject(ip_info_cjson, "ssid", cJSON_CreateString((char *)config->sta.ssid)); - + if(update_reason_code == UPDATE_CONNECTION_OK || update_reason_code == UPDATE_LOST_CONNECTION || update_reason_code == UPDATE_FAILED_ATTEMPT){ + cJSON_AddItemToObject(ip_info_cjson, "ssid", cJSON_CreateString((char *)config->sta.ssid)); + } if(update_reason_code == UPDATE_CONNECTION_OK){ /* rest of the information is copied after the ssid */ tcpip_adapter_ip_info_t ip_info; @@ -548,8 +552,12 @@ void wifi_manager_generate_ip_info_json(update_reason_code_t update_reason_code) cJSON_AddItemToObject(ip_info_cjson, "ip", cJSON_CreateString(ip4addr_ntoa((ip4_addr_t *)&ip_info.ip))); cJSON_AddItemToObject(ip_info_cjson, "netmask", cJSON_CreateString(ip4addr_ntoa((ip4_addr_t *)&ip_info.netmask))); cJSON_AddItemToObject(ip_info_cjson, "gw", cJSON_CreateString(ip4addr_ntoa((ip4_addr_t *)&ip_info.gw))); + wifi_ap_record_t ap; + esp_wifi_sta_get_ap_info(&ap); + cJSON_AddItemToObject(ip_info_cjson, "rssi", cJSON_CreateNumber(ap.rssi)); } } + ESP_LOGV(TAG, "wifi_manager_generate_ip_info_json done"); } #define LOCAL_MAC_SIZE 20 @@ -1273,6 +1281,7 @@ void wifi_manager( void * pvParameters ){ if((BaseType_t)msg.param == CONNECTION_REQUEST_USER) { ESP_LOGD(TAG, "MESSAGE: ORDER_CONNECT_STA - Connection request with no nvs connection saved yet"); xEventGroupSetBits(wifi_manager_event_group, WIFI_MANAGER_REQUEST_STA_CONNECT_BIT); + xEventGroupClearBits(wifi_manager_event_group,WIFI_MANAGER_REQUEST_STA_CONNECT_FAILED_BIT); } else if((BaseType_t)msg.param == CONNECTION_REQUEST_RESTORE_CONNECTION) { ESP_LOGD(TAG, "MESSAGE: ORDER_CONNECT_STA - Connection request after restoring the AP configuration"); @@ -1296,12 +1305,12 @@ void wifi_manager( void * pvParameters ){ /* start DHCP client if not started*/ tcpip_adapter_dhcp_status_t status; ESP_LOGD(TAG, "wifi_manager: Checking if DHCP client for STA interface is running"); - ESP_ERROR_CHECK(tcpip_adapter_dhcpc_get_status(TCPIP_ADAPTER_IF_STA, &status)); + ESP_ERROR_CHECK_WITHOUT_ABORT(tcpip_adapter_dhcpc_get_status(TCPIP_ADAPTER_IF_STA, &status)); if (status!=TCPIP_ADAPTER_DHCP_STARTED) { ESP_LOGD(TAG, "wifi_manager: Start DHCP client for STA interface"); - ESP_ERROR_CHECK(tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA)); -// } - } + ESP_ERROR_CHECK_WITHOUT_ABORT(tcpip_adapter_dhcpc_start(TCPIP_ADAPTER_IF_STA)); + } + //} } uxBits = xEventGroupGetBits(wifi_manager_event_group); @@ -1420,26 +1429,32 @@ void wifi_manager( void * pvParameters ){ uxBits = xEventGroupGetBits(wifi_manager_event_group); if( uxBits & WIFI_MANAGER_REQUEST_STA_CONNECT_BIT ){ + xEventGroupClearBits(wifi_manager_event_group, WIFI_MANAGER_REQUEST_STA_CONNECT_BIT); ESP_LOGW(TAG, "WiFi Disconnected while processing user connect request. Wrong password?"); /* there are no retries when it's a user requested connection by design. This avoids a user hanging too much * in case they typed a wrong password for instance. Here we simply clear the request bit and move on */ - xEventGroupClearBits(wifi_manager_event_group, WIFI_MANAGER_REQUEST_STA_CONNECT_BIT); + if(wifi_manager_lock_json_buffer( portMAX_DELAY )){ wifi_manager_generate_ip_info_json( UPDATE_FAILED_ATTEMPT ); wifi_manager_unlock_json_buffer(); } - + wifi_mode_t mode; + esp_wifi_get_mode(&mode); + if( WIFI_MODE_STA ==mode ){ + xEventGroupSetBits(wifi_manager_event_group,WIFI_MANAGER_REQUEST_STA_CONNECT_FAILED_BIT); + // if wifi was STA, attempt to reload the previous network connection + ESP_LOGW(TAG,"Attempting to restore previous network"); + wifi_manager_send_message(ORDER_LOAD_AND_RESTORE_STA, NULL); + } } else if (uxBits & WIFI_MANAGER_REQUEST_DISCONNECT_BIT){ ESP_LOGD(TAG, "WiFi disconnected by user"); /* user manually requested a disconnect so the lost connection is a normal event. Clear the flag and restart the AP */ xEventGroupClearBits(wifi_manager_event_group, WIFI_MANAGER_REQUEST_DISCONNECT_BIT); - if(wifi_manager_lock_json_buffer( portMAX_DELAY )){ wifi_manager_generate_ip_info_json( UPDATE_USER_DISCONNECT ); wifi_manager_unlock_json_buffer(); } - /* erase configuration */ if(wifi_manager_config_sta){ ESP_LOGI(TAG, "Erasing WiFi Configuration."); @@ -1521,7 +1536,7 @@ void wifi_manager( void * pvParameters ){ /* refresh JSON with the new IP */ if(wifi_manager_lock_json_buffer( portMAX_DELAY )){ /* generate the connection info with success */ - wifi_manager_generate_ip_info_json( UPDATE_CONNECTION_OK ); + wifi_manager_generate_ip_info_json( uxBits & WIFI_MANAGER_REQUEST_STA_CONNECT_FAILED_BIT?UPDATE_FAILED_ATTEMPT_AND_RESTORE:UPDATE_CONNECTION_OK ); wifi_manager_unlock_json_buffer(); } else { diff --git a/components/wifi-manager/wifi_manager.h b/components/wifi-manager/wifi_manager.h index 98f3ca12..6fb16617 100644 --- a/components/wifi-manager/wifi_manager.h +++ b/components/wifi-manager/wifi_manager.h @@ -215,7 +215,9 @@ typedef enum update_reason_code_t { UPDATE_CONNECTION_OK = 0, UPDATE_FAILED_ATTEMPT = 1, UPDATE_USER_DISCONNECT = 2, - UPDATE_LOST_CONNECTION = 3 + UPDATE_LOST_CONNECTION = 3, + UPDATE_FAILED_ATTEMPT_AND_RESTORE = 4, + }update_reason_code_t; typedef enum connection_request_made_by_code_t{ diff --git a/components/wifi-manager/wifi_manager_http_server.c b/components/wifi-manager/wifi_manager_http_server.c index dfbfd13e..1bd54802 100644 --- a/components/wifi-manager/wifi_manager_http_server.c +++ b/components/wifi-manager/wifi_manager_http_server.c @@ -38,8 +38,12 @@ rest_server_context_t *rest_context = NULL; RingbufHandle_t messaging=NULL; void register_common_handlers(httpd_handle_t server){ - httpd_uri_t res_get = { .uri = "/res/*", .method = HTTP_GET, .handler = resource_filehandler, .user_ctx = rest_context }; - httpd_register_uri_handler(server, &res_get); + httpd_uri_t css_get = { .uri = "/css/*", .method = HTTP_GET, .handler = resource_filehandler, .user_ctx = rest_context }; + httpd_register_uri_handler(server, &css_get); + httpd_uri_t js_get = { .uri = "/js/*", .method = HTTP_GET, .handler = resource_filehandler, .user_ctx = rest_context }; + httpd_register_uri_handler(server, &js_get); + httpd_uri_t icon_get = { .uri = "/icons*", .method = HTTP_GET, .handler = resource_filehandler, .user_ctx = rest_context }; + httpd_register_uri_handler(server, &icon_get); } void register_regular_handlers(httpd_handle_t server){ diff --git a/main/esp_app_main.c b/main/esp_app_main.c index ba030882..2fe15639 100644 --- a/main/esp_app_main.c +++ b/main/esp_app_main.c @@ -45,6 +45,7 @@ #include "gds_font.h" #include "display.h" #include "accessors.h" +#include "cmd_system.h" static const char certs_namespace[] = "certificates"; static const char certs_key[] = "blob"; static const char certs_version[] = "version"; @@ -59,6 +60,7 @@ const int CONNECTED_BIT = BIT0; static const char TAG[] = "esp_app_main"; #define DEFAULT_HOST_NAME "squeezelite" char * fwurl = NULL; +RTC_NOINIT_ATTR uint32_t RebootCounter ; static bool bWifiConnected=false; extern const uint8_t server_cert_pem_start[] asm("_binary_github_pem_start"); @@ -384,10 +386,30 @@ void register_default_nvs(){ ESP_LOGD(TAG,"Done setting default values in nvs."); } +uint32_t halSTORAGE_RebootCounterRead(void) { return RebootCounter ; } +uint32_t halSTORAGE_RebootCounterUpdate(int32_t xValue) { return (RebootCounter = (xValue != 0) ? (RebootCounter + xValue) : 0) ; } + +void handle_ap_connect(){ + start_telnet(NULL); + halSTORAGE_RebootCounterUpdate(0); +} void app_main() { const esp_partition_t *running = esp_ota_get_running_partition(); is_recovery_running = (running->subtype == ESP_PARTITION_SUBTYPE_APP_FACTORY); + esp_reset_reason_t xReason = esp_reset_reason(); + ESP_LOGI(TAG,"Reset reason is: %u", xReason); + if(!is_recovery_running && xReason != ESP_RST_SW && xReason != ESP_RST_POWERON ) { + /* unscheduled restart (HW, Watchdog or similar) thus increment dynamic + * counter then log current boot statistics as a warning */ + uint32_t Counter = halSTORAGE_RebootCounterUpdate(1) ; // increment counter + ESP_LOGI(TAG,"Reboot counter=%u\n", Counter) ; + if (Counter == 5) { + // before we change the partition, update the info for current running partition. + halSTORAGE_RebootCounterUpdate(0); + guided_factory(); + } + } char * fwurl = NULL; ESP_LOGI(TAG,"Starting app_main"); @@ -464,8 +486,8 @@ void app_main() wifi_manager_set_callback(EVENT_STA_DISCONNECTED, &cb_connection_sta_disconnected); /* Start the telnet service after we are certain that the network stack has been properly initialized. * This can be either after we're started the AP mode, or after we've started the STA mode */ - wifi_manager_set_callback(ORDER_START_AP, &start_telnet); - wifi_manager_set_callback(ORDER_CONNECT_STA, &start_telnet); + wifi_manager_set_callback(ORDER_START_AP, &handle_ap_connect); + wifi_manager_set_callback(ORDER_CONNECT_STA, &handle_ap_connect); } console_start(); if(fwurl && strlen(fwurl)>0){ diff --git a/sdkconfig b/sdkconfig index 5697f149..a8f982d4 100644 --- a/sdkconfig +++ b/sdkconfig @@ -75,14 +75,24 @@ CONFIG_LOGGING_SLIMPROTO="info" CONFIG_LOGGING_STREAM="info" CONFIG_LOGGING_DECODE="info" CONFIG_LOGGING_OUTPUT="info" +CONFIG_MUTE_GPIO_LEVEL=0 +CONFIG_DAC_CONFIG="" +CONFIG_SPDIF_CONFIG="" +CONFIG_SPI_CONFIG="" +CONFIG_DISPLAY_CONFIG="" +CONFIG_DAC_CONTROLSET="" # CONFIG_SQUEEZEAMP is not set # CONFIG_A1S is not set +# CONFIG_TWATCH2020 is not set CONFIG_BASIC_I2C_BT=y CONFIG_I2S_NUM=0 -CONFIG_I2S_BCK_IO=33 -CONFIG_I2S_WS_IO=25 -CONFIG_I2S_DO_IO=32 +CONFIG_I2S_BCK_IO=-1 +CONFIG_I2S_WS_IO=-1 +CONFIG_I2S_DO_IO=-1 CONFIG_I2S_DI_IO=-1 +CONFIG_I2C_SDA=-1 +CONFIG_I2C_SCL=-1 +CONFIG_MUTE_GPIO=-1 CONFIG_SDIF_NUM=0 CONFIG_SPDIF_BCK_IO=-1 CONFIG_SPDIF_WS_IO=-1 @@ -97,9 +107,7 @@ CONFIG_BT_SINK_PIN=1234 CONFIG_AIRPLAY_SINK=y CONFIG_AIRPLAY_NAME="ESP32-AirPlay" CONFIG_AIRPLAY_PORT="5000" -CONFIG_DISPLAY_CONFIG="" CONFIG_I2C_CONFIG="" -CONFIG_SPI_CONFIG="" CONFIG_SET_GPIO="" CONFIG_ROTARY_ENCODER="" CONFIG_LED_GREEN_GPIO=-1 @@ -117,7 +125,7 @@ CONFIG_DEFAULT_AP_GATEWAY="192.168.4.1" CONFIG_DEFAULT_AP_NETMASK="255.255.255.0" CONFIG_DEFAULT_AP_MAX_CONNECTIONS=4 CONFIG_DEFAULT_AP_BEACON_INTERVAL=100 -CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -C 30" +CONFIG_DEFAULT_COMMAND_LINE="squeezelite -o I2S -b 500:2000 -d all=info -C 30 -W" # CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE=y CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y @@ -174,7 +182,175 @@ CONFIG_BT_A2DP_ENABLE=y # CONFIG_BT_HFP_ENABLE is not set CONFIG_BT_SSP_ENABLED=y # CONFIG_BT_BLE_ENABLED is not set -CONFIG_BT_STACK_NO_LOG=y +# CONFIG_BT_STACK_NO_LOG is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_HCI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_HCI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_HCI_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTM_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTM_TRACE_LEVEL=2 +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_L2CAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_L2CAP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_RFCOMM_TRACE_LEVEL=2 +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_SDP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_SDP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_SDP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_GAP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_GAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_GAP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BNEP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BNEP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BNEP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_PAN_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_PAN_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_PAN_TRACE_LEVEL=2 +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_A2D_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_A2D_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_A2D_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVDT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVDT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVDT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVCT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVCT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVCT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_AVRC_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_AVRC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_AVRC_TRACE_LEVEL=2 +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_MCA_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_MCA_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_MCA_TRACE_LEVEL=2 +# CONFIG_BT_LOG_HID_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_HID_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_HID_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_HID_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_HID_TRACE_LEVEL=2 +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_APPL_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_APPL_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_APPL_TRACE_LEVEL=2 +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_GATT_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_GATT_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_GATT_TRACE_LEVEL=2 +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_SMP_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_SMP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_SMP_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTIF_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTIF_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTIF_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BTC_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BTC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BTC_TRACE_LEVEL=2 +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_OSI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_OSI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_OSI_TRACE_LEVEL=2 +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_NONE is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_ERROR is not set +CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_WARNING=y +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_API is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_EVENT is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BT_LOG_BLUFI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BT_LOG_BLUFI_TRACE_LEVEL=2 CONFIG_BT_ACL_CONNECTIONS=4 CONFIG_BT_ALLOCATION_FROM_SPIRAM_FIRST=y CONFIG_BT_BLE_DYNAMIC_ENV_MEMORY=y @@ -416,12 +592,8 @@ CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2432 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 -CONFIG_FREERTOS_USE_TRACE_FACILITY=y -CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y -CONFIG_FREERTOS_VTASKLIST_INCLUDE_COREID=y -CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y -CONFIG_FREERTOS_RUN_TIME_STATS_USING_ESP_TIMER=y -# CONFIG_FREERTOS_RUN_TIME_STATS_USING_CPU_CLK is not set +# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set # CONFIG_FREERTOS_DEBUG_INTERNALS is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set @@ -434,11 +606,11 @@ CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING is not set # CONFIG_LOG_DEFAULT_LEVEL_NONE is not set # CONFIG_LOG_DEFAULT_LEVEL_ERROR is not set -CONFIG_LOG_DEFAULT_LEVEL_WARN=y -# CONFIG_LOG_DEFAULT_LEVEL_INFO is not set +# CONFIG_LOG_DEFAULT_LEVEL_WARN is not set +CONFIG_LOG_DEFAULT_LEVEL_INFO=y # CONFIG_LOG_DEFAULT_LEVEL_DEBUG is not set # CONFIG_LOG_DEFAULT_LEVEL_VERBOSE is not set -CONFIG_LOG_DEFAULT_LEVEL=2 +CONFIG_LOG_DEFAULT_LEVEL=3 CONFIG_LOG_COLORS=y CONFIG_LWIP_LOCAL_HOSTNAME="squeezelite-esp32" # CONFIG_LWIP_L2_TO_L3_COPY is not set @@ -707,6 +879,167 @@ CONFIG_BTU_TASK_STACK_SIZE=4096 CONFIG_CLASSIC_BT_ENABLED=y CONFIG_A2DP_ENABLE=y # CONFIG_HFP_ENABLE is not set +# CONFIG_HCI_TRACE_LEVEL_NONE is not set +# CONFIG_HCI_TRACE_LEVEL_ERROR is not set +CONFIG_HCI_TRACE_LEVEL_WARNING=y +# CONFIG_HCI_TRACE_LEVEL_API is not set +# CONFIG_HCI_TRACE_LEVEL_EVENT is not set +# CONFIG_HCI_TRACE_LEVEL_DEBUG is not set +# CONFIG_HCI_TRACE_LEVEL_VERBOSE is not set +CONFIG_HCI_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTM_TRACE_LEVEL_NONE is not set +# CONFIG_BTM_TRACE_LEVEL_ERROR is not set +CONFIG_BTM_TRACE_LEVEL_WARNING=y +# CONFIG_BTM_TRACE_LEVEL_API is not set +# CONFIG_BTM_TRACE_LEVEL_EVENT is not set +# CONFIG_BTM_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTM_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTM_INITIAL_TRACE_LEVEL=2 +# CONFIG_L2CAP_TRACE_LEVEL_NONE is not set +# CONFIG_L2CAP_TRACE_LEVEL_ERROR is not set +CONFIG_L2CAP_TRACE_LEVEL_WARNING=y +# CONFIG_L2CAP_TRACE_LEVEL_API is not set +# CONFIG_L2CAP_TRACE_LEVEL_EVENT is not set +# CONFIG_L2CAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_L2CAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_L2CAP_INITIAL_TRACE_LEVEL=2 +# CONFIG_RFCOMM_TRACE_LEVEL_NONE is not set +# CONFIG_RFCOMM_TRACE_LEVEL_ERROR is not set +CONFIG_RFCOMM_TRACE_LEVEL_WARNING=y +# CONFIG_RFCOMM_TRACE_LEVEL_API is not set +# CONFIG_RFCOMM_TRACE_LEVEL_EVENT is not set +# CONFIG_RFCOMM_TRACE_LEVEL_DEBUG is not set +# CONFIG_RFCOMM_TRACE_LEVEL_VERBOSE is not set +CONFIG_RFCOMM_INITIAL_TRACE_LEVEL=2 +# CONFIG_SDP_TRACE_LEVEL_NONE is not set +# CONFIG_SDP_TRACE_LEVEL_ERROR is not set +CONFIG_SDP_TRACE_LEVEL_WARNING=y +# CONFIG_SDP_TRACE_LEVEL_API is not set +# CONFIG_SDP_TRACE_LEVEL_EVENT is not set +# CONFIG_SDP_TRACE_LEVEL_DEBUG is not set +# CONFIG_SDP_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTH_LOG_SDP_INITIAL_TRACE_LEVEL=2 +# CONFIG_GAP_TRACE_LEVEL_NONE is not set +# CONFIG_GAP_TRACE_LEVEL_ERROR is not set +CONFIG_GAP_TRACE_LEVEL_WARNING=y +# CONFIG_GAP_TRACE_LEVEL_API is not set +# CONFIG_GAP_TRACE_LEVEL_EVENT is not set +# CONFIG_GAP_TRACE_LEVEL_DEBUG is not set +# CONFIG_GAP_TRACE_LEVEL_VERBOSE is not set +CONFIG_GAP_INITIAL_TRACE_LEVEL=2 +CONFIG_BNEP_INITIAL_TRACE_LEVEL=2 +# CONFIG_PAN_TRACE_LEVEL_NONE is not set +# CONFIG_PAN_TRACE_LEVEL_ERROR is not set +CONFIG_PAN_TRACE_LEVEL_WARNING=y +# CONFIG_PAN_TRACE_LEVEL_API is not set +# CONFIG_PAN_TRACE_LEVEL_EVENT is not set +# CONFIG_PAN_TRACE_LEVEL_DEBUG is not set +# CONFIG_PAN_TRACE_LEVEL_VERBOSE is not set +CONFIG_PAN_INITIAL_TRACE_LEVEL=2 +# CONFIG_A2D_TRACE_LEVEL_NONE is not set +# CONFIG_A2D_TRACE_LEVEL_ERROR is not set +CONFIG_A2D_TRACE_LEVEL_WARNING=y +# CONFIG_A2D_TRACE_LEVEL_API is not set +# CONFIG_A2D_TRACE_LEVEL_EVENT is not set +# CONFIG_A2D_TRACE_LEVEL_DEBUG is not set +# CONFIG_A2D_TRACE_LEVEL_VERBOSE is not set +CONFIG_A2D_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVDT_TRACE_LEVEL_NONE is not set +# CONFIG_AVDT_TRACE_LEVEL_ERROR is not set +CONFIG_AVDT_TRACE_LEVEL_WARNING=y +# CONFIG_AVDT_TRACE_LEVEL_API is not set +# CONFIG_AVDT_TRACE_LEVEL_EVENT is not set +# CONFIG_AVDT_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVDT_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVDT_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVCT_TRACE_LEVEL_NONE is not set +# CONFIG_AVCT_TRACE_LEVEL_ERROR is not set +CONFIG_AVCT_TRACE_LEVEL_WARNING=y +# CONFIG_AVCT_TRACE_LEVEL_API is not set +# CONFIG_AVCT_TRACE_LEVEL_EVENT is not set +# CONFIG_AVCT_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVCT_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVCT_INITIAL_TRACE_LEVEL=2 +# CONFIG_AVRC_TRACE_LEVEL_NONE is not set +# CONFIG_AVRC_TRACE_LEVEL_ERROR is not set +CONFIG_AVRC_TRACE_LEVEL_WARNING=y +# CONFIG_AVRC_TRACE_LEVEL_API is not set +# CONFIG_AVRC_TRACE_LEVEL_EVENT is not set +# CONFIG_AVRC_TRACE_LEVEL_DEBUG is not set +# CONFIG_AVRC_TRACE_LEVEL_VERBOSE is not set +CONFIG_AVRC_INITIAL_TRACE_LEVEL=2 +# CONFIG_MCA_TRACE_LEVEL_NONE is not set +# CONFIG_MCA_TRACE_LEVEL_ERROR is not set +CONFIG_MCA_TRACE_LEVEL_WARNING=y +# CONFIG_MCA_TRACE_LEVEL_API is not set +# CONFIG_MCA_TRACE_LEVEL_EVENT is not set +# CONFIG_MCA_TRACE_LEVEL_DEBUG is not set +# CONFIG_MCA_TRACE_LEVEL_VERBOSE is not set +CONFIG_MCA_INITIAL_TRACE_LEVEL=2 +# CONFIG_HID_TRACE_LEVEL_NONE is not set +# CONFIG_HID_TRACE_LEVEL_ERROR is not set +CONFIG_HID_TRACE_LEVEL_WARNING=y +# CONFIG_HID_TRACE_LEVEL_API is not set +# CONFIG_HID_TRACE_LEVEL_EVENT is not set +# CONFIG_HID_TRACE_LEVEL_DEBUG is not set +# CONFIG_HID_TRACE_LEVEL_VERBOSE is not set +CONFIG_HID_INITIAL_TRACE_LEVEL=2 +# CONFIG_APPL_TRACE_LEVEL_NONE is not set +# CONFIG_APPL_TRACE_LEVEL_ERROR is not set +CONFIG_APPL_TRACE_LEVEL_WARNING=y +# CONFIG_APPL_TRACE_LEVEL_API is not set +# CONFIG_APPL_TRACE_LEVEL_EVENT is not set +# CONFIG_APPL_TRACE_LEVEL_DEBUG is not set +# CONFIG_APPL_TRACE_LEVEL_VERBOSE is not set +CONFIG_APPL_INITIAL_TRACE_LEVEL=2 +# CONFIG_GATT_TRACE_LEVEL_NONE is not set +# CONFIG_GATT_TRACE_LEVEL_ERROR is not set +CONFIG_GATT_TRACE_LEVEL_WARNING=y +# CONFIG_GATT_TRACE_LEVEL_API is not set +# CONFIG_GATT_TRACE_LEVEL_EVENT is not set +# CONFIG_GATT_TRACE_LEVEL_DEBUG is not set +# CONFIG_GATT_TRACE_LEVEL_VERBOSE is not set +CONFIG_GATT_INITIAL_TRACE_LEVEL=2 +# CONFIG_SMP_TRACE_LEVEL_NONE is not set +# CONFIG_SMP_TRACE_LEVEL_ERROR is not set +CONFIG_SMP_TRACE_LEVEL_WARNING=y +# CONFIG_SMP_TRACE_LEVEL_API is not set +# CONFIG_SMP_TRACE_LEVEL_EVENT is not set +# CONFIG_SMP_TRACE_LEVEL_DEBUG is not set +# CONFIG_SMP_TRACE_LEVEL_VERBOSE is not set +CONFIG_SMP_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTIF_TRACE_LEVEL_NONE is not set +# CONFIG_BTIF_TRACE_LEVEL_ERROR is not set +CONFIG_BTIF_TRACE_LEVEL_WARNING=y +# CONFIG_BTIF_TRACE_LEVEL_API is not set +# CONFIG_BTIF_TRACE_LEVEL_EVENT is not set +# CONFIG_BTIF_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTIF_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTIF_INITIAL_TRACE_LEVEL=2 +# CONFIG_BTC_TRACE_LEVEL_NONE is not set +# CONFIG_BTC_TRACE_LEVEL_ERROR is not set +CONFIG_BTC_TRACE_LEVEL_WARNING=y +# CONFIG_BTC_TRACE_LEVEL_API is not set +# CONFIG_BTC_TRACE_LEVEL_EVENT is not set +# CONFIG_BTC_TRACE_LEVEL_DEBUG is not set +# CONFIG_BTC_TRACE_LEVEL_VERBOSE is not set +CONFIG_BTC_INITIAL_TRACE_LEVEL=2 +# CONFIG_OSI_TRACE_LEVEL_NONE is not set +# CONFIG_OSI_TRACE_LEVEL_ERROR is not set +CONFIG_OSI_TRACE_LEVEL_WARNING=y +# CONFIG_OSI_TRACE_LEVEL_API is not set +# CONFIG_OSI_TRACE_LEVEL_EVENT is not set +# CONFIG_OSI_TRACE_LEVEL_DEBUG is not set +# CONFIG_OSI_TRACE_LEVEL_VERBOSE is not set +CONFIG_OSI_INITIAL_TRACE_LEVEL=2 +# CONFIG_BLUFI_TRACE_LEVEL_NONE is not set +# CONFIG_BLUFI_TRACE_LEVEL_ERROR is not set +CONFIG_BLUFI_TRACE_LEVEL_WARNING=y +# CONFIG_BLUFI_TRACE_LEVEL_API is not set +# CONFIG_BLUFI_TRACE_LEVEL_EVENT is not set +# CONFIG_BLUFI_TRACE_LEVEL_DEBUG is not set +# CONFIG_BLUFI_TRACE_LEVEL_VERBOSE is not set +CONFIG_BLUFI_INITIAL_TRACE_LEVEL=2 # CONFIG_BLE_HOST_QUEUE_CONGESTION_CHECK is not set CONFIG_SMP_ENABLE=y CONFIG_BLE_ESTABLISH_LINK_CONNECTION_TIMEOUT=30