gitextract_qc0_tm9o/ ├── .angulardoc.json ├── .earthlyignore ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── config.yml │ │ ├── report-bug.md │ │ ├── report-compatibility.md │ │ └── suggest-feature.md │ ├── dependabot.yml │ ├── label-actions.yml │ └── workflows/ │ ├── angular.yml │ ├── go.yml │ ├── issues-first-greet.yml │ ├── issues-label-actions.yml │ ├── issues-stale.yml │ ├── kext.yml │ ├── release.yml │ ├── tauri.yml │ └── windows-dll.yml ├── .gitignore ├── .golangci.yml ├── .travis.yml ├── .vscode/ │ ├── launch.json │ └── settings.json ├── AUTHORS ├── CODE_OF_CONDUCT.md ├── Earthfile ├── LICENSE ├── README.md ├── TESTING.md ├── TRADEMARKS ├── assets/ │ ├── data/ │ │ ├── favicons/ │ │ │ ├── browserconfig.xml │ │ │ ├── head.html │ │ │ └── manifest.json │ │ ├── fonts/ │ │ │ ├── Roboto-300/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-300italic/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-500/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-500italic/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-700/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-700italic/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-italic/ │ │ │ │ └── LICENSE.txt │ │ │ ├── Roboto-regular/ │ │ │ │ └── LICENSE.txt │ │ │ ├── roboto-slimfix.css │ │ │ └── roboto.css │ │ ├── icons/ │ │ │ ├── README.md │ │ │ └── generate_ico.sh │ │ ├── img/ │ │ │ └── flags/ │ │ │ └── LICENSE.txt │ │ └── world-50m.json │ ├── icons.go │ ├── icons_default.go │ └── icons_windows.go ├── base/ │ ├── .gitignore │ ├── README.md │ ├── api/ │ │ ├── api_bridge.go │ │ ├── auth_wrapper.go │ │ ├── authentication.go │ │ ├── authentication_test.go │ │ ├── client/ │ │ │ ├── api.go │ │ │ ├── client.go │ │ │ ├── const.go │ │ │ ├── message.go │ │ │ └── websocket.go │ │ ├── config.go │ │ ├── database.go │ │ ├── doc.go │ │ ├── endpoints.go │ │ ├── endpoints_config.go │ │ ├── endpoints_debug.go │ │ ├── endpoints_meta.go │ │ ├── endpoints_test.go │ │ ├── enriched-response.go │ │ ├── init_test.go │ │ ├── main.go │ │ ├── module.go │ │ ├── request.go │ │ ├── router.go │ │ └── testclient/ │ │ ├── root/ │ │ │ └── index.html │ │ └── serve.go │ ├── apprise/ │ │ └── notify.go │ ├── config/ │ │ ├── basic_config.go │ │ ├── database.go │ │ ├── doc.go │ │ ├── expertise.go │ │ ├── get-safe.go │ │ ├── get.go │ │ ├── get_test.go │ │ ├── init_test.go │ │ ├── main.go │ │ ├── module.go │ │ ├── option.go │ │ ├── persistence.go │ │ ├── persistence_test.go │ │ ├── perspective.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── release.go │ │ ├── set.go │ │ ├── set_test.go │ │ ├── validate.go │ │ └── validity.go │ ├── container/ │ │ ├── container.go │ │ ├── container_test.go │ │ ├── doc.go │ │ └── serialization.go │ ├── database/ │ │ ├── accessor/ │ │ │ ├── accessor-json-bytes.go │ │ │ ├── accessor-json-string.go │ │ │ ├── accessor-struct.go │ │ │ ├── accessor.go │ │ │ └── accessor_test.go │ │ ├── boilerplate_test.go │ │ ├── controller.go │ │ ├── controllers.go │ │ ├── database.go │ │ ├── database_test.go │ │ ├── dbmodule/ │ │ │ ├── db.go │ │ │ └── maintenance.go │ │ ├── doc.go │ │ ├── errors.go │ │ ├── hook.go │ │ ├── hookbase.go │ │ ├── interface.go │ │ ├── interface_cache.go │ │ ├── interface_cache_test.go │ │ ├── iterator/ │ │ │ └── iterator.go │ │ ├── main.go │ │ ├── maintenance.go │ │ ├── migration/ │ │ │ ├── error.go │ │ │ └── migration.go │ │ ├── query/ │ │ │ ├── README.md │ │ │ ├── condition-and.go │ │ │ ├── condition-bool.go │ │ │ ├── condition-error.go │ │ │ ├── condition-exists.go │ │ │ ├── condition-float.go │ │ │ ├── condition-int.go │ │ │ ├── condition-not.go │ │ │ ├── condition-or.go │ │ │ ├── condition-regex.go │ │ │ ├── condition-string.go │ │ │ ├── condition-stringslice.go │ │ │ ├── condition.go │ │ │ ├── condition_test.go │ │ │ ├── operators.go │ │ │ ├── operators_test.go │ │ │ ├── parser.go │ │ │ ├── parser_test.go │ │ │ ├── query.go │ │ │ └── query_test.go │ │ ├── record/ │ │ │ ├── base.go │ │ │ ├── base_test.go │ │ │ ├── key.go │ │ │ ├── meta-bench_test.go │ │ │ ├── meta-gencode.go │ │ │ ├── meta-gencode_test.go │ │ │ ├── meta.colf │ │ │ ├── meta.gencode │ │ │ ├── meta.go │ │ │ ├── record.go │ │ │ ├── record_test.go │ │ │ ├── wrapper.go │ │ │ └── wrapper_test.go │ │ ├── registry.go │ │ ├── storage/ │ │ │ ├── badger/ │ │ │ │ ├── badger.go │ │ │ │ └── badger_test.go │ │ │ ├── bbolt/ │ │ │ │ ├── bbolt.go │ │ │ │ └── bbolt_test.go │ │ │ ├── errors.go │ │ │ ├── fstree/ │ │ │ │ ├── fstree.go │ │ │ │ └── fstree_test.go │ │ │ ├── hashmap/ │ │ │ │ ├── map.go │ │ │ │ └── map_test.go │ │ │ ├── injectbase.go │ │ │ ├── interface.go │ │ │ ├── sinkhole/ │ │ │ │ └── sinkhole.go │ │ │ ├── sqlite/ │ │ │ │ ├── bobgen.yaml │ │ │ │ ├── dberrors/ │ │ │ │ │ ├── bob_errors.bob.go │ │ │ │ │ ├── bob_main.bob_test.go │ │ │ │ │ └── records.bob.go │ │ │ │ ├── dbinfo/ │ │ │ │ │ ├── bob_types.bob.go │ │ │ │ │ └── records.bob.go │ │ │ │ ├── factory/ │ │ │ │ │ ├── bobfactory_context.bob.go │ │ │ │ │ ├── bobfactory_main.bob.go │ │ │ │ │ ├── bobfactory_main.bob_test.go │ │ │ │ │ ├── bobfactory_random.bob.go │ │ │ │ │ ├── bobfactory_random.bob_test.go │ │ │ │ │ └── records.bob.go │ │ │ │ ├── migrations/ │ │ │ │ │ ├── 0_settings.sql │ │ │ │ │ └── 1_initial.sql │ │ │ │ ├── migrations_config.yml │ │ │ │ ├── models/ │ │ │ │ │ ├── bob_joins.bob.go │ │ │ │ │ ├── bob_loaders.bob.go │ │ │ │ │ ├── bob_types.bob_test.go │ │ │ │ │ ├── bob_where.bob.go │ │ │ │ │ └── records.bob.go │ │ │ │ ├── prepared.go │ │ │ │ ├── prepared_test.go │ │ │ │ ├── schema.go │ │ │ │ ├── sqlite.go │ │ │ │ └── sqlite_test.go │ │ │ └── storages.go │ │ └── subscription.go │ ├── info/ │ │ └── version.go │ ├── log/ │ │ ├── formatting.go │ │ ├── formatting_unix.go │ │ ├── formatting_windows.go │ │ ├── input.go │ │ ├── logging.go │ │ ├── logging_test.go │ │ ├── output.go │ │ ├── slog.go │ │ ├── trace.go │ │ ├── trace_test.go │ │ └── writer.go │ ├── metrics/ │ │ ├── api.go │ │ ├── config.go │ │ ├── metric.go │ │ ├── metric_counter.go │ │ ├── metric_counter_fetching.go │ │ ├── metric_export.go │ │ ├── metric_gauge.go │ │ ├── metric_histogram.go │ │ ├── metrics_host.go │ │ ├── metrics_info.go │ │ ├── metrics_logs.go │ │ ├── metrics_runtime.go │ │ ├── module.go │ │ └── persistence.go │ ├── notifications/ │ │ ├── cleaner.go │ │ ├── config.go │ │ ├── database.go │ │ ├── doc.go │ │ ├── module-mirror.go │ │ ├── module.go │ │ └── notification.go │ ├── rng/ │ │ ├── doc.go │ │ ├── entropy.go │ │ ├── entropy_test.go │ │ ├── fullfeed.go │ │ ├── fullfeed_test.go │ │ ├── get.go │ │ ├── get_test.go │ │ ├── osfeeder.go │ │ ├── rng.go │ │ ├── rng_test.go │ │ └── tickfeeder.go │ ├── runtime/ │ │ ├── module.go │ │ ├── provider.go │ │ ├── registry.go │ │ ├── registry_test.go │ │ ├── singe_record_provider.go │ │ ├── storage.go │ │ └── trace_provider.go │ ├── template/ │ │ └── module.go │ └── utils/ │ ├── atomic.go │ ├── broadcastflag.go │ ├── call_limiter.go │ ├── call_limiter2.go │ ├── call_limiter_test.go │ ├── debug/ │ │ ├── debug.go │ │ ├── debug_android.go │ │ └── debug_default.go │ ├── fs.go │ ├── mimetypes.go │ ├── onceagain.go │ ├── onceagain_test.go │ ├── osdetail/ │ │ ├── colors_windows.go │ │ ├── command.go │ │ ├── dnscache_windows.go │ │ ├── errors.go │ │ ├── service_windows.go │ │ ├── shell_windows.go │ │ ├── svchost_windows.go │ │ ├── version_windows.go │ │ └── version_windows_test.go │ ├── permissions.go │ ├── permissions_windows.go │ ├── renameio/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── doc.go │ │ ├── example_test.go │ │ ├── symlink_test.go │ │ ├── tempfile.go │ │ ├── tempfile_linux_test.go │ │ ├── writefile.go │ │ └── writefile_test.go │ ├── safe.go │ ├── safe_test.go │ ├── slices.go │ ├── slices_test.go │ ├── stablepool.go │ ├── stablepool_test.go │ ├── structure.go │ ├── structure_test.go │ ├── uuid.go │ └── uuid_test.go ├── cmds/ │ ├── cmdbase/ │ │ ├── service.go │ │ ├── service_linux.go │ │ ├── service_windows.go │ │ ├── update.go │ │ └── version.go │ ├── integrationtest/ │ │ ├── main.go │ │ └── netstate.go │ ├── trafficgen/ │ │ ├── main.go │ │ └── pack │ └── winkext-test/ │ ├── main.go │ ├── main_linux.go │ └── pack ├── desktop/ │ ├── angular/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── .vscode/ │ │ │ ├── launch.json │ │ │ └── tasks.json │ │ ├── README.md │ │ ├── angular.json │ │ ├── browser-extension-dev.config.ts │ │ ├── browser-extension.config.ts │ │ ├── docker.sh │ │ ├── e2e/ │ │ │ ├── protractor.conf.js │ │ │ ├── src/ │ │ │ │ ├── app.e2e-spec.ts │ │ │ │ └── app.po.ts │ │ │ └── tsconfig.json │ │ ├── karma.conf.js │ │ ├── package.json │ │ ├── projects/ │ │ │ ├── portmaster-chrome-extension/ │ │ │ │ ├── karma.conf.js │ │ │ │ ├── src/ │ │ │ │ │ ├── app/ │ │ │ │ │ │ ├── app-routing.module.ts │ │ │ │ │ │ ├── app.component.html │ │ │ │ │ │ ├── app.component.scss │ │ │ │ │ │ ├── app.component.ts │ │ │ │ │ │ ├── app.module.ts │ │ │ │ │ │ ├── domain-list/ │ │ │ │ │ │ │ ├── domain-list.component.html │ │ │ │ │ │ │ ├── domain-list.component.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── header/ │ │ │ │ │ │ │ ├── header.component.html │ │ │ │ │ │ │ ├── header.component.scss │ │ │ │ │ │ │ ├── header.component.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── interceptor.ts │ │ │ │ │ │ ├── request-interceptor.service.ts │ │ │ │ │ │ └── welcome/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── intro.component.html │ │ │ │ │ │ ├── intro.component.ts │ │ │ │ │ │ └── welcome.module.ts │ │ │ │ │ ├── assets/ │ │ │ │ │ │ └── .gitkeep │ │ │ │ │ ├── background/ │ │ │ │ │ │ ├── commands.ts │ │ │ │ │ │ ├── tab-tracker.ts │ │ │ │ │ │ └── tab-utils.ts │ │ │ │ │ ├── background.ts │ │ │ │ │ ├── environments/ │ │ │ │ │ │ ├── environment.prod.ts │ │ │ │ │ │ └── environment.ts │ │ │ │ │ ├── index.html │ │ │ │ │ ├── main.ts │ │ │ │ │ ├── manifest.json │ │ │ │ │ ├── polyfills.ts │ │ │ │ │ ├── styles.scss │ │ │ │ │ └── test.ts │ │ │ │ ├── tsconfig.app.json │ │ │ │ └── tsconfig.spec.json │ │ │ ├── safing/ │ │ │ │ ├── portmaster-api/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── karma.conf.js │ │ │ │ │ ├── ng-package.json │ │ │ │ │ ├── package.json │ │ │ │ │ ├── src/ │ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ │ ├── app-profile.service.ts │ │ │ │ │ │ │ ├── app-profile.types.ts │ │ │ │ │ │ │ ├── config.service.ts │ │ │ │ │ │ │ ├── config.types.ts │ │ │ │ │ │ │ ├── core.types.ts │ │ │ │ │ │ │ ├── debug-api.service.ts │ │ │ │ │ │ │ ├── features.ts │ │ │ │ │ │ │ ├── meta-api.service.ts │ │ │ │ │ │ │ ├── module.ts │ │ │ │ │ │ │ ├── netquery.service.ts │ │ │ │ │ │ │ ├── network.types.ts │ │ │ │ │ │ │ ├── platform-specific/ │ │ │ │ │ │ │ │ ├── tauri/ │ │ │ │ │ │ │ │ │ ├── tauri-http-interceptor.ts │ │ │ │ │ │ │ │ │ └── tauri-websocket-subject.ts │ │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ │ ├── portapi.service.ts │ │ │ │ │ │ │ ├── portapi.types.ts │ │ │ │ │ │ │ ├── spn.service.ts │ │ │ │ │ │ │ ├── spn.types.ts │ │ │ │ │ │ │ ├── utils.ts │ │ │ │ │ │ │ └── websocket.service.ts │ │ │ │ │ │ ├── public-api.ts │ │ │ │ │ │ └── test.ts │ │ │ │ │ ├── tsconfig.lib.json │ │ │ │ │ ├── tsconfig.lib.prod.json │ │ │ │ │ └── tsconfig.spec.json │ │ │ │ └── ui/ │ │ │ │ ├── .eslintrc.json │ │ │ │ ├── README.md │ │ │ │ ├── karma.conf.js │ │ │ │ ├── ng-package.json │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ │ ├── accordion-group.html │ │ │ │ │ │ │ ├── accordion-group.ts │ │ │ │ │ │ │ ├── accordion.html │ │ │ │ │ │ │ ├── accordion.module.ts │ │ │ │ │ │ │ ├── accordion.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── animations/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ │ ├── _confirm.dialog.scss │ │ │ │ │ │ │ ├── _dialog.scss │ │ │ │ │ │ │ ├── confirm.dialog.html │ │ │ │ │ │ │ ├── confirm.dialog.ts │ │ │ │ │ │ │ ├── dialog.animations.ts │ │ │ │ │ │ │ ├── dialog.container.ts │ │ │ │ │ │ │ ├── dialog.module.ts │ │ │ │ │ │ │ ├── dialog.ref.ts │ │ │ │ │ │ │ ├── dialog.service.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── dropdown/ │ │ │ │ │ │ │ ├── dropdown.html │ │ │ │ │ │ │ ├── dropdown.module.ts │ │ │ │ │ │ │ ├── dropdown.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── overlay-stepper/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── overlay-stepper-container.html │ │ │ │ │ │ │ ├── overlay-stepper-container.ts │ │ │ │ │ │ │ ├── overlay-stepper.module.ts │ │ │ │ │ │ │ ├── overlay-stepper.ts │ │ │ │ │ │ │ ├── refs.ts │ │ │ │ │ │ │ ├── step-outlet.ts │ │ │ │ │ │ │ └── step.ts │ │ │ │ │ │ ├── pagination/ │ │ │ │ │ │ │ ├── _pagination.scss │ │ │ │ │ │ │ ├── dynamic-items-paginator.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── pagination.html │ │ │ │ │ │ │ ├── pagination.module.ts │ │ │ │ │ │ │ ├── pagination.ts │ │ │ │ │ │ │ └── snapshot-paginator.ts │ │ │ │ │ │ ├── select/ │ │ │ │ │ │ │ ├── _select.scss │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── item.ts │ │ │ │ │ │ │ ├── select.html │ │ │ │ │ │ │ ├── select.module.ts │ │ │ │ │ │ │ └── select.ts │ │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ │ ├── _tab-group.scss │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── tab-group.html │ │ │ │ │ │ │ ├── tab-group.ts │ │ │ │ │ │ │ ├── tab.ts │ │ │ │ │ │ │ └── tabs.module.ts │ │ │ │ │ │ ├── tipup/ │ │ │ │ │ │ │ ├── _tipup.scss │ │ │ │ │ │ │ ├── anchor.ts │ │ │ │ │ │ │ ├── clone-node.ts │ │ │ │ │ │ │ ├── css-utils.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── safe.pipe.ts │ │ │ │ │ │ │ ├── tipup-component.ts │ │ │ │ │ │ │ ├── tipup.html │ │ │ │ │ │ │ ├── tipup.module.ts │ │ │ │ │ │ │ ├── tipup.ts │ │ │ │ │ │ │ ├── translations.ts │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ ├── toggle-switch/ │ │ │ │ │ │ │ ├── _toggle-switch.scss │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── toggle-switch.html │ │ │ │ │ │ │ ├── toggle-switch.ts │ │ │ │ │ │ │ └── toggle.module.ts │ │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ │ ├── _tooltip-component.scss │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── tooltip-component.html │ │ │ │ │ │ │ ├── tooltip-component.ts │ │ │ │ │ │ │ ├── tooltip.module.ts │ │ │ │ │ │ │ └── tooltip.ts │ │ │ │ │ │ └── ui.module.ts │ │ │ │ │ ├── public-api.ts │ │ │ │ │ └── test.ts │ │ │ │ ├── theming.scss │ │ │ │ ├── tsconfig.lib.json │ │ │ │ ├── tsconfig.lib.prod.json │ │ │ │ └── tsconfig.spec.json │ │ │ └── tauri-builtin/ │ │ │ ├── src/ │ │ │ │ ├── app/ │ │ │ │ │ ├── app.component.html │ │ │ │ │ ├── app.component.ts │ │ │ │ │ └── app.config.ts │ │ │ │ ├── index.html │ │ │ │ ├── main.ts │ │ │ │ └── styles.scss │ │ │ └── tsconfig.app.json │ │ ├── proxy.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app-routing.module.ts │ │ │ │ ├── app.component.html │ │ │ │ ├── app.component.scss │ │ │ │ ├── app.component.spec.ts │ │ │ │ ├── app.component.ts │ │ │ │ ├── app.module.ts │ │ │ │ ├── integration/ │ │ │ │ │ ├── browser.ts │ │ │ │ │ ├── electron.ts │ │ │ │ │ ├── factory.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── integration.ts │ │ │ │ │ └── taur-app.ts │ │ │ │ ├── intro/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── intro.module.ts │ │ │ │ │ ├── step-1-welcome/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-1-welcome.html │ │ │ │ │ │ └── step-1-welcome.ts │ │ │ │ │ ├── step-2-trackers/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-2-trackers.html │ │ │ │ │ │ └── step-2-trackers.ts │ │ │ │ │ ├── step-3-dns/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-3-dns.html │ │ │ │ │ │ └── step-3-dns.ts │ │ │ │ │ ├── step-4-tipups/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── step-4-tipups.html │ │ │ │ │ │ └── step-4-tipups.ts │ │ │ │ │ └── step.scss │ │ │ │ ├── layout/ │ │ │ │ │ ├── navigation/ │ │ │ │ │ │ ├── navigation.html │ │ │ │ │ │ ├── navigation.scss │ │ │ │ │ │ └── navigation.ts │ │ │ │ │ └── side-dash/ │ │ │ │ │ ├── side-dash.html │ │ │ │ │ ├── side-dash.scss │ │ │ │ │ └── side-dash.ts │ │ │ │ ├── package.json │ │ │ │ ├── pages/ │ │ │ │ │ ├── app-view/ │ │ │ │ │ │ ├── app-insights/ │ │ │ │ │ │ │ ├── app-insights.component.html │ │ │ │ │ │ │ └── app-insights.component.ts │ │ │ │ │ │ ├── app-view.html │ │ │ │ │ │ ├── app-view.scss │ │ │ │ │ │ ├── app-view.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── merge-profile-dialog/ │ │ │ │ │ │ │ ├── merge-profile-dialog.component.html │ │ │ │ │ │ │ └── merge-profile-dialog.component.ts │ │ │ │ │ │ ├── overview.html │ │ │ │ │ │ ├── overview.scss │ │ │ │ │ │ ├── overview.ts │ │ │ │ │ │ ├── qs-history/ │ │ │ │ │ │ │ ├── qs-history.component.html │ │ │ │ │ │ │ ├── qs-history.component.scss │ │ │ │ │ │ │ └── qs-history.component.ts │ │ │ │ │ │ ├── qs-internet/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── qs-internet.html │ │ │ │ │ │ │ └── qs-internet.ts │ │ │ │ │ │ ├── qs-select-exit/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── qs-select-exit.html │ │ │ │ │ │ │ ├── qs-select-exit.scss │ │ │ │ │ │ │ └── qs-select-exit.ts │ │ │ │ │ │ └── qs-use-spn/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── qs-use-spn.html │ │ │ │ │ │ └── qs-use-spn.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── dashboard-widget/ │ │ │ │ │ │ │ ├── dashboard-widget.component.html │ │ │ │ │ │ │ └── dashboard-widget.component.ts │ │ │ │ │ │ ├── dashboard.component.html │ │ │ │ │ │ ├── dashboard.component.scss │ │ │ │ │ │ ├── dashboard.component.ts │ │ │ │ │ │ └── feature-card/ │ │ │ │ │ │ ├── feature-card.component.html │ │ │ │ │ │ ├── feature-card.component.scss │ │ │ │ │ │ └── feature-card.component.ts │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── monitor.html │ │ │ │ │ │ ├── monitor.scss │ │ │ │ │ │ └── monitor.ts │ │ │ │ │ ├── page.scss │ │ │ │ │ ├── settings/ │ │ │ │ │ │ ├── settings.html │ │ │ │ │ │ ├── settings.scss │ │ │ │ │ │ └── settings.ts │ │ │ │ │ ├── spn/ │ │ │ │ │ │ ├── country-details/ │ │ │ │ │ │ │ ├── country-details.html │ │ │ │ │ │ │ ├── country-details.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── country-overlay/ │ │ │ │ │ │ │ ├── country-overlay.html │ │ │ │ │ │ │ ├── country-overlay.scss │ │ │ │ │ │ │ ├── country-overlay.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── map-legend/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── map-legend.html │ │ │ │ │ │ │ └── map-legend.ts │ │ │ │ │ │ ├── map-renderer/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── map-renderer.ts │ │ │ │ │ │ │ └── map-style.scss │ │ │ │ │ │ ├── map.service.ts │ │ │ │ │ │ ├── node-icon/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── node-icon.html │ │ │ │ │ │ │ ├── node-icon.scss │ │ │ │ │ │ │ └── node-icon.ts │ │ │ │ │ │ ├── pin-details/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── pin-details.html │ │ │ │ │ │ │ └── pin-details.ts │ │ │ │ │ │ ├── pin-list/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── pin-list.html │ │ │ │ │ │ │ └── pin-list.ts │ │ │ │ │ │ ├── pin-overlay/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── pin-overlay.html │ │ │ │ │ │ │ ├── pin-overlay.scss │ │ │ │ │ │ │ └── pin-overlay.ts │ │ │ │ │ │ ├── pin-route/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── pin-route.html │ │ │ │ │ │ │ ├── pin-route.scss │ │ │ │ │ │ │ └── pin-route.ts │ │ │ │ │ │ ├── spn-feature-carousel/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── spn-feature-carousel.html │ │ │ │ │ │ │ ├── spn-feature-carousel.scss │ │ │ │ │ │ │ └── spn-feature-carousel.ts │ │ │ │ │ │ ├── spn-page.html │ │ │ │ │ │ ├── spn-page.scss │ │ │ │ │ │ ├── spn-page.ts │ │ │ │ │ │ ├── spn.module.ts │ │ │ │ │ │ └── utils.ts │ │ │ │ │ └── support/ │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── support-form.html │ │ │ │ │ │ ├── support-form.scss │ │ │ │ │ │ └── support-form.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── pages.ts │ │ │ │ │ ├── progress-dialog/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── progress-dialog.html │ │ │ │ │ │ └── progress-dialog.ts │ │ │ │ │ ├── support.html │ │ │ │ │ ├── support.scss │ │ │ │ │ └── support.ts │ │ │ │ ├── prompt-entrypoint/ │ │ │ │ │ ├── prompt-entrypoint.ts │ │ │ │ │ └── prompt.html │ │ │ │ ├── services/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notifications.service.spec.ts │ │ │ │ │ ├── notifications.service.ts │ │ │ │ │ ├── notifications.types.ts │ │ │ │ │ ├── package.json │ │ │ │ │ ├── session-data.service.ts │ │ │ │ │ ├── status.service.spec.ts │ │ │ │ │ ├── status.service.ts │ │ │ │ │ ├── status.types.ts │ │ │ │ │ ├── supporthub.service.ts │ │ │ │ │ ├── ui-state.service.ts │ │ │ │ │ └── virtual-notification.ts │ │ │ │ └── shared/ │ │ │ │ ├── action-indicator/ │ │ │ │ │ ├── action-indicator.module.ts │ │ │ │ │ ├── action-indicator.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── indicator.html │ │ │ │ │ ├── indicator.scss │ │ │ │ │ └── indicator.ts │ │ │ │ ├── animations.ts │ │ │ │ ├── app-icon/ │ │ │ │ │ ├── app-icon-resolver.ts │ │ │ │ │ ├── app-icon.html │ │ │ │ │ ├── app-icon.module.ts │ │ │ │ │ ├── app-icon.scss │ │ │ │ │ ├── app-icon.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── config/ │ │ │ │ │ ├── basic-setting/ │ │ │ │ │ │ ├── basic-setting.html │ │ │ │ │ │ ├── basic-setting.scss │ │ │ │ │ │ ├── basic-setting.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── config-settings.html │ │ │ │ │ ├── config-settings.scss │ │ │ │ │ ├── config-settings.ts │ │ │ │ │ ├── config.module.ts │ │ │ │ │ ├── export-dialog/ │ │ │ │ │ │ ├── export-dialog.component.html │ │ │ │ │ │ └── export-dialog.component.ts │ │ │ │ │ ├── filter-lists/ │ │ │ │ │ │ ├── filter-list.html │ │ │ │ │ │ ├── filter-list.scss │ │ │ │ │ │ ├── filter-list.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── generic-setting/ │ │ │ │ │ │ ├── generic-setting.html │ │ │ │ │ │ ├── generic-setting.scss │ │ │ │ │ │ ├── generic-setting.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── import-dialog/ │ │ │ │ │ │ ├── cursor.ts │ │ │ │ │ │ ├── import-dialog.component.html │ │ │ │ │ │ ├── import-dialog.component.ts │ │ │ │ │ │ └── selection.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── ordererd-list/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── item.html │ │ │ │ │ │ ├── item.scss │ │ │ │ │ │ ├── item.ts │ │ │ │ │ │ ├── ordered-list.html │ │ │ │ │ │ ├── ordered-list.scss │ │ │ │ │ │ └── ordered-list.ts │ │ │ │ │ ├── rule-list/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── list-item.html │ │ │ │ │ │ ├── list-item.scss │ │ │ │ │ │ ├── list-item.ts │ │ │ │ │ │ ├── rule-list.html │ │ │ │ │ │ ├── rule-list.scss │ │ │ │ │ │ └── rule-list.ts │ │ │ │ │ ├── safe.pipe.ts │ │ │ │ │ └── subsystems.ts │ │ │ │ ├── count-indicator/ │ │ │ │ │ ├── count-indicator.html │ │ │ │ │ ├── count-indicator.module.ts │ │ │ │ │ ├── count-indicator.scss │ │ │ │ │ ├── count-indicator.ts │ │ │ │ │ ├── count.pipe.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── country-flag/ │ │ │ │ │ ├── country-flag.ts │ │ │ │ │ ├── country.module.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── edit-profile-dialog/ │ │ │ │ │ ├── edit-profile-dialog.html │ │ │ │ │ ├── edit-profile-dialog.scss │ │ │ │ │ ├── edit-profile-dialog.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── exit-screen/ │ │ │ │ │ ├── exit-screen.html │ │ │ │ │ ├── exit-screen.scss │ │ │ │ │ ├── exit-screen.ts │ │ │ │ │ ├── exit.service.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── expertise/ │ │ │ │ │ ├── expertise-directive.ts │ │ │ │ │ ├── expertise-switch.html │ │ │ │ │ ├── expertise-switch.scss │ │ │ │ │ ├── expertise-switch.ts │ │ │ │ │ ├── expertise.module.ts │ │ │ │ │ ├── expertise.service.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── external-link.directive.ts │ │ │ │ ├── feature-scout/ │ │ │ │ │ ├── feature-scout.html │ │ │ │ │ ├── feature-scout.scss │ │ │ │ │ ├── feature-scout.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── focus/ │ │ │ │ │ ├── focus.directive.ts │ │ │ │ │ ├── focus.module.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── fuzzySearch/ │ │ │ │ │ ├── fuse.service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── search-pipe.ts │ │ │ │ ├── loading/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── loading.html │ │ │ │ │ ├── loading.scss │ │ │ │ │ └── loading.ts │ │ │ │ ├── menu/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── menu-group.scss │ │ │ │ │ ├── menu-item.scss │ │ │ │ │ ├── menu-trigger.html │ │ │ │ │ ├── menu-trigger.scss │ │ │ │ │ ├── menu.html │ │ │ │ │ ├── menu.module.ts │ │ │ │ │ └── menu.ts │ │ │ │ ├── multi-switch/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── multi-switch.html │ │ │ │ │ ├── multi-switch.module.ts │ │ │ │ │ ├── multi-switch.scss │ │ │ │ │ ├── multi-switch.ts │ │ │ │ │ ├── switch-item.scss │ │ │ │ │ └── switch-item.ts │ │ │ │ ├── netquery/ │ │ │ │ │ ├── .eslintrc.json │ │ │ │ │ ├── add-to-filter/ │ │ │ │ │ │ ├── add-to-filter.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── circular-bar-chart/ │ │ │ │ │ │ └── circular-bar-chart.component.ts │ │ │ │ │ ├── combined-menu.pipe.ts │ │ │ │ │ ├── connection-details/ │ │ │ │ │ │ ├── conn-details.html │ │ │ │ │ │ ├── conn-details.scss │ │ │ │ │ │ ├── conn-details.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── connection-helper.service.ts │ │ │ │ │ ├── connection-row/ │ │ │ │ │ │ ├── conn-row.html │ │ │ │ │ │ ├── conn-row.scss │ │ │ │ │ │ ├── conn-row.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── line-chart/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── line-chart.ts │ │ │ │ │ ├── netquery.component.html │ │ │ │ │ ├── netquery.component.ts │ │ │ │ │ ├── netquery.module.ts │ │ │ │ │ ├── pipes/ │ │ │ │ │ │ ├── can-show.pipe.ts │ │ │ │ │ │ ├── can-use-rules.pipe.ts │ │ │ │ │ │ ├── country-name.pipe.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── is-blocked.pipe.ts │ │ │ │ │ │ └── location.pipe.ts │ │ │ │ │ ├── scope-label/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── scope-label.html │ │ │ │ │ │ └── scope-label.ts │ │ │ │ │ ├── search-overlay/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── search-overlay.html │ │ │ │ │ │ └── search-overlay.ts │ │ │ │ │ ├── searchbar/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── searchbar.html │ │ │ │ │ │ └── searchbar.ts │ │ │ │ │ ├── tag-bar/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tag-bar.html │ │ │ │ │ │ └── tag-bar.ts │ │ │ │ │ ├── textql/ │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── input.ts │ │ │ │ │ │ ├── lexer.ts │ │ │ │ │ │ ├── parser.ts │ │ │ │ │ │ └── token.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── network-scout/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── network-scout.html │ │ │ │ │ ├── network-scout.scss │ │ │ │ │ └── network-scout.ts │ │ │ │ ├── notification/ │ │ │ │ │ ├── notification.html │ │ │ │ │ ├── notification.scss │ │ │ │ │ └── notification.ts │ │ │ │ ├── notification-list/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── notification-list.component.html │ │ │ │ │ ├── notification-list.component.scss │ │ │ │ │ └── notification-list.component.ts │ │ │ │ ├── pipes/ │ │ │ │ │ ├── bytes.pipe.ts │ │ │ │ │ ├── common-pipes.module.ts │ │ │ │ │ ├── duration.pipe.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── round.pipe.ts │ │ │ │ │ ├── time-ago.pipe.ts │ │ │ │ │ ├── to-profile.pipe.ts │ │ │ │ │ └── to-seconds.pipe.ts │ │ │ │ ├── process-details-dialog/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── process-details-dialog.html │ │ │ │ │ ├── process-details-dialog.scss │ │ │ │ │ └── process-details-dialog.ts │ │ │ │ ├── prompt-list/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── prompt-list.component.html │ │ │ │ │ ├── prompt-list.component.scss │ │ │ │ │ └── prompt-list.component.ts │ │ │ │ ├── security-lock/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── security-lock.html │ │ │ │ │ ├── security-lock.scss │ │ │ │ │ └── security-lock.ts │ │ │ │ ├── spn-account-details/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spn-account-details.html │ │ │ │ │ ├── spn-account-details.scss │ │ │ │ │ └── spn-account-details.ts │ │ │ │ ├── spn-login/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spn-login.html │ │ │ │ │ ├── spn-login.scss │ │ │ │ │ └── spn-login.ts │ │ │ │ ├── spn-network-status/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spn-network-status.html │ │ │ │ │ ├── spn-network-status.scss │ │ │ │ │ └── spn-network-status.ts │ │ │ │ ├── spn-status/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── spn-status.html │ │ │ │ │ └── spn-status.ts │ │ │ │ ├── text-placeholder/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── placeholder.scss │ │ │ │ │ └── placeholder.ts │ │ │ │ └── utils.ts │ │ │ ├── electron-app.d.ts │ │ │ ├── environments/ │ │ │ │ ├── environment.prod.ts │ │ │ │ └── environment.ts │ │ │ ├── i18n/ │ │ │ │ ├── helptexts.yaml │ │ │ │ └── helptexts.yaml.d.ts │ │ │ ├── index.html │ │ │ ├── main.ts │ │ │ ├── polyfills.ts │ │ │ ├── styles.scss │ │ │ ├── test.ts │ │ │ ├── theme/ │ │ │ │ ├── _breadcrumbs.scss │ │ │ │ ├── _button.scss │ │ │ │ ├── _card.scss │ │ │ │ ├── _colors.scss │ │ │ │ ├── _dialog.scss │ │ │ │ ├── _drag-n-drop.scss │ │ │ │ ├── _inputs.scss │ │ │ │ ├── _markdown.scss │ │ │ │ ├── _pill.scss │ │ │ │ ├── _scroll.scss │ │ │ │ ├── _search.scss │ │ │ │ ├── _table.scss │ │ │ │ ├── _tailwind.scss │ │ │ │ ├── _trust-level.scss │ │ │ │ ├── _typography.scss │ │ │ │ ├── _verdict.scss │ │ │ │ └── mixins/ │ │ │ │ └── _pill.scss │ │ │ └── theme.less │ │ ├── tailwind.config.js │ │ ├── tsconfig.app.json │ │ ├── tsconfig.json │ │ └── tsconfig.spec.json │ └── tauri/ │ ├── .cargo/ │ │ └── config.toml │ ├── .vscode/ │ │ ├── launch.json │ │ └── tasks.json │ └── src-tauri/ │ ├── .gitignore │ ├── Cargo.toml │ ├── Cross.toml │ ├── README.md │ ├── build.rs │ ├── capabilities/ │ │ └── default.json │ ├── src/ │ │ ├── cli.rs │ │ ├── commands/ │ │ │ ├── mod.rs │ │ │ └── tauri_http.rs │ │ ├── config.rs │ │ ├── main.rs │ │ ├── portapi/ │ │ │ ├── client.rs │ │ │ ├── message.rs │ │ │ ├── mod.rs │ │ │ ├── models/ │ │ │ │ ├── config.rs │ │ │ │ ├── mod.rs │ │ │ │ ├── notification.rs │ │ │ │ ├── spn.rs │ │ │ │ └── system_status_types.rs │ │ │ └── types.rs │ │ ├── portmaster/ │ │ │ ├── commands.rs │ │ │ ├── mod.rs │ │ │ ├── notifications.rs │ │ │ └── websocket.rs │ │ ├── service/ │ │ │ ├── manager.rs │ │ │ ├── mod.rs │ │ │ ├── status.rs │ │ │ ├── systemd.rs │ │ │ └── windows_service.rs │ │ ├── traymenu.rs │ │ ├── window.rs │ │ └── xdg/ │ │ └── mod.rs │ ├── tauri.conf.json5 │ └── templates/ │ ├── NSIS_Simple_Service_Plugin_Unicode_1.30/ │ │ ├── License.txt │ │ ├── Readme.txt │ │ └── Source/ │ │ ├── LSASecurityControl.pas │ │ ├── NSIS Plugins.groupproj │ │ ├── NSIS.pas │ │ ├── ServiceControl.pas │ │ ├── SimpleSC.dpr │ │ ├── SimpleSC.dproj │ │ └── SimpleSC.res │ ├── nsis/ │ │ └── install_hooks.nsh │ └── wix/ │ ├── CheckServiceStatus.vbs │ ├── Migration.vbs │ ├── files.wxs │ ├── main.wxs │ ├── main_original.wxs │ ├── migration.wxs │ └── old_service_check.wxs ├── go.mod ├── go.sum ├── packaging/ │ ├── README.md │ ├── linux/ │ │ ├── dev_helpers/ │ │ │ └── build_tauri.sh │ │ ├── portmaster-autostart.desktop │ │ ├── portmaster.desktop │ │ ├── portmaster.service │ │ ├── postinst │ │ ├── postrm │ │ └── readme.md │ └── windows/ │ ├── .gitkeep │ ├── dev_helpers/ │ │ ├── build_angular.ps1 │ │ └── build_tauri.ps1 │ ├── generate_windows_installers.ps1 │ └── sign_binaries_in_dist.ps1 ├── runtime/ │ └── .gitkeep ├── service/ │ ├── broadcasts/ │ │ ├── api.go │ │ ├── data.go │ │ ├── install_info.go │ │ ├── module.go │ │ ├── notify.go │ │ └── state.go │ ├── compat/ │ │ ├── api.go │ │ ├── callbacks.go │ │ ├── debug_default.go │ │ ├── debug_linux.go │ │ ├── debug_windows.go │ │ ├── iptables.go │ │ ├── iptables_test.go │ │ ├── module.go │ │ ├── notify.go │ │ ├── selfcheck.go │ │ ├── wfpstate.go │ │ └── wfpstate_test.go │ ├── config.go │ ├── configure/ │ │ └── updates.go │ ├── control/ │ │ ├── api.go │ │ ├── module.go │ │ └── pause.go │ ├── core/ │ │ ├── api.go │ │ ├── base/ │ │ │ ├── databases.go │ │ │ ├── logs.go │ │ │ ├── module.go │ │ │ └── profiling.go │ │ ├── config.go │ │ ├── core.go │ │ ├── events.go │ │ ├── os_default.go │ │ ├── os_windows.go │ │ ├── update_config.go │ │ └── update_versions.go │ ├── debug.go │ ├── debug_test.go │ ├── detection/ │ │ └── dga/ │ │ ├── lms.go │ │ └── lms_test.go │ ├── firewall/ │ │ ├── api.go │ │ ├── bypassing.go │ │ ├── config.go │ │ ├── dns.go │ │ ├── inspection/ │ │ │ └── inspection.go │ │ ├── interception/ │ │ │ ├── dnsmonitor/ │ │ │ │ ├── etwlink_windows.go │ │ │ │ ├── eventlistener.go │ │ │ │ ├── eventlistener_linux.go │ │ │ │ ├── eventlistener_windows.go │ │ │ │ ├── module.go │ │ │ │ └── varlinktypes.go │ │ │ ├── ebpf/ │ │ │ │ ├── bandwidth/ │ │ │ │ │ ├── bpf_bpfeb.go │ │ │ │ │ ├── bpf_bpfeb.o │ │ │ │ │ ├── bpf_bpfel.go │ │ │ │ │ ├── bpf_bpfel.o │ │ │ │ │ └── interface.go │ │ │ │ ├── connection_listener/ │ │ │ │ │ ├── bpf_bpfeb.go │ │ │ │ │ ├── bpf_bpfeb.o │ │ │ │ │ ├── bpf_bpfel.go │ │ │ │ │ ├── bpf_bpfel.o │ │ │ │ │ └── worker.go │ │ │ │ ├── exec/ │ │ │ │ │ ├── bpf_bpfeb.go │ │ │ │ │ ├── bpf_bpfeb.o │ │ │ │ │ ├── bpf_bpfel.go │ │ │ │ │ ├── bpf_bpfel.o │ │ │ │ │ └── exec.go │ │ │ │ └── programs/ │ │ │ │ ├── bandwidth.c │ │ │ │ ├── bpf/ │ │ │ │ │ ├── bpf_core_read.h │ │ │ │ │ ├── bpf_helper_defs.h │ │ │ │ │ ├── bpf_helpers.h │ │ │ │ │ └── bpf_tracing.h │ │ │ │ ├── exec.c │ │ │ │ ├── monitor.c │ │ │ │ ├── update.sh │ │ │ │ └── vmlinux-x86.h │ │ │ ├── interception_default.go │ │ │ ├── interception_linux.go │ │ │ ├── interception_windows.go │ │ │ ├── introspection.go │ │ │ ├── module.go │ │ │ ├── nfq/ │ │ │ │ ├── conntrack.go │ │ │ │ ├── nfq.go │ │ │ │ └── packet.go │ │ │ ├── nfqueue_linux.go │ │ │ ├── packet_tracer.go │ │ │ ├── windowskext/ │ │ │ │ ├── bandwidth_stats.go │ │ │ │ ├── doc.go │ │ │ │ ├── handler.go │ │ │ │ ├── kext.go │ │ │ │ ├── packet.go │ │ │ │ ├── service.go │ │ │ │ └── syscall.go │ │ │ └── windowskext2/ │ │ │ ├── doc.go │ │ │ ├── handler.go │ │ │ ├── kext.go │ │ │ ├── packet.go │ │ │ └── service.go │ │ ├── master.go │ │ ├── module.go │ │ ├── packet_handler.go │ │ ├── preauth.go │ │ ├── prompt.go │ │ └── tunnel.go │ ├── instance.go │ ├── integration/ │ │ ├── etw_windows.go │ │ ├── integration.go │ │ ├── integration_windows.go │ │ └── module.go │ ├── intel/ │ │ ├── block_reason.go │ │ ├── customlists/ │ │ │ ├── config.go │ │ │ ├── lists.go │ │ │ └── module.go │ │ ├── entity.go │ │ ├── entity_test.go │ │ ├── filterlists/ │ │ │ ├── bloom.go │ │ │ ├── cache_version.go │ │ │ ├── database.go │ │ │ ├── decoder.go │ │ │ ├── index.go │ │ │ ├── keys.go │ │ │ ├── lookup.go │ │ │ ├── module.go │ │ │ ├── module_test.go │ │ │ ├── record.go │ │ │ └── updater.go │ │ ├── geoip/ │ │ │ ├── country_info.go │ │ │ ├── country_info_test.go │ │ │ ├── database.go │ │ │ ├── init_test.go │ │ │ ├── location.go │ │ │ ├── location_test.go │ │ │ ├── lookup.go │ │ │ ├── lookup_test.go │ │ │ ├── module.go │ │ │ ├── regions.go │ │ │ └── regions_test.go │ │ └── resolver.go │ ├── interop/ │ │ ├── api.go │ │ ├── ivpn/ │ │ │ ├── ivpn.go │ │ │ └── notification.go │ │ ├── module.go │ │ └── verdict_handler.go │ ├── mgr/ │ │ ├── doc.go │ │ ├── events.go │ │ ├── group.go │ │ ├── group_ext.go │ │ ├── group_module.go │ │ ├── manager.go │ │ ├── sleepyticker.go │ │ ├── sleepyticker_test.go │ │ ├── states.go │ │ ├── worker.go │ │ ├── worker_info.go │ │ ├── worker_test.go │ │ ├── workermgr.go │ │ └── workermgr_test.go │ ├── nameserver/ │ │ ├── config.go │ │ ├── conflict.go │ │ ├── failing.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── nameserver.go │ │ ├── nsutil/ │ │ │ └── nsutil.go │ │ └── response.go │ ├── netenv/ │ │ ├── addresses_test.go │ │ ├── adresses.go │ │ ├── api.go │ │ ├── dbus_linux.go │ │ ├── dbus_linux_test.go │ │ ├── dialing.go │ │ ├── environment.go │ │ ├── environment_default.go │ │ ├── environment_linux.go │ │ ├── environment_linux_test.go │ │ ├── environment_test.go │ │ ├── environment_windows.go │ │ ├── environment_windows_test.go │ │ ├── icmp_listener.go │ │ ├── init_test.go │ │ ├── location.go │ │ ├── location_default.go │ │ ├── location_test.go │ │ ├── location_windows.go │ │ ├── main.go │ │ ├── main_test.go │ │ ├── network-change.go │ │ ├── notes.md │ │ ├── online-status.go │ │ ├── online-status_test.go │ │ ├── os_android.go │ │ └── os_default.go │ ├── netquery/ │ │ ├── active_chart_handler.go │ │ ├── bandwidth_chart_handler.go │ │ ├── database.go │ │ ├── manager.go │ │ ├── module_api.go │ │ ├── orm/ │ │ │ ├── decoder.go │ │ │ ├── decoder_test.go │ │ │ ├── encoder.go │ │ │ ├── encoder_test.go │ │ │ ├── query_runner.go │ │ │ ├── schema_builder.go │ │ │ └── schema_builder_test.go │ │ ├── query.go │ │ ├── query_handler.go │ │ ├── query_request.go │ │ ├── query_test.go │ │ └── runtime_query_runner.go │ ├── network/ │ │ ├── api.go │ │ ├── api_test.go │ │ ├── clean.go │ │ ├── connection.go │ │ ├── connection_android.go │ │ ├── connection_handler.go │ │ ├── connection_store.go │ │ ├── database.go │ │ ├── dns.go │ │ ├── iphelper/ │ │ │ ├── get.go │ │ │ ├── iphelper.go │ │ │ ├── tables.go │ │ │ └── tables_test.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── multicast.go │ │ ├── netutils/ │ │ │ ├── address.go │ │ │ ├── dns.go │ │ │ ├── dns_test.go │ │ │ ├── ip.go │ │ │ ├── ip_test.go │ │ │ └── tcpassembly.go │ │ ├── packet/ │ │ │ ├── bandwidth.go │ │ │ ├── const.go │ │ │ ├── info_only.go │ │ │ ├── packet.go │ │ │ ├── packetinfo.go │ │ │ └── parse.go │ │ ├── ports.go │ │ ├── proc/ │ │ │ ├── findpid.go │ │ │ ├── pids_by_user.go │ │ │ ├── tables.go │ │ │ └── tables_test.go │ │ ├── reference/ │ │ │ ├── ports.go │ │ │ └── protocols.go │ │ ├── socket/ │ │ │ └── socket.go │ │ ├── state/ │ │ │ ├── exists.go │ │ │ ├── info.go │ │ │ ├── lookup.go │ │ │ ├── system_default.go │ │ │ ├── system_linux.go │ │ │ ├── system_windows.go │ │ │ ├── tcp.go │ │ │ └── udp.go │ │ └── status.go │ ├── process/ │ │ ├── api.go │ │ ├── config.go │ │ ├── database.go │ │ ├── doc.go │ │ ├── executable.go │ │ ├── find.go │ │ ├── module.go │ │ ├── process.go │ │ ├── process_default.go │ │ ├── process_linux.go │ │ ├── process_windows.go │ │ ├── profile.go │ │ ├── special.go │ │ ├── tags/ │ │ │ ├── appimage_unix.go │ │ │ ├── flatpak_unix.go │ │ │ ├── interpreter_unix.go │ │ │ ├── net.go │ │ │ ├── snap_unix.go │ │ │ ├── svchost_windows.go │ │ │ └── winstore_windows.go │ │ └── tags.go │ ├── profile/ │ │ ├── active.go │ │ ├── api.go │ │ ├── binmeta/ │ │ │ ├── convert.go │ │ │ ├── find_default.go │ │ │ ├── find_linux.go │ │ │ ├── find_linux_test.go │ │ │ ├── find_windows.go │ │ │ ├── find_windows_test.go │ │ │ ├── icon.go │ │ │ ├── icons.go │ │ │ ├── ignore.go │ │ │ ├── locations_linux.go │ │ │ ├── name.go │ │ │ └── name_test.go │ │ ├── config-update.go │ │ ├── config.go │ │ ├── database.go │ │ ├── endpoints/ │ │ │ ├── annotations.go │ │ │ ├── endpoint-any.go │ │ │ ├── endpoint-asn.go │ │ │ ├── endpoint-continent.go │ │ │ ├── endpoint-country.go │ │ │ ├── endpoint-domain.go │ │ │ ├── endpoint-ip.go │ │ │ ├── endpoint-iprange.go │ │ │ ├── endpoint-lists.go │ │ │ ├── endpoint-scopes.go │ │ │ ├── endpoint.go │ │ │ ├── endpoint_test.go │ │ │ ├── endpoints.go │ │ │ ├── endpoints_test.go │ │ │ └── reason.go │ │ ├── fingerprint.go │ │ ├── fingerprint_test.go │ │ ├── framework.go │ │ ├── framework_test.go │ │ ├── get.go │ │ ├── merge.go │ │ ├── meta.go │ │ ├── migrations.go │ │ ├── module.go │ │ ├── profile-layered-provider.go │ │ ├── profile-layered.go │ │ ├── profile.go │ │ └── special.go │ ├── resolver/ │ │ ├── api.go │ │ ├── block-detection.go │ │ ├── compat.go │ │ ├── config.go │ │ ├── doc.go │ │ ├── failing.go │ │ ├── ipinfo.go │ │ ├── ipinfo_test.go │ │ ├── main.go │ │ ├── main_test.go │ │ ├── metrics.go │ │ ├── namerecord.go │ │ ├── namerecord_test.go │ │ ├── resolve.go │ │ ├── resolver-env.go │ │ ├── resolver-https.go │ │ ├── resolver-mdns.go │ │ ├── resolver-plain.go │ │ ├── resolver-tcp.go │ │ ├── resolver.go │ │ ├── resolver_test.go │ │ ├── resolvers.go │ │ ├── resolvers_test.go │ │ ├── reverse.go │ │ ├── reverse_test.go │ │ ├── rr_context.go │ │ ├── rrcache.go │ │ ├── rrcache_test.go │ │ ├── scopes.go │ │ └── test/ │ │ └── resolving.bash │ ├── status/ │ │ ├── module.go │ │ ├── notifications.go │ │ ├── security_level.go │ │ └── status.go │ ├── sync/ │ │ ├── module.go │ │ ├── profile.go │ │ ├── setting_single.go │ │ ├── settings.go │ │ └── util.go │ ├── ui/ │ │ ├── api.go │ │ ├── module.go │ │ └── serve.go │ └── updates/ │ ├── downloader.go │ ├── index.go │ ├── index_scan.go │ ├── module.go │ ├── updates_test.go │ └── upgrade.go ├── spn/ │ ├── TESTING.md │ ├── TRADEMARKS │ ├── access/ │ │ ├── account/ │ │ │ ├── auth.go │ │ │ ├── client.go │ │ │ ├── types.go │ │ │ └── view.go │ │ ├── api.go │ │ ├── client.go │ │ ├── client_test.go │ │ ├── database.go │ │ ├── features.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── notify.go │ │ ├── op_auth.go │ │ ├── storage.go │ │ ├── token/ │ │ │ ├── errors.go │ │ │ ├── module_test.go │ │ │ ├── pblind.go │ │ │ ├── pblind_gen_test.go │ │ │ ├── pblind_test.go │ │ │ ├── registry.go │ │ │ ├── request.go │ │ │ ├── request_test.go │ │ │ ├── scramble.go │ │ │ ├── scramble_gen_test.go │ │ │ ├── scramble_test.go │ │ │ ├── token.go │ │ │ └── token_test.go │ │ └── zones.go │ ├── cabin/ │ │ ├── config-public.go │ │ ├── database.go │ │ ├── identity.go │ │ ├── identity_test.go │ │ ├── keys.go │ │ ├── keys_test.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── verification.go │ │ └── verification_test.go │ ├── captain/ │ │ ├── api.go │ │ ├── bootstrap.go │ │ ├── client.go │ │ ├── config.go │ │ ├── establish.go │ │ ├── exceptions.go │ │ ├── gossip.go │ │ ├── hooks.go │ │ ├── intel.go │ │ ├── module.go │ │ ├── navigation.go │ │ ├── op_gossip.go │ │ ├── op_gossip_query.go │ │ ├── op_publish.go │ │ ├── piers.go │ │ ├── public.go │ │ └── status.go │ ├── conf/ │ │ ├── map.go │ │ ├── mode.go │ │ ├── networks.go │ │ └── version.go │ ├── crew/ │ │ ├── connect.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── op_connect.go │ │ ├── op_connect_test.go │ │ ├── op_ping.go │ │ ├── op_ping_test.go │ │ ├── policy.go │ │ └── sticky.go │ ├── debug.go │ ├── docks/ │ │ ├── bandwidth_test.go │ │ ├── controller.go │ │ ├── crane.go │ │ ├── crane_establish.go │ │ ├── crane_init.go │ │ ├── crane_netstate.go │ │ ├── crane_terminal.go │ │ ├── crane_test.go │ │ ├── crane_verify.go │ │ ├── cranehooks.go │ │ ├── hub_import.go │ │ ├── measurements.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── op_capacity.go │ │ ├── op_capacity_test.go │ │ ├── op_expand.go │ │ ├── op_latency.go │ │ ├── op_latency_test.go │ │ ├── op_sync_state.go │ │ ├── op_whoami.go │ │ ├── op_whoami_test.go │ │ ├── terminal_expansion.go │ │ └── terminal_expansion_test.go │ ├── hub/ │ │ ├── database.go │ │ ├── errors.go │ │ ├── format.go │ │ ├── format_test.go │ │ ├── hub.go │ │ ├── hub_test.go │ │ ├── intel.go │ │ ├── intel_override.go │ │ ├── measurements.go │ │ ├── status.go │ │ ├── transport.go │ │ ├── transport_test.go │ │ ├── truststores.go │ │ ├── update.go │ │ └── update_test.go │ ├── instance.go │ ├── navigator/ │ │ ├── api.go │ │ ├── api_route.go │ │ ├── costs.go │ │ ├── database.go │ │ ├── findnearest.go │ │ ├── findnearest_test.go │ │ ├── findroutes.go │ │ ├── findroutes_test.go │ │ ├── intel.go │ │ ├── map.go │ │ ├── map_stats.go │ │ ├── map_test.go │ │ ├── measurements.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── optimize.go │ │ ├── optimize_region.go │ │ ├── optimize_test.go │ │ ├── options.go │ │ ├── pin.go │ │ ├── pin_export.go │ │ ├── region.go │ │ ├── route.go │ │ ├── routing-profiles.go │ │ ├── sort.go │ │ ├── sort_test.go │ │ ├── state.go │ │ ├── state_test.go │ │ └── update.go │ ├── patrol/ │ │ ├── domains.go │ │ ├── domains_test.go │ │ ├── http.go │ │ └── module.go │ ├── ships/ │ │ ├── connection_test.go │ │ ├── http.go │ │ ├── http_info.go │ │ ├── http_info_page.html.tmpl │ │ ├── http_info_test.go │ │ ├── http_shared.go │ │ ├── http_shared_test.go │ │ ├── kcp.go │ │ ├── launch.go │ │ ├── masking.go │ │ ├── module.go │ │ ├── mtu.go │ │ ├── pier.go │ │ ├── registry.go │ │ ├── ship.go │ │ ├── tcp.go │ │ ├── testship.go │ │ ├── testship_test.go │ │ └── virtual_network.go │ ├── sluice/ │ │ ├── module.go │ │ ├── packet_listener.go │ │ ├── request.go │ │ ├── sluice.go │ │ ├── sluices.go │ │ └── udp_listener.go │ ├── spn.go │ ├── terminal/ │ │ ├── control_flow.go │ │ ├── defaults.go │ │ ├── errors.go │ │ ├── fmt.go │ │ ├── init.go │ │ ├── metrics.go │ │ ├── module.go │ │ ├── module_test.go │ │ ├── msg.go │ │ ├── msgtypes.go │ │ ├── operation.go │ │ ├── operation_base.go │ │ ├── operation_counter.go │ │ ├── permission.go │ │ ├── rate_limit.go │ │ ├── session.go │ │ ├── session_test.go │ │ ├── terminal.go │ │ ├── terminal_test.go │ │ ├── testing.go │ │ └── upstream.go │ ├── test │ ├── testing/ │ │ ├── README.md │ │ └── simple/ │ │ ├── README.md │ │ ├── clientsim.sh │ │ ├── config-template.json │ │ ├── docker-compose.yml │ │ ├── entrypoint.sh │ │ ├── inject-intel.sh │ │ ├── intel-client.yaml │ │ ├── intel-testnet.json │ │ ├── join.sh │ │ ├── reset-databases.sh │ │ ├── run.sh │ │ └── stop.sh │ ├── tools/ │ │ ├── Dockerfile │ │ ├── container-init.sh │ │ ├── install.sh │ │ ├── install.v2.sh │ │ ├── start-checksum.txt │ │ └── sysctl.conf │ └── unit/ │ ├── doc.go │ ├── scheduler.go │ ├── scheduler_stats.go │ ├── scheduler_test.go │ ├── unit.go │ ├── unit_debug.go │ └── unit_test.go ├── windows_core_dll/ │ ├── build.ps1 │ ├── dllmain.cpp │ ├── framework.h │ ├── pch.cpp │ ├── pch.h │ ├── windows_core_dll.sln │ ├── windows_core_dll.vcxproj │ ├── windows_core_dll.vcxproj.filters │ └── windows_core_dll.vcxproj.user └── windows_kext/ ├── .gitignore ├── PacketFlow.md ├── PortmasterKext64.inf ├── README.md ├── c_helper/ │ ├── ARM64/ │ │ └── c_helper.lib │ ├── c_helper.filters │ ├── c_helper.sln │ ├── c_helper.vcxproj │ ├── helper.c │ └── x64/ │ └── c_helper.lib ├── driver/ │ ├── .cargo/ │ │ └── config.toml │ ├── Cargo.toml │ ├── Makefile.toml │ ├── README.md │ ├── rust-toolchain │ └── src/ │ ├── ale_callouts.rs │ ├── array_holder.rs │ ├── bandwidth.rs │ ├── callouts.rs │ ├── common.rs │ ├── connection.rs │ ├── connection_cache.rs │ ├── connection_map.rs │ ├── device.rs │ ├── entry.rs │ ├── id_cache.rs │ ├── lib.rs │ ├── logger.rs │ ├── packet_callouts.rs │ ├── packet_util.rs │ └── stream_callouts.rs ├── kextinterface/ │ ├── command.go │ ├── info.go │ ├── ioctl.go │ ├── kext.go │ ├── kext_file.go │ ├── kext_file_test.go │ ├── protocol_test.go │ └── version.txt ├── link-dev.ps1 ├── protocol/ │ ├── Cargo.toml │ ├── README.md │ └── src/ │ ├── command.rs │ ├── info.rs │ └── lib.rs ├── test/ │ ├── BUILD_DEBUG.md │ ├── README.md │ └── build_test.ps1 ├── test_protocol.sh └── wdk/ ├── .cargo/ │ └── config.toml ├── Cargo.toml ├── README.md ├── build.rs ├── rust-analyzer.cargo.target ├── rust-toolchain └── src/ ├── allocator.rs ├── attributes.rs ├── consts.rs ├── debug.rs ├── driver.rs ├── error.rs ├── fast_mutex.rs ├── ffi.rs ├── filter_engine/ │ ├── callout.rs │ ├── callout_data.rs │ ├── classify.rs │ ├── connect_request.rs │ ├── ffi.rs │ ├── layer.rs │ ├── metadata.rs │ ├── mod.rs │ ├── net_buffer.rs │ ├── packet.rs │ ├── stream_data.rs │ └── transaction.rs ├── interface.rs ├── ioqueue.rs ├── irp_helpers.rs ├── lib.rs ├── rw_spin_lock.rs ├── spin_lock.rs └── utils.rs