From 75417f5e3d32645859d94cec82255dc130ec4a2e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 18:55:34 +0200 Subject: Adding upstream version 2020.10.7. Signed-off-by: Daniel Baumann --- .editorconfig | 37 + .eslintignore | 5 + .eslintrc.yml | 63 + .github/ISSUE_TEMPLATE/broken-site-report.md | 19 + .github/SECURITY.md | 5 + .gitignore | 51 + .travis.yml | 36 + .tx/config | 8 + CODE_OF_CONDUCT.md | 1 + CONTRIBUTING.md | 23 + LICENSE | 844 + Makefile | 35 + README.md | 32 + doc/Changelog | 550 + doc/DESIGN-AND-ROADMAP.md | 276 + doc/Translation.md | 92 + doc/admin-deployment.md | 49 + doc/develop.md | 45 + doc/fixing-broken-sites.md | 63 + doc/jid1-MnnxcxisBPnSXQ@jetpack.json | 11 + doc/permissions.md | 27 + doc/sample-managed-storage-manifest-chrome.json | 12 + doc/tests.md | 92 + doc/yellowlist-criteria.md | 8 + package-lock.json | 7063 +++++++ package.json | 22 + release-utils/chromium-release.sh | 26 + release-utils/firefox-release.sh | 45 + release-utils/make-eff-zip.sh | 32 + release-utils/make-release-zip.sh | 43 + release-utils/make-release.sh | 50 + release-utils/make-signed-xpi.sh | 65 + release-utils/post-chrome-release.sh | 29 + release-utils/post-release.sh | 77 + scripts/chromedriver.sh | 25 + scripts/convertpsl.py | 36 + scripts/fix_placeholders.py | 40 + scripts/generate-legacy-yellowlist.sh | 1 + scripts/run_travis.sh | 36 + scripts/setup_travis.sh | 79 + scripts/updategoogle.py | 51 + scripts/updategoogle.sh | 27 + scripts/updatepsl.sh | 28 + scripts/updateseeddata.sh | 33 + scripts/verify_json.py | 18 + src/_locales/ar/messages.json | 677 + src/_locales/bg/messages.json | 677 + src/_locales/ca/messages.json | 677 + src/_locales/cs/messages.json | 677 + src/_locales/da/messages.json | 677 + src/_locales/de/messages.json | 677 + src/_locales/en_US/messages.json | 677 + src/_locales/eo/messages.json | 677 + src/_locales/es/messages.json | 677 + src/_locales/fa/messages.json | 677 + src/_locales/fi/messages.json | 677 + src/_locales/fr/messages.json | 677 + src/_locales/he/messages.json | 677 + src/_locales/it/messages.json | 677 + src/_locales/ko/messages.json | 677 + src/_locales/nl/messages.json | 677 + src/_locales/pl/messages.json | 677 + src/_locales/pt_BR/messages.json | 677 + src/_locales/pt_PT/messages.json | 677 + src/_locales/ru/messages.json | 677 + src/_locales/sv/messages.json | 677 + src/_locales/tr/messages.json | 677 + src/_locales/uk/messages.json | 677 + src/_locales/zh_CN/messages.json | 677 + src/_locales/zh_TW/messages.json | 677 + src/data/dnt-policies.json | 9 + src/data/dnt-policy.txt | 218 + src/data/schema.json | 48 + src/data/seed.json | 19505 +++++++++++++++++++ src/data/socialwidgets.json | 266 + src/data/surrogates.js | 474 + src/data/yellowlist.txt | 788 + src/icons/UI-icons-green.svg | 10 + src/icons/UI-icons-red.svg | 10 + src/icons/UI-icons-yellow.svg | 17 + src/icons/badger-128.png | Bin 0 -> 6072 bytes src/icons/badger-16.png | Bin 0 -> 1686 bytes src/icons/badger-19-disabled.png | Bin 0 -> 483 bytes src/icons/badger-19.png | Bin 0 -> 1959 bytes src/icons/badger-38-disabled.png | Bin 0 -> 1078 bytes src/icons/badger-38.png | Bin 0 -> 1442 bytes src/icons/badger-48.png | Bin 0 -> 2824 bytes src/icons/badger-64.png | Bin 0 -> 2045 bytes src/icons/badger-bw-noborder.svg | 72 + src/icons/badger-pin.png | Bin 0 -> 436 bytes src/icons/dnt-16.png | Bin 0 -> 343 bytes src/icons/help.svg | 3 + src/icons/options.svg | 3 + src/icons/share.svg | 3 + src/js/background.js | 1148 ++ src/js/bootstrap.js | 37 + src/js/constants.js | 54 + src/js/contentscripts/clobbercookie.js | 60 + src/js/contentscripts/clobberlocalstorage.js | 94 + src/js/contentscripts/collapser.js | 56 + src/js/contentscripts/dnt.js | 66 + src/js/contentscripts/fingerprinting.js | 367 + src/js/contentscripts/socialwidgets.js | 641 + src/js/contentscripts/supercookie.js | 151 + src/js/contentscripts/utils.js | 53 + src/js/firefoxandroid.js | 90 + src/js/firstparties/facebook.js | 56 + src/js/firstparties/google-search.js | 39 + src/js/firstparties/google-static.js | 41 + src/js/firstparties/lib/utils.js | 62 + src/js/heuristicblocking.js | 557 + src/js/htmlutils.js | 283 + src/js/incognito.js | 49 + src/js/migrations.js | 356 + src/js/multiDomainFirstParties.js | 4133 ++++ src/js/options.js | 976 + src/js/popup.js | 723 + src/js/socialwidgetloader.js | 133 + src/js/storage.js | 707 + src/js/surrogates.js | 87 + src/js/utils.js | 445 + src/js/webrequest.js | 1293 ++ src/lib/basedomain.js | 319 + src/lib/i18n.js | 151 + src/lib/options.js | 120 + src/lib/publicSuffixList.js | 7497 +++++++ src/lib/vendor/jquery-3.5.1.js | 10872 +++++++++++ .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../vendor/jquery-ui-1.12.1.custom/jquery-ui.js | 2815 +++ .../jquery-ui.structure.css | 286 + .../jquery-ui-1.12.1.custom/jquery-ui.theme.css | 443 + .../jquery-ui-iconfont-2.3.2/font/jquery-ui.woff2 | Bin 0 -> 21208 bytes .../jquery-ui-1.12.icon-font.css | 839 + src/lib/vendor/jquery.smooth-scroll.js | 357 + src/lib/vendor/punycode-1.4.1.js | 533 + src/lib/vendor/select2-4.0.11/select2-4.0.11.css | 481 + src/lib/vendor/select2-4.0.11/select2-4.0.11.js | 6044 ++++++ src/lib/vendor/toggle-switch.css | 310 + .../tooltipster-4.2.6/tooltipster.bundle.css | 388 + .../vendor/tooltipster-4.2.6/tooltipster.bundle.js | 4273 ++++ src/lib/vendor/underscore-1.9.1.js | 1692 ++ src/manifest.json | 522 + src/skin/background.png | Bin 0 -> 1070 bytes src/skin/css/firstRun.css | 798 + src/skin/firstRun.html | 131 + src/skin/fonts/Chunk.ttf | Bin 0 -> 31268 bytes src/skin/fonts/OpenSans-Bold.ttf | Bin 0 -> 224452 bytes src/skin/fonts/OpenSans-Light.ttf | Bin 0 -> 222236 bytes src/skin/images/EFF-red.svg | 7 + src/skin/images/carrot-down.svg | 10 + src/skin/images/catches-trackers.png | Bin 0 -> 30571 bytes src/skin/images/disable-badger.png | Bin 0 -> 19494 bytes src/skin/images/eff-logo.png | Bin 0 -> 356 bytes src/skin/images/facebook.svg | 19 + src/skin/images/learns-trackers.png | Bin 0 -> 35251 bytes src/skin/images/not-ad-blocker.png | Bin 0 -> 9138 bytes src/skin/images/pb-logo-outline.svg | 41 + src/skin/images/twitter.svg | 19 + src/skin/js/firstRun.js | 25 + src/skin/options-layout.css | 260 + src/skin/options.html | 307 + src/skin/popup.css | 488 + src/skin/popup.html | 155 + src/skin/socialwidgets/AddThis.svg | 134 + src/skin/socialwidgets/Digg.svg | 212 + src/skin/socialwidgets/FacebookLike.svg | 216 + src/skin/socialwidgets/FacebookShare.svg | 214 + src/skin/socialwidgets/LinkedIn.svg | 182 + src/skin/socialwidgets/Pinterest.svg | 211 + src/skin/socialwidgets/Twitter.svg | 116 + src/tests/.eslintrc.yml | 4 + src/tests/index.html | 76 + src/tests/lib/qunit_config.js | 74 + src/tests/lib/vendor/qunit-2.9.2.css | 436 + src/tests/lib/vendor/qunit-2.9.2.js | 6604 +++++++ src/tests/lib/vendor/sinon-2.0.0.js | 11586 +++++++++++ src/tests/tests/background.js | 467 + src/tests/tests/baseDomain.js | 255 + src/tests/tests/firstparties.js | 167 + src/tests/tests/heuristic.js | 165 + src/tests/tests/htmlutils.js | 241 + src/tests/tests/multiDomainFirstParties.js | 73 + src/tests/tests/options.js | 105 + src/tests/tests/storage.js | 638 + src/tests/tests/tabData.js | 310 + src/tests/tests/utils.js | 550 + src/tests/tests/yellowlist.js | 424 + tests/requirements.txt | 3 + tests/selenium/.flake8 | 2 + tests/selenium/breakage_test.py | 30 + tests/selenium/clobbering_test.py | 102 + tests/selenium/cookie_test.py | 163 + tests/selenium/dnt_test.py | 324 + tests/selenium/fingerprinting_test.py | 105 + tests/selenium/options_test.py | 327 + tests/selenium/pbtest.py | 498 + tests/selenium/pbtest_org_test.py | 71 + tests/selenium/popup_test.py | 361 + tests/selenium/qunit_test.py | 38 + tests/selenium/service_workers_test.py | 56 + tests/selenium/storage_test.py | 71 + tests/selenium/super_cookie_test.py | 120 + tests/selenium/surrogates_test.py | 104 + tests/selenium/website_testbed/first-party.html | 13 + tests/selenium/website_testbed/first-party.js | 25 + tests/selenium/widgets_test.py | 344 + 216 files changed, 127737 insertions(+) create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.yml create mode 100644 .github/ISSUE_TEMPLATE/broken-site-report.md create mode 100644 .github/SECURITY.md create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 .tx/config create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 doc/Changelog create mode 100644 doc/DESIGN-AND-ROADMAP.md create mode 100644 doc/Translation.md create mode 100644 doc/admin-deployment.md create mode 100644 doc/develop.md create mode 100644 doc/fixing-broken-sites.md create mode 100644 doc/jid1-MnnxcxisBPnSXQ@jetpack.json create mode 100644 doc/permissions.md create mode 100644 doc/sample-managed-storage-manifest-chrome.json create mode 100644 doc/tests.md create mode 100644 doc/yellowlist-criteria.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100755 release-utils/chromium-release.sh create mode 100755 release-utils/firefox-release.sh create mode 100755 release-utils/make-eff-zip.sh create mode 100755 release-utils/make-release-zip.sh create mode 100755 release-utils/make-release.sh create mode 100755 release-utils/make-signed-xpi.sh create mode 100755 release-utils/post-chrome-release.sh create mode 100755 release-utils/post-release.sh create mode 100755 scripts/chromedriver.sh create mode 100755 scripts/convertpsl.py create mode 100755 scripts/fix_placeholders.py create mode 100755 scripts/generate-legacy-yellowlist.sh create mode 100755 scripts/run_travis.sh create mode 100755 scripts/setup_travis.sh create mode 100755 scripts/updategoogle.py create mode 100755 scripts/updategoogle.sh create mode 100755 scripts/updatepsl.sh create mode 100755 scripts/updateseeddata.sh create mode 100644 scripts/verify_json.py create mode 100644 src/_locales/ar/messages.json create mode 100644 src/_locales/bg/messages.json create mode 100644 src/_locales/ca/messages.json create mode 100644 src/_locales/cs/messages.json create mode 100644 src/_locales/da/messages.json create mode 100644 src/_locales/de/messages.json create mode 100644 src/_locales/en_US/messages.json create mode 100644 src/_locales/eo/messages.json create mode 100644 src/_locales/es/messages.json create mode 100644 src/_locales/fa/messages.json create mode 100644 src/_locales/fi/messages.json create mode 100644 src/_locales/fr/messages.json create mode 100644 src/_locales/he/messages.json create mode 100644 src/_locales/it/messages.json create mode 100644 src/_locales/ko/messages.json create mode 100755 src/_locales/nl/messages.json create mode 100644 src/_locales/pl/messages.json create mode 100644 src/_locales/pt_BR/messages.json create mode 100644 src/_locales/pt_PT/messages.json create mode 100644 src/_locales/ru/messages.json create mode 100644 src/_locales/sv/messages.json create mode 100644 src/_locales/tr/messages.json create mode 100644 src/_locales/uk/messages.json create mode 100644 src/_locales/zh_CN/messages.json create mode 100644 src/_locales/zh_TW/messages.json create mode 100644 src/data/dnt-policies.json create mode 100644 src/data/dnt-policy.txt create mode 100644 src/data/schema.json create mode 100644 src/data/seed.json create mode 100644 src/data/socialwidgets.json create mode 100644 src/data/surrogates.js create mode 100644 src/data/yellowlist.txt create mode 100644 src/icons/UI-icons-green.svg create mode 100644 src/icons/UI-icons-red.svg create mode 100644 src/icons/UI-icons-yellow.svg create mode 100644 src/icons/badger-128.png create mode 100644 src/icons/badger-16.png create mode 100644 src/icons/badger-19-disabled.png create mode 100644 src/icons/badger-19.png create mode 100644 src/icons/badger-38-disabled.png create mode 100644 src/icons/badger-38.png create mode 100644 src/icons/badger-48.png create mode 100644 src/icons/badger-64.png create mode 100644 src/icons/badger-bw-noborder.svg create mode 100644 src/icons/badger-pin.png create mode 100644 src/icons/dnt-16.png create mode 100644 src/icons/help.svg create mode 100644 src/icons/options.svg create mode 100644 src/icons/share.svg create mode 100644 src/js/background.js create mode 100644 src/js/bootstrap.js create mode 100644 src/js/constants.js create mode 100644 src/js/contentscripts/clobbercookie.js create mode 100644 src/js/contentscripts/clobberlocalstorage.js create mode 100644 src/js/contentscripts/collapser.js create mode 100644 src/js/contentscripts/dnt.js create mode 100644 src/js/contentscripts/fingerprinting.js create mode 100644 src/js/contentscripts/socialwidgets.js create mode 100644 src/js/contentscripts/supercookie.js create mode 100644 src/js/contentscripts/utils.js create mode 100644 src/js/firefoxandroid.js create mode 100644 src/js/firstparties/facebook.js create mode 100644 src/js/firstparties/google-search.js create mode 100644 src/js/firstparties/google-static.js create mode 100644 src/js/firstparties/lib/utils.js create mode 100644 src/js/heuristicblocking.js create mode 100644 src/js/htmlutils.js create mode 100644 src/js/incognito.js create mode 100644 src/js/migrations.js create mode 100644 src/js/multiDomainFirstParties.js create mode 100644 src/js/options.js create mode 100644 src/js/popup.js create mode 100644 src/js/socialwidgetloader.js create mode 100644 src/js/storage.js create mode 100644 src/js/surrogates.js create mode 100644 src/js/utils.js create mode 100644 src/js/webrequest.js create mode 100644 src/lib/basedomain.js create mode 100644 src/lib/i18n.js create mode 100644 src/lib/options.js create mode 100644 src/lib/publicSuffixList.js create mode 100644 src/lib/vendor/jquery-3.5.1.js create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-icons_222222_256x240.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-icons_2e83ff_256x240.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-icons_454545_256x240.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-icons_888888_256x240.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/images/ui-icons_cd0a0a_256x240.png create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/jquery-ui.js create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/jquery-ui.structure.css create mode 100644 src/lib/vendor/jquery-ui-1.12.1.custom/jquery-ui.theme.css create mode 100644 src/lib/vendor/jquery-ui-iconfont-2.3.2/font/jquery-ui.woff2 create mode 100644 src/lib/vendor/jquery-ui-iconfont-2.3.2/jquery-ui-1.12.icon-font.css create mode 100644 src/lib/vendor/jquery.smooth-scroll.js create mode 100644 src/lib/vendor/punycode-1.4.1.js create mode 100644 src/lib/vendor/select2-4.0.11/select2-4.0.11.css create mode 100644 src/lib/vendor/select2-4.0.11/select2-4.0.11.js create mode 100644 src/lib/vendor/toggle-switch.css create mode 100644 src/lib/vendor/tooltipster-4.2.6/tooltipster.bundle.css create mode 100644 src/lib/vendor/tooltipster-4.2.6/tooltipster.bundle.js create mode 100644 src/lib/vendor/underscore-1.9.1.js create mode 100644 src/manifest.json create mode 100644 src/skin/background.png create mode 100644 src/skin/css/firstRun.css create mode 100644 src/skin/firstRun.html create mode 100644 src/skin/fonts/Chunk.ttf create mode 100644 src/skin/fonts/OpenSans-Bold.ttf create mode 100644 src/skin/fonts/OpenSans-Light.ttf create mode 100644 src/skin/images/EFF-red.svg create mode 100644 src/skin/images/carrot-down.svg create mode 100644 src/skin/images/catches-trackers.png create mode 100644 src/skin/images/disable-badger.png create mode 100644 src/skin/images/eff-logo.png create mode 100644 src/skin/images/facebook.svg create mode 100644 src/skin/images/learns-trackers.png create mode 100644 src/skin/images/not-ad-blocker.png create mode 100644 src/skin/images/pb-logo-outline.svg create mode 100644 src/skin/images/twitter.svg create mode 100644 src/skin/js/firstRun.js create mode 100644 src/skin/options-layout.css create mode 100644 src/skin/options.html create mode 100644 src/skin/popup.css create mode 100644 src/skin/popup.html create mode 100644 src/skin/socialwidgets/AddThis.svg create mode 100644 src/skin/socialwidgets/Digg.svg create mode 100644 src/skin/socialwidgets/FacebookLike.svg create mode 100644 src/skin/socialwidgets/FacebookShare.svg create mode 100644 src/skin/socialwidgets/LinkedIn.svg create mode 100644 src/skin/socialwidgets/Pinterest.svg create mode 100644 src/skin/socialwidgets/Twitter.svg create mode 100644 src/tests/.eslintrc.yml create mode 100644 src/tests/index.html create mode 100644 src/tests/lib/qunit_config.js create mode 100644 src/tests/lib/vendor/qunit-2.9.2.css create mode 100644 src/tests/lib/vendor/qunit-2.9.2.js create mode 100644 src/tests/lib/vendor/sinon-2.0.0.js create mode 100644 src/tests/tests/background.js create mode 100644 src/tests/tests/baseDomain.js create mode 100644 src/tests/tests/firstparties.js create mode 100644 src/tests/tests/heuristic.js create mode 100644 src/tests/tests/htmlutils.js create mode 100644 src/tests/tests/multiDomainFirstParties.js create mode 100644 src/tests/tests/options.js create mode 100644 src/tests/tests/storage.js create mode 100644 src/tests/tests/tabData.js create mode 100644 src/tests/tests/utils.js create mode 100644 src/tests/tests/yellowlist.js create mode 100644 tests/requirements.txt create mode 100644 tests/selenium/.flake8 create mode 100644 tests/selenium/breakage_test.py create mode 100644 tests/selenium/clobbering_test.py create mode 100644 tests/selenium/cookie_test.py create mode 100644 tests/selenium/dnt_test.py create mode 100644 tests/selenium/fingerprinting_test.py create mode 100644 tests/selenium/options_test.py create mode 100644 tests/selenium/pbtest.py create mode 100644 tests/selenium/pbtest_org_test.py create mode 100644 tests/selenium/popup_test.py create mode 100644 tests/selenium/qunit_test.py create mode 100644 tests/selenium/service_workers_test.py create mode 100644 tests/selenium/storage_test.py create mode 100644 tests/selenium/super_cookie_test.py create mode 100644 tests/selenium/surrogates_test.py create mode 100644 tests/selenium/website_testbed/first-party.html create mode 100644 tests/selenium/website_testbed/first-party.js create mode 100644 tests/selenium/widgets_test.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a27ccd2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,37 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +[*.css] +indent_style = space +indent_size = 4 + +[*.html] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.json] +indent_style=space +indent_size = 4 + +[manifest.json] +indent_size = 2 + +[*.py] +indent_style = space +indent_size = 4 + +[*.sh] +indent_style = space +indent_size = 2 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..9c8a92f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +src/lib/vendor/ +src/tests/lib/vendor/ +node_modules/ +**/selenium/ +!tests/selenium/ diff --git a/.eslintrc.yml b/.eslintrc.yml new file mode 100644 index 0000000..1742cd8 --- /dev/null +++ b/.eslintrc.yml @@ -0,0 +1,63 @@ +env: + browser: true + es6: true + jquery: true + webextensions: true +extends: 'eslint:recommended' +globals: + # false to disallow overwriting + require: false + _: false +parserOptions: + ecmaVersion: 2017 + # strict mode + sourceType: module +rules: + array-callback-return: error + brace-style: + - error + - 1tbs + - allowSingleLine: true + consistent-this: + - error + - self + curly: error + dot-notation: error + eol-last: error + indent: + - error + - 2 + - outerIIFEBody: 0 + keyword-spacing: error + linebreak-style: + - error + - unix + new-cap: error + no-array-constructor: error + no-bitwise: error + no-caller: error + no-console: off + no-eval: error + no-implied-eval: error + no-iterator: error + no-loop-func: error + no-multi-spaces: error + no-multi-str: error + no-new: error + no-new-func: error + no-new-object: error + no-new-wrappers: error + no-proto: error + no-script-url: error + no-shadow: error + no-shadow-restricted-names: error + no-tabs: error + no-trailing-spaces: error + no-unused-expressions: error + semi: error + space-before-blocks: error + space-in-parens: error + space-unary-ops: + - error + - words: true + nonwords: false diff --git a/.github/ISSUE_TEMPLATE/broken-site-report.md b/.github/ISSUE_TEMPLATE/broken-site-report.md new file mode 100644 index 0000000..ade57fb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/broken-site-report.md @@ -0,0 +1,19 @@ +--- +name: Report a broken site +about: Is Privacy Badger breaking something somewhere? We'd like to get it fixed! + +--- + +#### What is your browser and browser version? + +#### What is broken and where? + +#### What is the "culprit" domain? +Please follow the debug instructions to identify which domain breaks stuff when blocked: +https://github.com/EFForg/privacybadger/wiki/Find-out-why-Privacy-Badger-is-blocking-a-domain + +#### What is your debug output for this domain? +To get the debug output, please see the instructions link above. +``` +Paste debug output here. +``` diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..79d2be9 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,5 @@ +# Security Policy + +## Reporting a Vulnerability + +Security vulnerabilities can be reported privately to vulnerabilities@eff.org. Please see our [Security Vulnerability Disclosure Program](https://www.eff.org/security) for the GPG key and more information. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..19d5adb --- /dev/null +++ b/.gitignore @@ -0,0 +1,51 @@ +*.py[cod] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib64 +__pycache__ + +# Dynamic libraries +*.dylib + +# JSHydra +buildtools/jshydra/mozilla/js + +# Vim swap files +*.sw* + +# Mac DS_Store +*.DS_Store + +node_modules + +tests/.cache +tests/.pytest_cache +.pytest_cache + +*.xpi +.chrome-profile + +.idea + +#Eclipse project stuff +.settings/ +.project + +web-ext-artifacts +pkg +release-utils/config.sh +release-utils/xpi diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9c2ef5a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,36 @@ +sudo: required +language: python +os: linux +dist: bionic +python: 3.6 +jobs: + fast_finish: true + include: + - env: INFO="lint" + node_js: node + - env: INFO="chrome beta" BROWSER=google-chrome-beta + addons: + chrome: beta + - env: INFO="chrome stable" BROWSER=google-chrome-stable + addons: + chrome: stable + - env: INFO="firefox" BROWSER=firefox + addons: + firefox: latest + - env: INFO="firefox esr" BROWSER=firefox + addons: + firefox: latest-esr + - env: INFO="firefox beta" BROWSER=firefox + addons: + firefox: latest-beta + - env: INFO="firefox nightly" BROWSER=firefox + addons: + firefox: latest-nightly + allow_failures: + - env: INFO="firefox nightly" BROWSER=firefox + addons: + firefox: latest-nightly +before_script: travis_retry ./scripts/setup_travis.sh +script: . ./scripts/run_travis.sh +services: + - xvfb diff --git a/.tx/config b/.tx/config new file mode 100644 index 0000000..bebb04e --- /dev/null +++ b/.tx/config @@ -0,0 +1,8 @@ +[main] +host = https://www.transifex.com + +[privacy-badger.messagesjson] +file_filter = src/_locales//messages.json +source_file = src/_locales/en_US/messages.json +source_lang = en_US +type = CHROME diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..142b31c --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1 @@ +This project is governed by [EFF's Public Projects Code of Conduct](https://www.eff.org/pages/eppcode). \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..f1a46a8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,23 @@ +# Contributing to Privacy Badger + +Welcome dear contributor! There are many ways to help Privacy Badger: + +* Did we break a site? We want to fix it, + so we wrote a [guide to fixing broken sites](/doc/fixing-broken-sites.md). +* Want to help translate Privacy Badger? Please see our [guide to translating Privacy Badger](/doc/Translation.md). +* To review issues we would like help with, visit our + ["good first issue"](https://github.com/EFForg/privacybadger/labels/good%20first%20issue) + and + ["help wanted"](https://github.com/EFForg/privacybadger/labels/help%20wanted) + labels. +* When making changes to Privacy Badger's code, please consult our [developer](/doc/develop.md) and [automated testing](/doc/tests.md) guides. +* Security vulnerabilities can be reported privately to + [vulnerabilities@eff.org](mailto:vulnerabilities@eff.org). Please see our + [Security Vulnerability Disclosure Program](https://www.eff.org/security) + for the GPG key and more information. + +When interacting with us, please remember to follow [EFF's Public Projects Code of Conduct](https://www.eff.org/pages/eppcode). + +If you find something confusing or frustrating, please [let us know](mailto:extension-devs@eff.org)! We believe in making Privacy Badger better by making it easier for you to contribute. + +Thank you! diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8cef74a --- /dev/null +++ b/LICENSE @@ -0,0 +1,844 @@ +Privacy Badger +Copyright © 2015 Electronic Frontier Foundation and other contributors + +Privacy Badger as a whole is presently Licensed GPL v3+, though many portions +of the code are dual-licensed under other free/open source licenses. + +CONTRIBUTORS AGREE TO FREE/OPEN SOURCE DUAL-LICENSING +===================================================== + +By contributing code or other works of authorship to this project ("Your +Contributions"), you grant to the Electronic Frontier Foundation (EFF) a +perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable +license to reproduce, prepare derivative works of, publicly display, publicly +perform, sublicense, and distribute Your Contributions and such derivative +works under the terms of any free software or open source license or licenses, +such license(s) to be selected by EFF at its sole discretion (such licenses +will always be consistent with EFF's mission). + +By contributing code or other works of authorship to this project, you +represent that you have the legal right and ability to grant this license. + +Except for the license granted herein to EFF and recipients of software +distributed by EFF, You reserve all right, title, and interest in and to Your +Contributions. + +If you do not agree to these terms, please do not send patches or pull +requests, or commit any material to this repository. + +LICENSES FOR INCORPORATED CODEBASES +=================================== + +jQuery JavaScript Library +Copyright JS Foundation and other contributors +Released under the MIT license +https://jquery.org/license + +Underscore.js +http://underscorejs.org +(c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +Underscore may be freely distributed under the MIT license. + +jQuery UI +Copyright jQuery Foundation and other contributors +Licensed MIT + +Incorporating code from CSS Toggle Switch, +https://github.com/ghinda/css-toggle-switch +By Ionuț Colceriu - ghinda.net +Licensed Unlicense + +Incorporating code from AdBlockPlus, +https://adblockplus.org/en/firefox +Copyright © 2006-2014 Eyeo GmbH +Licensed GPL v3 + +basedomain.js incorporates code from ipv6.js +https://github.com/beaugunderson/javascript-ipv6 +Copyright 2011 Beau Gunderson +Licensed MIT + +src/js/firstparties/facebook.js incorporates code from Facebook™ Tracking & Ad Removal +https://github.com/mgziminsky/FacebookTrackingRemoval +Copyright 2018 Michael Ziminsky +Licensed GPL v3 + +Incorporating code from ShareMeNot, +https://sharemenot.cs.washington.edu +Copyright © 2006-2014 University of Washington +Licensed MIT + +Incorporating code from Chameleon, +https://github.com/ghostwords/chameleon +Copyright © 2015 ghostwords +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at http://mozilla.org/MPL/2.0/. +Alternatively, this code may be distributed or +otherwise used under the terms of GPL v3 + +Incorporating code from Punycode.js +http://mths.be/punycode +Copyright 2011 Mathias Bynens +Licensed MIT + +Tooltipster +http://iamceege.github.io/tooltipster/ +Copyright (c) 2012,2016 Caleb Jacob and Louis Ameline +Licensed MIT + +ChunkFive +https://www.theleagueofmoveabletype.com/ +All fonts from The League of Moveable Type are subject to the Open Font License and are free and open-source. + +OpenSans +https://www.apache.org/licenses/LICENSE-2.0 + +jQuery Smooth Scroll - v2.2.0 - 2017-05-05 +https://github.com/kswedberg/jquery-smooth-scroll +Copyright (c) 2017 Karl Swedberg +Licensed MIT + +Select2 +https://select2.org/ +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors +Licensed MIT + +Icon Font for jQuery UI +Copyright (c) 2015-2017 Michael Keck +Font version 2.1 +Licensed CC BY-SA 3.0: https://creativecommons.org/licenses/by-sa/3.0/ +Stylesheet version 2.3.2 +Licensed GPL: http://www.gnu.org/licenses/gpl.html + + +TEXT OF GPLv3 +============= + + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + +Text of MIT License: +==================== +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + + +Text of Unlicense: +================= +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..10cc956 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +lint: + ./node_modules/.bin/eslint . + +updatepsl: + scripts/updatepsl.sh + +updateseed: + scripts/updateseeddata.sh + +updategoogle: + scripts/updategoogle.sh + +todo: + grep -rn 'TODO' src + +upload: + $(eval TMPFILE := $(shell mktemp)) + scp src/data/yellowlist.txt $$YELLOWLIST_UPLOAD_PATH + scripts/generate-legacy-yellowlist.sh > $(TMPFILE) && scp $(TMPFILE) $$YELLOWLIST_LEGACY_UPLOAD_PATH && rm $(TMPFILE) + scp src/data/dnt-policies.json $$DNT_POLICIES_UPLOAD_PATH + +tx: + tx pull -f + scripts/fix_placeholders.py + +runch: + ./node_modules/.bin/web-ext run --target chromium --start-url "chrome://extensions" -s src/ + +runff: + ./node_modules/.bin/web-ext run --start-url "about:debugging#/runtime/this-firefox" -s src/ + +runfn: + ./node_modules/.bin/web-ext run --start-url "about:debugging#/runtime/this-firefox" -s src/ -f nightly + +.PHONY: lint updatepsl updateseed updategoogle todo tx runch runff runfn diff --git a/README.md b/README.md new file mode 100644 index 0000000..947cedf --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +Privacy Badger [![Build Status](https://travis-ci.org/EFForg/privacybadger.svg?branch=master)](https://travis-ci.org/EFForg/privacybadger) +=================== +Privacy Badger is a browser extension that automatically learns to block invisible trackers. Instead of keeping lists of what to block, Privacy Badger learns by watching which domains appear to be tracking you as you browse the Web. + +Privacy Badger sends the [Do Not Track signal](https://www.eff.org/issues/do-not-track) with your browsing. If trackers ignore your wishes, your Badger will learn to block them. Privacy Badger starts blocking once it sees the same tracker on three different websites. + +Besides automatic tracker blocking, Privacy Badger removes outgoing link click tracking on [Facebook](https://www.eff.org/deeplinks/2018/05/privacy-badger-rolls-out-new-ways-fight-facebook-tracking) and [Google](https://www.eff.org/deeplinks/2018/10/privacy-badger-now-fights-more-sneaky-google-tracking), with more privacy protections on the way. + +To learn more, see [the FAQ on Privacy Badger's homepage](https://privacybadger.org/#faq). + + +## Contributing + +We're glad you want to help! Please see [our contributor guide](/CONTRIBUTING.md). + +This project is governed by [EFF's Public Projects Code of Conduct](https://www.eff.org/pages/eppcode). + + +## Getting in touch + +Besides using [our GitHub issue tracker](https://github.com/EFForg/privacybadger/issues), you could [send us an email](mailto:extension-devs@eff.org), or join the [Privacy Badger mailing list](https://lists.eff.org/mailman/listinfo/privacybadger). + +We also hold public meetings using [Jitsi audio conferencing](https://meet.jit.si/PoliteBadgersSingEuphoricly): +- Mondays at 10:30 AM PST +- Thursdays at 11:30 AM PST + + +## License + +Privacy Badger is licensed under the GPLv3. See [LICENSE](/LICENSE) for more details. + +Privacy Badger is a project of the [Electronic Frontier Foundation](https://www.eff.org). diff --git a/doc/Changelog b/doc/Changelog new file mode 100644 index 0000000..6e36b14 --- /dev/null +++ b/doc/Changelog @@ -0,0 +1,550 @@ +Privacy Badger Release Notes +============================ +2020.10.7 +* Disabled learning (by default) to address privacy concerns. +Visit https://www.eff.org/badger-evolution to learn more. +* Added support for Global Privacy Control, a new specification that +lets you tell companies you'd like to opt out of data sharing and selling. +Visit https://globalprivacycontrol.org/ to learn more. +* Added a new section to the options page to display the browser settings +that Privacy Badger overrides for privacy reasons +* Fixed various site breakages +* Improved translations (Simplified Chinese, Dutch, Finnish, Hebrew, Italian, +Russian, Spanish, Ukrainian) + +2020.8.25 +* Added a button to widget replacements to always allow a widget on a site +* Improved scrolling of tracking domains on the options page +* Fixed various site breakages +* Improved translations (Simplified Chinese, Traditional Chinese, Esperanto, +Finnish, French, Polish, Brazilian Portuguese, Russian, Spanish, Swedish) + +2020.7.21 +* Improved broken site reporting screen in the popup +* Refreshed the look of options page tabs +* Fixed various site breakages +* Improved translations (Simplified Chinese, Danish, European Portuguese, +Spanish, Turkish) + +2020.6.29 +* Added replacement placeholder for Disqus comments widgets +* Fixed domain sliders on the options page not saving in some cases +* Fixed slider changes on the options page resetting the list of domains, +causing you to lose your place if you were scrolled down +* Fixed domain slider tooltip display +* Re-enabled custom tooltips in Firefox +* Fixed various site breakages +* Improved translations (Esperanto, Hebrew, Ukrainian) + +2020.6.2 +* Added replacement placeholders for Facebook Comments/Video and Twitch Player +* Removed Twitter link unwrapping. We are unable to unwrap t.co links +on Twitter at this time, as the original URL is no longer present +in the Twitter website's document structure. +* Fixed various site breakages +* Improved translations (Hebrew, Polish, Swedish) + +2020.5.12 +* Made buttons in the popup easier to see and click (or tap, on Firefox for +Android) +* Added a replacement placeholder widget for Google reCAPTCHA +* Fixed various site breakages +* Improved translations (Simplified Chinese, Dutch, Finnish, French, German, +Hebrew, Italian, Brazilian Portuguese, Spanish, Swedish, Turkish) + +2020.2.19 +* Added website breakage warnings, shown in the popup when you block a domain +known to break websites +* Removed pixel cookie sharing detection pending security fixes +* Fixed various site breakages +* Improved translations (Catalan, Simplified Chinese, Danish, Dutch, German, +Russian) + +2020.1.13 +* Fixed bug that sometimes loses pre-trained data for new users +* Fixed various site breakages + +2020.1.7.1 +* Added helpful text to popup on disabled sites +* Fixed display issues in popup on smaller displays +* Fixed Facebook link unwrapping on messenger.com +* Fixed some cookies getting incorrectly flagged as high entropy +* Fixed various site breakages +* Improved translations (Simplified Chinese, Traditional Chinese, French, +Hebrew, Italian, Korean, Russian, Spanish, Swedish, Ukrainian) + +2019.11.18 +* Improved display of domains Privacy Badger hasn't yet learned to block +* Fixed export/import of the WebRTC protection setting +* Fixed certain YouTube ("video unavailable"), Vimeo ("Because of its privacy +settings, this video cannot be played here"), and other video players +by revising referrer protection for "cookieblocked" domains +* Fixed various other site breakages +* Added Korean translations +* Improved translations (Finnish, French, Hebrew, Swedish) + +2019.10.28 +* Refreshed the popup with a higher-contrast look +* Widget placeholders will no longer be applied for domains on the yellowlist. +The value of widget placeholders is full blocking (best privacy) combined with +a clear way to restore potentially useful blocked content (convenience). +Mixing cookie blocking and placeholders doesn't actually improve privacy or +convenience but does introduce various bugs. +* Added a replacement placeholder for YouTube (disabled by default as youtube.com +is still on the yellowlist for now) +* Added the Widget Replacement tab to the options page to manage widgets that +do get blocked and replaced with Privacy Badger placeholders. Visit Widget +Replacement to selectively disable placeholders. For example, you want social +buttons out of your life completely. +* Fixed various site breakages +* Added Hebrew translations +* Improved translations (Italian, Russian, Ukrainian) + +2019.10.8 +* Fixed image/video thumbnails in Google search results +* Fixed various other site breakages +* Removed the green "0" tracker count badge. +No need to draw attention when there is nothing to show. +* Improved translations (Simplified Chinese, Ukrainian) + +2019.9.23 +* Added helpful text to popup on special browser pages like the New Tab page +* Fixed pixel cookie sharing detection being broken by First-Party Isolation +in Firefox +* Fixed major issues with Service Workers-powered sites like Gmail and Twitter +* Fixed various other site breakages +* Improved translations (Simplified Chinese, French, Spanish, Swedish, +Turkish, Ukrainian) + +2019.7.1 +* Added pixel cookie sharing detection. Privacy Badger now records +tracking by images with querystrings that contain first-party cookie data. +This catches Google Analytics. +* Removed display of non-tracking domains from the popup by default. +Hiding domains that Privacy Badger does not consider to be tracking +should reduce self-inflicted Web breakage. +* Enabled Facebook link unwrapping on messenger.com +* Fixed various site breakages +* Added Catalan translations +* Improved translations (Bulgarian, Traditional Chinese, Persian, +Brazilian Portuguese, European Portuguese, Swedish, Ukrainian) + +2019.2.19 +* Improved replacement widgets: + + - Replaced the "play" icon with an "allow once" button to improve + accessibility and to make it more clear our widgets are interactive + - Made activation also activate any other widgets of the same type + - Updated the replacement for Vimeo to ignore background videos + - Set minimum dimensions to avoid becoming too small or hidden + +* Fixed various site breakages + +2019.1.30 +* Added replacement widgets for embedded Spotify, Streamable and Vimeo +players. Privacy Badger can replace potentially useful third-party widgets +with placeholders. This avoids on-by-default tracking while providing a clear +way to restore the original widget on demand. +* Fixed various site breakages +* Added Arabic and European Portuguese translations +* Improved translations (Traditional Chinese, Czech, German, Persian, Swedish, +Turkish) + +2018.12.17 +* Fixed major Privacy Badger breakages in Chrome 72+ +* Fixed various site breakages +* Improved translations (Simplified Chinese, Spanish, Turkish) + +2018.12.5 +* Added a Share button to the popup. This lets you easily copy and paste +Badger's findings on any page. +* Updated link protection to work on all Google Search country domains +* Updated link protection on Facebook to remove the new "fbclid" tracking +parameter +* Added support for enterprise/admin/group policy settings overrides. This +lets administrators preconfigure Privacy Badger installations. For more +information, please visit +https://github.com/EFForg/privacybadger/blob/master/doc/admin-deployment.md +* Fixed various bugs with local storage protection for "cookieblocked" (slider +set to "yellow") domains +* Made the options page work better on small and on large displays +* Fixed various site breakages +* Improved translations (Simplified Chinese, Dutch, Esperanto, Finnish, +German, Italian, Persian, Polish, Spanish, Swedish) + +2018.10.3.1 +* Fixed style problems with Google Search results +* Fixed the setting to open results in new browser windows on Google Search + +2018.10.3 +* Added protection against outgoing link click tracking on Google Search, +Google Docs and Google Hangouts +* Fixed various site breakages +* Added Finnish translations +* Improved translations (Simplified Chinese) + +2018.9.20 +* Added buttons to back up and restore the disabled sites list using +Firefox/Google Sync. The new buttons live under the Manage Data tab +on the options page. +* Added saving of in-progress error reports so that you no longer lose +your typing when you close the popup for whatever reason +* Fixed popup layout problems when opened in the overflow menu in Firefox +* Updated popup and options to use a higher resolution Badger logo on higher +pixel density displays +* Fixed problems with broken fonts and images on Google Docs +* Improved translations (Traditional Chinese, French, German, +Brazilian Portuguese, Russian, Spanish, Swedish, Turkish) + +2018.8.22 +* Added pre-trained tracker data for new Privacy Badger installations. +Visit www.eff.org/badger-pretraining to learn more. +* Added reset/clear tracker data buttons to the Manage Data options page tab +* Fixed various site breakages +* Added Persian and Brazilian Portuguese translations +* Improved translations (Simplified Chinese, Danish, Esperanto, French, +German, Italian, Norwegian Bokmål, Spanish, Swedish) + +2018.8.1 +* Fixed security issues with HTML5 local storage tracking detection as well as +SoundCloud widget replacement. Thanks again to Cure53 for discovering and +reporting these vulnerabilities. +* Improved Facebook link unwrapping; now enabled on the Facebook Onion domain +* Improved translations (Italian, Norwegian Bokmål, Swedish, Ukrainian) + +2018.7.18.1 +* Added setting to disable sending Do Not Track to websites +* Fixed security issue with link unwrapping on Facebook. Thanks to Cure53 for +discovering and reporting this vulnerability. +* Improved ordering of domain names in the popup and on the options page +* Improved handling of disabled sites with wildcards +* Added t.co link replacement to user profiles on Twitter +* Linked to EFF software privacy policy from the new user welcome page +* Updated to latest dummy Google Tag Manager script from uBlock Origin +to avoid "failed to redirect a network request" warnings in Chrome +* Fixed various site breakages +* Improved translations (Simplified Chinese, Dutch, Esperanto, German, +Russian, Swedish, Turkish) + +2018.5.10 +* Added protection against outgoing link click tracking on Facebook +* Updated WebRTC protection to revert to browser default (off) when disabled +* Fixed popup in the Italian locale in Chrome +* Updated to latest dummy Google Analytics script from uBlock Origin +to avoid "failed to redirect a network request" warnings in Chrome +* Fixed various site breakages +* Improved translations (Traditional Chinese, Danish, Dutch, Esperanto, +French, German, Italian, Polish, Russian, Swedish, Ukrainian) + +2018.4.23 +* Fixed changes not being persisted for domains that appear after scrolling +the tracking domains list on the options page +* Improved tracking domains search on the options page +* Fixed "can't access dead object" errors in Firefox +* Fixed XML document rendering in Firefox +* Updated WebRTC protection checkbox to become disabled when the setting is +controlled by other extensions +* Fixed various site breakages +* Improved translations (Traditional Chinese, Czech, Danish, Esperanto, +French, German, Italian, Polish, Russian, Swedish, Turkish, Ukrainian) + +2018.4.10 +* Updated the new user welcome page. The redesigned page is mobile-friendly, +accessible and already translated into several languages. +* Fixed Do Not Track being checked sometimes in Private Browsing/Incognito +windows. By default, Privacy Badger should not record anything in Incognito. +* Added setting to allow learning in Private Browsing/Incognito windows +* Fixed unwanted scrolling when switching tabs on the options page +* Updated replacement icon for Google+ +* Fixed various site breakages +* Improved translations (Bulgarian, Simplified Chinese, Traditional Chinese, +Danish, Esperanto, French, German, Italian, Polish, Russian, Spanish, +Ukrainian) + +2018.3.21 +* Fixed Do Not Track not being recognized by sites that test for it by +checking navigator.doNotTrack with JavaScript +* Stopped signaling DNT on sites where Privacy Badger is disabled +* Fixed popup in Private Browsing windows in Firefox +* Fixed certain kinds of site breakages (such as visual issues with charts) +not going away even after disabling Privacy Badger on the site +* Updated to latest dummy Google Tag Manager script from uBlock Origin to +avoid "failed to redirect a network request" warnings in Chrome +* Fixed various site breakages +* Improved translations (Bulgarian, Traditional Chinese, German, Italian, +Swedish) + +2018.2.5 +* Added type/status filters to the tracking domains list on the options page +* Reworked social widget replacement to avoid WebExtensions fingerprintability +issue in Firefox +* New translations (Turkish) +* Improved translations (Danish, Esperanto, French, German, Polish, Swedish, +Ukrainian) + +2018.1.30 +* Removed the "unlimitedStorage" permission from the manifest +* Changed the tracker count badge color from red to "Privacy Badger orange" + +2018.1.25 +* Added workaround to avoid Privacy Badger getting disabled as "Not from +Chrome Web Store" in Chrome + +2018.1.22 +* Reduced amount of data stored as part of normal operation. Privacy Badger +will no longer record (or check Do Not Track policies for) non-tracking +domains. This should enable us to remove the "unlimitedStorage" permission +with the next Badger update. +* Improved tracker detection status summaries in popup and options +* Added explanatory acknowledgement to Tracking Domains options page tab +* Fixed file download dialog not showing when exporting user data in Firefox +* Removed tutorial reminder link from popup when already on tutorial page +* Removed "Requests to the server have been blocked by an extension" messages +in Chrome and Opera +* Fixed style issue with replacement social widgets +* Fixed error reporting on pages where Privacy Badger has been disabled +* Fixed various site breakages +* Improved translations (Bulgarian, Danish, Esperanto, French, German, +Italian, Polish, Russian, Spanish, Swedish, Ukrainian) + +2017.11.20 +* Disabled custom tooltips in Firefox to work around browser freezing issues +* Added validation to the disabled sites form +* Improved translations (Dutch, Esperanto and German) +* Added Bulgarian and Polish translations + +2017.11.9 +* Fixed various site breakages +* Improved translations (French, Serbian and Ukrainian) +* Added Esperanto translation + +2017.10.25.1 +* Reverted manifest file change preventing upload to Chrome Web Store + +2017.10.25 +* Added Beta support for Firefox for Android +* Updated popup to close after doing anything that reloads the page +* Improved handling of long domain names +* Improved tooltips +* Restored canvas fingerprinting detection to Firefox +* Fixed yellowlist updates not getting applied when importing Badger data +* Updated to latest dummy Google Analytics script from uBlock Origin +to avoid "failed to redirect a network request" warnings in Chrome +* Fixed various site breakages +* Improved translations (Danish, French, German, Italian, Swedish) + +2017.9.12.1 +* Fixed build script issue that reintroduced major site breakages on Firefox + +2017.9.12 +* Fixed DNT policy checking for blocked domains +* Fixed exporting large Badger datasets +* Made progress on Firefox for Android compatibility +* Fixed various site breakages +* Improved badge updating performance +* Improved translations (Czech, Italian, Swedish, Ukrainian) +* Added Danish translation + +2017.7.24 +* Added validation to yellowlist (f.k.a. "cookieblock list") updating +* Removed faulty yellowlist domain removal logic, which, together with missing +validation and eff.org serving a maintenance page instead of the actual +yellowlist, resulted in major breakages all across the Web, something this +update should prevent from happening ever again +* Fixed various site breakages +* Improved translations (Swedish) + +2017.6.13.1 +* Added workaround for validation issue preventing upload to Chrome Web Store +* Fixed chrome.privacy-related exceptions in Firefox 54 + +2017.6.13 +* Added automatic replacement of t.co shortened tracking URLs with original +unobfuscated URLs on twitter.com +* Added option to disable Do Not Track policy checking +* Restricted DNT policy checking from sending cookies +* Fixed tooltips for DNT-compliant domains in popup +* Fixed localStorage tracking sometimes being attributed to unrelated domains +* Improved translations (Swedish, Ukrainian) + +2017.5.9 +* Improved popup rendering +* Added version number to popup +* Restricted Do Not Track policy checking from being able to set cookies +* Fixed several cookie parsing issues +* Added workaround for Cloudflare security cookies +* Improved translations (Simplified Chinese, Swedish, Ukrainian) + +2017.4.19.1 +* Rework DNT policy rechecking to only happen during browsing. Eliminates +needless rechecking of unlikely-to-be-visited-again domains. Should further +mitigate CPU issues. +* Fix DNT policies to only apply to specific domains they are posted on +* New translations (Ukrainian) +* Improved translations (Simplified Chinese, Italian) +* Fix "trackers" link on popup and options pages +* Fix broken site (sharepoint.com) + +2017.3.28 +* New Translations (Czech) +* Translation Updates +* Fix bug in DNT policy re-checking code +* Rate limit DNT checking to one request per second +* Fix issue with multiple DNT checks at once for a single domain +* Fix cookieblock updating issue +* Fix popup width issue +* Fix DNT hash updating issue +* Fix toggle switch issue +* Automated tests now also run on Firefox +* Other minor bugfixes and broken site fixes + +2017.3.22 +* AMO (Firefox) only release. +* Fix cookie tracking detection in Firefox. + +2017.1.26.1 +* AMO only release +* Fixes an error in the build scripts which reintroduced a firefox bug for AMO users + +2017.1.26 +* Huge speed improvements for settings import and on startup +* Fixes no content blocking bug (firefox) +* Several fixes for broken websites +* Translations fixes +* New Translation: Nordic +* New Translation: Traditional Chineese (Taiwan) +* New Translation: Serbian +* Bugfix: Crash on browsers without WebRTC +* Bugfix: narrow poup if icon is in the menu (firefox) +* Bugfix: Import/Export now uses utf-8 and can handle non english character +sets +* Enhancement: Convert icons to SVG +* Enhancement: Script surrogate for google analytics, gigya, and more... +* KNOWN ISSUE: Chrome will now display a message "Not downloaded from chrome + +2016.12.15.1 (2.0.2) +* BUGFIX: Chrome browsers no longer display privacy badger as (corrupted) +* BUGFIX: Fixes lockup issue on some versions of firefox +* BUGFIX: Fixes issue where privacy badger panel gets cut off +* BUGFIX: Fixes a non implmeneted API in firefox which was causing numerous +sites to break. +* KNOWN ISSUE: Chrome will now display a message "Not downloaded from chrome +store". This is a known side effect of a workaround for a different bug. + +2016.12.8.1 (2.0.1) +* BUGFIX: Sanitize origin and action in popup + +2016.12.8 (2.0) +* BUGFIX: Fix ublock origin warnings +* BUGFIX: Remove need for download permission + +2016.12.7.2 (2.0RC1) +* Huge speed improvements +* Multiprocess Compatible (E10S) for firefox +* Breaks many fewer websites +* Many small bugfixes +* Import and Export your data +* Block WebRTC from leaking your IP address +* Forget data in incognito mode +* block html5 "ping" tracking +* Translation fixes +* (Developers) Firefox and Chrome versions now share one code base! + +2016.9.7 (1.13) +* Add exceptions for multi domain first parties +* Fix google drive download issue +* Fix wikipedia login issue +* Fix youtube comments and notifications issues +* Several other broken site fixes +* Hopefully a fix for the "corrupted extension" issue + +2016.8.29 (1.12) +* UI Tweaks +* Remove last adblock plus code +* Feature: remove domains from list +* Refactor incognito mode handling +* Compatibile with firefox web extensions + +2016.5.24 (1.11) +* Fix build error + +2016.5.23 (1.10) +* Fix cookie block list adding bug +* New migration to fix bug retroactively + +2016.5.16 (1.9) +* Remove Adblock Plus Engine +* Switch to using storage.js and chrome storage API +* Massive refactoring of code +* Huge speed improvements +* Fixes bug where privacy badger "forgets" settings +* Fixes first run tab opening on every startup +* Fix waiting for privacy badger bug +* Fix high CPU usage bug +* Uses separate data store for incognito mode +* Ads selenium test to run pbtest.org sweet +* Fixes weird subdomain handling edge case +* Fixes bug where pages stop loading sometimes + +2015.4.6 (1.8) +* Fix "waiting for privacy badger bug" +* Huge speed improvement + +2015.4.6 (1.7) +* Fix crash when closing options page +* Add EFF Donate Button +* New popup to nag user to go through tutorial + +2015.3.2 (1.0.6) +* New feature: Search within blocked domain list +* Replace soundcloud widget with a click to play button +* Misc. bug fixes and translation improvements + +2015.12.3 (1.0.4) +* Lots of site bug fixes +* Chinese Translation +* Spanish Translation +* italian translation +* UI Overhaul +* Update Swedish locale +* Typo fixes +* Numerous bug fixes +* Added support for disabled sites with wildcards +* Red badge now reflects the number of domains blocked or cookieblocked +instead of all third parties. +* Tooltips show full domain name + +2015.8.14 (1.0.1) +* Fixes a bug where slider settings for a base domain wouldn't take effect +* Fixes 'this extension is slowing down chrome' errors + +2015.8.5 (1.0) +* 1.0 release +* Bugfixes from 2015.7.24 (0.99) +* Detects Canvas Fingerprinting +* Detect Local Storage Supercookies +* Improved UI +* Options page for overriding privacy badger settings +* Report Broken Site button +* Many Bugfixes (see github) +* Translations into swedish, french and german + +2015.7.24 (0.99) +* Release candidate for version 1.0! + +2015.4.1 +* Miscellanious bugfixes +* Improvements to heuristic + +2014.9.16 +* Adds lots of tests including selenium tests. +* Adds lots of domains to the cookie block list. +* Fixes bug with downloading cookie block list. +* Fixes other minor stylistic bugs. + +2014.7.17 +* Created dialog to allow users to unblock certain third parties on certain +* sites for addedd functionality. E.g. disqus comments, facebook comments, etc. +* Added lots of domains to cookie block list. +* do not show domains that do not appear to be trackers in the popup +* added missing google+ button override diff --git a/doc/DESIGN-AND-ROADMAP.md b/doc/DESIGN-AND-ROADMAP.md new file mode 100644 index 0000000..ca96989 --- /dev/null +++ b/doc/DESIGN-AND-ROADMAP.md @@ -0,0 +1,276 @@ +# PRIVACY BADGER DESIGN AND ROADMAP + +## DESIGN + +### OBJECTIVE + +Privacy Badger aims to + + - Protect users against non-consensual tracking by third party domains as they + browse the Web. + + - Send and enforce the Do Not Track signal to sites (especially "third party" + sites since they are in a position to collect a large fraction of the user's + browsing history). + +Privacy Badger consists of a primary tracker blocking algorithm, augmented by +a number of secondary features that extend further privacy protection and +reduce breakage from the primary mechanism. + +### PRIMARY MECHANISM + +Privacy Badger: + +1. Ensures your browser is sending the DNT: 1 header (in some regulatory + environments, it is advisable to note "installing Privacy Badger will enable + Do Not Track" on your installation page / app store entry. +2. Observes which first party origins a given third party origin is setting cookies on + (certain cookies are deemed to be "low entropy", as discussed below). + + 2a. Observes which first party origins a given third party is doing certain + types of fingerprinting on. + + 2b. Observes which first party origins a given third party is setting certain types + of supercookies on. + + 2c. Observes which first party origins a given third party is sending + certain parts of first party cookies back to itself using image query + strings (pixel cookie sharing). + +3. If a third party origin receives a cookie, a supercookie, an image pixel + containing first party cookie data, or makes JavaScript fingerprinting API + calls on 3 or more first party origins, this is deemed to be "cross site + tracking". +4. Typically, cross site trackers are blocked completely; Privacy Badger + prevents the browser from communicating with them. The exception is if the + site is on Privacy Badger's "yellow list" (aka the "cookie block list"), in + which case resources from the site are loaded, but without access to their + (third party) cookies or local storage, and with the referer header either + trimmed down to the origin (for GET requests) or removed outright (all other + requests). The yellow list is routinely fetched from [an EFF URL](https://www.eff.org/files/cookieblocklist_new.txt) + to allow prompt fixes for breakage. + + Until methods for blocking them have been implemented, domains that perform + fingerprinting or use third party supercookies should not be added to the + yellow list. +5. Users can also choose custom rules for any given domain flagged by Privacy Badger, + overrulling any automatic decision Privacy Badger has made about the domain. + Privacy Badger uses three-state sliders (red → block, yellow → cookie block, green → allow) to convey this + state in UI. We believe this is less confusing than the UI in many other + blocking tools, which often leave the user confused about whether a visual + state represents current blocking or the opportunity to block. +6. Domains can agree to EFF's [Do Not Track policy](https://eff.org/dnt-policy). If a domain does this + Privacy Badger will no longer block its traffic or cookies. If a + first-party domain posts the policy, this applies to all third parties + embedded on that domain. + Sites post the policy at [a well-known URL](https://example.com/.well-known/dnt-policy.txt) + on their domains. The contents must match those of a file from the list of + acceptable policies exactly; the policy file is [maintained on github](https://github.com/EFForg/dnt-policy/), + but Privacy Badger fetches a list of known-good hashes periodically [from EFF](https://www.eff.org/files/dnt-policies.json) + (version 1.0 of the policy file will be added to that list when Privacy Badger + reaches version 1.0) + +#### Further Details + +# :warning: THIS SECTION IS OUTDATED AND NEEDS TO BE REWRITTEN :warning: + +Data Structures: + +- action_map = { 'google.com': blocked, 'fonts.google.com': 'cookieblocked', 'apis.fonts.google.com': 'user_cookieblock', 'foo.tracker.net': 'allow', 'tracker.net': 'DNT', } +- snitch_map = {google.com: array('cooperq.com', 'noah.com', 'eff.org'), tracker.net: array(a.com, b.com, c.com)} +- dnt_domains = array('tracker.net', 'dnt.eff.org') +- settings = {social_widgets = true, ...} +- cookie_block_list = "{'fonts.google.com': true, 'maps.google.com', true}" + + +On Request(): + + if privacy badger is not enabled for the tab domain then return + if fqdn is not a third party then return + + action = check_action(fqdn) (described below) + + if action is block then cancel request + if action is cookie_block then strip headers + if fqdn is nontracking (i.e check_action returned nothing) then do nothing + if action is noaction or any user override then async_check_tracking + if action is allow && count == 2 then blocking_check_tracking + if check_tracking changed action then call check_action again + else do_nothing + + async_check_dnt(fqdn) + +check_action(fqdn): returns action + + related_domains = array() + best_action = 'noaction' + + for $domain in range(fqdn ... etld+1) + if action_map contains $domain + related_domains.shift($domain) + + for each domain in related domains + if score(domain.action) > score(best_action) + best_action = domain.action + + return best_action + +check_tracking(fqdn): return boolean + + var base_domain = etld+1(fqdn) + + if has_cookie or has_supercookie or has_fingerprinting + if snitch_map doesn't have base domain add it + if snitch_map doesn't have first party add it + if snitch_map.base_domain.len >= 3 + add base domain to action map as blocked + add all chlidren of base_domain and self from yellow list to action map + return true + +##### What is an "origin" for Privacy Badger? + +Privacy Badger has two notions of origin. One is the [effective top level +domain](https://wiki.mozilla.org/Public_Suffix_List) plus one level of +subdomain (eTLD+1), computed using +[getBaseDomain](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIEffectiveTLDService) +(which is built-in to Firefox; in Chrome we [ship a +copy](https://github.com/EFForg/privacybadger/blob/8e8ad9838b74b6d13354163f78d362ca60dd44f9/src/lib/basedomain.js#L75). +The accounting for which origins are trackers or not is performed by looking +up how many first party fully qualified domain names (FQDNs) have been tracked by each +of these eTLD + 1 origins. This is a conservative choice, which avoids the +need to evaluate sets of cookies with different scopes. + +When the heuristic determines that the correct response is to block, +that decision is applied to the third party eTLD+1 from which tracking was seen. + +Users are able to override Privacy Badger's decision for any given FQDN if they +do not wish to block something that is otherwise blocked (or block something +that is not blocked). + +To illustrate this, suppose the site tracking.co.uk was embedded on +every site on the Web, but each embed came from a randomly selected subdomain +a.tracking.co.uk, b.tracking.co.uk, +c.tracking.co.uk, etc. Suppose the user visits +www.news-example.com and search.jobs-example.info. + +The accounting data structure seenThirdParties would come to include: + +``` +{ + ... + "tracking.co.uk" : { + "news-example.com" : true, + "jobs-example.info" : true, + } + ... +} +``` + +Now suppose the user visits a third site, clickbait.nonprofit.org, +and is tracked by q.tracking.co.uk on that site. The +seenThirdParties data structure will have a third entry added to it, meeting +the threshold of three first party origins and defining +tracking.co.uk as a tracking eTLD+1. At this point +tracking.co.uk will be added to the block list. Any future requests to +tracking.co.uk, or any of its subdomains, will be blocked. +The user can manually unblock specific subdomains as necessary via the popup menu. + +##### What is a "low entropy" cookie? + +Our [current cookie heuristic](https://github.com/EFForg/privacybadger/blob/8e8ad9838b74b6d13354163f78d362ca60dd44f9/src/js/heuristicblocking.js#L632) is to assign "number of identifying bits" estimates to +some known common cookie values, and to bound the sum of these to 12. +Predetermined low-entropy cookies will not be identified as tracking, nor will +combinations of them so long as their total estimated entropy is under 12 bits. + +### ADDITIONAL MECHANISMS + +#### Widget Substitution + +Many social media widgets are inherently designed to combine tracking +and occasionally-useful functionality in a single resource load. +Privacy Badger aims to give the user access to the functionality when they want +it, but protection against the tracking at all other times. + +To that end, Privacy Badger has incorporated code from the ShareMeNot project +so that it is able to replace various types of widgets hosted +by third party origins with local, static equivalents that either replace the +original widget faithfully, or create a click-through step before the widget +is loaded and tracks the user. + +The widget replacement table lives in the [socialwidgets.json file](https://github.com/EFForg/privacybadger/blob/8e8ad9838b74b6d13354163f78d362ca60dd44f9/src/data/socialwidgets.json). +Widgets are replaced unless the user has chosen to specifically allow that third party +domain (by moving the slider to 'green' in the UI), so users can selectively +disable this functionality if they wish. The code for social media widgets is +quite diverse, so not all variants (especially custom variants that sites build +for themselves) are necessarily replaced. + +#### What are the states for domain responses? + +Currently domains have three states: no action, cookie block, and block. No +action allows all requests to resolve as normal without intervention from +Privacy Badger. Cookie block allows for requests to resolve normally but will +block cookies from being read or created. Cookie block also trims or removes +the referer header. Block will cause any requests from that origin to be +blocked entirely; before even a TCP connection can be established. The user can +toggle these options manually, which will supersede any determinations made +automatically by Privacy Badger. + +#### What does EFFs Do Not Track policy stipulate? + +Currently the Do Not Track policy covers where the agreement will be hosted, +how users who send the DNT header are treated, log retention, how information +will be shared with other domains, notifications of disclosure, and possible exceptions. +It can be read in full [here](https://www.eff.org/dnt-policy). + +#### How do sites agree to EFFs Do Not Track policy? + +Sites can agree to this policy by posting at https://subdomain.example.com/.well-known/dnt-policy.txt, +where "subdomain" is any domain to which the policy applies, for a given third party. + +#### Fingerprinting detection +Certain aspects of the browser, such as fonts, add-ons or extensions, screen size, +and seen links, can be used to give the browser a fingerprint that is unique out +of a very small amount of users (see [Panopticlick](https://panopticlick.eff.org/) for more information). + +As of Privacy Badger 1.0, any third party script that writes to an HTML5 +canvas object and then reads a sufficiently large amount back from the third +party canvas object will be treated the same way as a third party cookie, blocking the +third party origin if it does this across multiple first party origins. Our +research has determined that this is a reliable way to distinguish between +fingerprinting and other third party canvas uses. + +This may be augmented by hooks to detect extensive enumeration of properties +in the navigator object in the future. + +#### Pixel cookie sharing detection + +Detection of first to third party cookie sharing via image pixels was added in [#2088](https://github.com/EFForg/privacybadger/issues/2088). + +### ROADMAP + +#### High priority issues + +Please see our ["high priority"-labeled issues](https://github.com/EFForg/privacybadger/issues?q=is%3Aissue+is%3Aopen+label%3A%22high+priority%22). + +## Technical Implementation + +### How are origins and the rules for them stored? + +When a browser with Privacy Badger enabled makes a request to a third party, if +the request contains a cookie or the response tries to set a cookie it gets +flagged as 'tracking'. Origins that make tracking requests get stored in a +key→value store where the keys are the origins making the request, and the +values are the first party origins these requests were made on. If that list of +third parties contains three or more first party origins the third party origin +gets added to another list of known trackers. When Privacy Badger gets a +request from an origin on the known trackers list, if it is not on the yellow +list then Privacy Badger blocks that request. If it is on the yellow list then +the request is allowed to resolve, but all cookie setting and getting parts of +it are blocked, while the referer header is trimmed or removed. Both of these +lists are stored on disk, and persist between browser sessions. + +Additionally users can manually set the desired action for any FQDN. +These get added to their own lists, which are also stored on disk, and get checked +before Privacy Badger does its default action for a given origin. These are managed +from the popup window for Privacy Badger on the page as well as the options menu +for the whole extension. diff --git a/doc/Translation.md b/doc/Translation.md new file mode 100644 index 0000000..6292b07 --- /dev/null +++ b/doc/Translation.md @@ -0,0 +1,92 @@ +# Translating Privacy Badger + +We need your help in translating Privacy Badger to every possible language! + +When translating you should always use the source (American English) locale as +the reference. You can also use existing translations from other languages to +help you in case of doubt, but you should always consider the English version +as the correct one. + + +#### A note about adding translation strings in PRs + +While working on a Privacy Badger enhancement, you might need to add one or +more localized strings. You only need to add new strings to the source +(`en_US`) locale. There is no need to manually add untranslated copies of new +messages to all other locales. This will be taken care of later by a Privacy +Badger maintainer. + + +## Working with translations on GitHub + +Translations on GitHub are done with JSON files. +Each language has its own folder inside +[`src/_locales/`](https://github.com/EFForg/privacybadger/tree/master/src/_locales) +(e.g. 'es' for Spanish, 'ru' for Russian, etc.). +Inside each of these folders is a JSON file that contains the translated +strings for that language. Each entry in the JSON file follows this structure: + + "string_identifier": { + "message": "String text" + "description": "Some useful info" + } + +The translated string is the `"String text"` part. You should **NOT** change +any other part of the entry. + +The `"Some useful info"` part sometimes contains useful information (in +English) about the string. Usually it provides the context of the string: what +it is ("a section heading") and where it can be found in the UI ("on the new +user intro page"). You should not translate it. + +To contribute on GitHub, first check the status of your local language +translation: if you don't see a folder with your +[local language code](https://developer.chrome.com/webstore/i18n?csw=1#localeTable), +the translation for that language is missing. In this case you should follow +the instructions below to set up the JSON file for your language. If the +translation for your language is already there, you can contribute by checking +its accuracy and by correcting any errors you find (see below for +instructions). + +#### Add a new language + +To add a new language on GitHub, follow these steps: + +1. Fork this repository +2. Inside your fork, create a folder in `src/_locales/` and name it +with your [local language code](https://developer.chrome.com/webstore/i18n?csw=1#localeTable) +3. Copy the `src/_locales/en_US/messages.json` file to the folder you created +4. Start translating each message to your language by replacing the +English strings with the translated ones +5. When you have completed the translation, [open a pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/). Here you can find +an example translation pull request: [#1270](https://github.com/EFForg/privacybadger/pull/1270). + +#### Correct an existing translation + +To correct errors in an existing translation: + +1. Fork this repository +2. Open your local language JSON file and apply the changes +3. When you have completed your work, [open a pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/). +Here you can find an example translation pull request: +[#1270](https://github.com/EFForg/privacybadger/pull/1270). + + +## Testing your translations + +To see your (in-progress) translations in the actual Privacy Badger UI, you should first [load Privacy Badger from source code](/doc/develop.md#install-from-source). + +A quick/hacky way to change Privacy Badger's locale is to temporarily copy the locale you want to use to your default (OS) locale's folder in `src/_locales/` and reload Privacy Badger. + +The proper way would be to launch the browser in your desired locale. + +For Chrome, it might be as easy as [launching it from the command line with `LANGUAGE=fr` (for example) in front of the executable](https://stackoverflow.com/questions/24992240/start-google-chrome-with-a-specific-locale-using-a-command-line-argument). + +Firefox requires [downloading a language pack](https://addons.mozilla.org/en-US/firefox/language-tools/) and [setting it as your locale from about:config](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Internationalization#Testing_out_your_extension). + + +## Other information + +To learn about outstanding translations-related issues, and to +see how translations have been handled in the past, take a look +at issues and pull requests marked with the [translations label](https://github.com/EFForg/privacybadger/issues?utf8=%E2%9C%93&q=label%3Atranslations%20). diff --git a/doc/admin-deployment.md b/doc/admin-deployment.md new file mode 100644 index 0000000..41c1d0e --- /dev/null +++ b/doc/admin-deployment.md @@ -0,0 +1,49 @@ +# Privacy Badger enterprise deployment and configuration + +Administrators can configure Privacy Badger on managed devices by setting up a policy. + +You can find the full list of available settings in [Privacy Badger's managed storage schema](/src/data/schema.json). Please [let us know](https://privacybadger.org/#I-found-a-bug%21-What-do-I-do-now) if you'd like to set something that isn't yet supported. + +Note that Privacy Badger currently reads and applies settings from [managed storage](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/managed) on startup. To see your policy take effect on a managed device, first restart that device's browser. + + +## Firefox setup + +1. Locate and if necessary create the [managed storage manifests folder](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_manifests#Manifest_location). Note that on Windows you need to create a registry key that points to the manifest's location. +2. Copy the [sample managed storage manifest for Firefox](/doc/jid1-MnnxcxisBPnSXQ@jetpack.json) to this folder. + +If your Privacy Badgers were installed from [Privacy Badger's homepage](https://privacybadger.org) (not from [AMO](https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/)): + +3. Rename the manifest to `jid1-MnnxcxisBPnSXQ-eff@jetpack.json`. +4. Similarly, update the `"name"` property in the manifest to `"jid1-MnnxcxisBPnSXQ-eff@jetpack"`. + + +## Chrome/Chromium setup + +Please review the [Configuring Apps and Extensions by Policy](http://www.chromium.org/administrators/configuring-policy-for-extensions) document. + +Notes for Chrome OS and Linux follow. + +### Chrome OS + +The following example JSON policy disables Privacy Badger on `example.com`. This means Privacy Badger will be disabled when you visit any `example.com` page. + +```json +{ + "disabledSites": { + "Value": [ + "example.com" + ] + }, + "showIntroPage": { + "Value": false + } +} +``` + +### Linux + +1. Locate and if necessary create the [managed policies folder for Chrome or Chromium](http://www.chromium.org/administrators/configuring-policy-for-extensions). +2. Copy the [sample managed storage manifest for Chrome](/doc/sample-managed-storage-manifest-chrome.json) to this folder. +3. Rename the manifest file to whatever you like (perhaps `privacy-badger-admin-settings.json`). +4. Update the extension ID inside the manifest if you are not using official Privacy Badger releases from Chrome Web Store. diff --git a/doc/develop.md b/doc/develop.md new file mode 100644 index 0000000..cd28b16 --- /dev/null +++ b/doc/develop.md @@ -0,0 +1,45 @@ +# Working with Privacy Badger's code + +To make changes to Privacy Badger, you have to first load the extension from a source code checkout. + + +## Install from source + +To install Privacy Badger from source in Chrome, visit `chrome://extensions`, enable "Developer mode", click "Load unpacked" and select the [`src`](src/) subdirectory inside your copy of the Privacy Badger source code. + +In Firefox, visit `about:debugging`, click "Load Temporary Add-on" and select the [`src/manifest.json`](src/manifest.json) file. Note that this only installs the extension temporarily; it will be removed when you close Firefox. + +To install Privacy Badger from source in Firefox for Android, please see [Mozilla's guide to developing extensions for Firefox for Android](https://extensionworkshop.com/documentation/develop/developing-extensions-for-firefox-for-android/) and [`web-ext` documentation](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/#testing-in-firefox-for-android). + + +## Send a pull request + +Before submitting a pull request (PR), please review the sections below. + +### Style guide + +All JavaScript code going forward should use the following naming conventions: + +- Objects and their properties should be Java or camelCase style. +- Primitive types should be Python or snake_case style. +- Constants should be ALL_CAPS. + +Examples: + +```javascript +const TRACKER_ENTROPY_THRESHOLD = 33; + +let tab_id = details.tabId; + +window.badger.getTrackerCount(tab_id); +``` + +### Catch errors early with static code analysis + +First, install the exact expected version of [ESLint](https://eslint.org) by running `npm install` in your Privacy Badger source code checkout directory. You should then be able to produce a lint report by running `make lint` in the same directory. + +You can review our set of ESLint rules in [`.eslintrc.yml`](/.eslintrc.yml). Files we want ESLint to ignore are specified in [`.eslintignore`](/.eslintignore). + +### Commit messages + +Please review the suggestions in this excellent [guide to writing commit messages](https://chris.beams.io/posts/git-commit/). diff --git a/doc/fixing-broken-sites.md b/doc/fixing-broken-sites.md new file mode 100644 index 0000000..7a31da9 --- /dev/null +++ b/doc/fixing-broken-sites.md @@ -0,0 +1,63 @@ +# How to fix broken site issues + +Unfortunately, while working to protect your privacy, Privacy Badger can end up breaking website functionality. Here are the [open "broken site" and "help wanted"-labeled issues](https://github.com/EFForg/privacybadger/issues?utf8=✓&q=is%3Aissue%20is%3Aopen%20label%3A"broken%20site"%20label%3A"help%20wanted"%20). + +This document is about the process of classifying and resolving these breakages. + + +## Confirm Privacy Badger is responsible + +The first thing to do is to confirm that Privacy Badger blocks (or will eventually learn to block) the domain, and that blocking the domain does indeed break the site. + +Browser caching can get in our way here, as cached resources bypass request filtering by extensions. Disable your browser cache when debugging, for example by reloading using Ctrl+Shift+R every time. + +Try disabling Privacy Badger for the site, and then reloading the page. Does that fix the issue? If it doesn't, does disabling the entire Privacy Badger add-on and reloading the page fix the issue? If it still doesn't, Privacy Badger is not at fault. + +If disabling Badger and reloading the page fixed the issue, and re-enabling and reloading brought the issue back, let's try to figure out the responsible domain(s). Try allowing half the blocked domains to load. If (after reloading the page) the issue was fixed, pick half of those domains and revert them back to Badger's control. Eventually you should find the exact domain(s) that, when blocked, cause the issue to appear. + + +## Resolve the breakage + +Once the issue is confirmed (and the responsible domains have been identified), you should try to find the most appropriate way to resolve it. Privacy Badger comes with several approaches: + +| Approach | Label | Original issue | Difficulty | Notes | +| --- | :---: | :---: | :---: | --- | +| Multi-domain first parties | [MDFP](https://github.com/EFForg/privacybadger/labels/MDFP) | [#781](https://github.com/EFForg/privacybadger/issues/781) | Easy | Narrowly applicable | +| Script surrogates | [surrogates](https://github.com/EFForg/privacybadger/labels/surrogates) | [#400](https://github.com/EFForg/privacybadger/issues/400) | Hard | Should use uBlock Origin's surrogates ("neutered scripts") as much as possible | +| Widget replacement | [widgets](https://github.com/EFForg/privacybadger/labels/widgets) | [#196](https://github.com/EFForg/privacybadger/issues/196), [#1467](https://github.com/EFForg/privacybadger/issues/1467) | Medium | Still needs review/improvements, although some progress being made ([#2262](https://github.com/EFForg/privacybadger/pull/2262)) | +| EFF's Do Not Track policy | [DNT Policy](https://github.com/EFForg/privacybadger/labels/DNT%20policy)| - | n/a | Narrowly applicable | +| Yellowlisting | [yellowlist](https://github.com/EFForg/privacybadger/labels/yellowlist)| - | Easy | Only protects against some types of tracking | + +The question to ask is, which way addresses the issue most specifically, resolving the breakage while increasing privacy exposure by the smallest amount? If you are not sure, that's OK! Opening a new issue (or chiming in on an existing issue) to ask for help is fine. + +Let's look at some common kinds of breakages and see how they relate to the approaches above. + + +### Domains that are part of the site but don't look like it + +Does the blocked domain actually belong to the site, but Privacy Badger doesn't know that and so treats the domain as an external tracker? Sounds like a job for [multi-domain first parties](https://github.com/EFForg/privacybadger/issues/781) (MDFP). + +When adding domains to the MDFP list, please add base ([eTLD](https://en.wikipedia.org/wiki/Public_Suffix_List)+1) domains only. For example, there is no need to add `api.example.net` when adding `example.com` and `example.net`. + +For past examples, you could browse [the list of merged pull requests with the "MDFP" label](https://github.com/EFForg/privacybadger/issues?q=label%3AMDFP+is%3Amerged). + + +### JavaScript errors + +Does blocking the domain block a JavaScript analytics library that the site tries to use and fails, breaking site navigation? This could be resolved by [script surrogates](https://github.com/EFForg/privacybadger/issues/400). + + +### External services + +Is the missing comments section powered by a commenting service that Privacy Badger learned to block? Perhaps a new [widget replacement](https://github.com/EFForg/privacybadger/pull/196) should be added. + +We should also ask the service to to adopt the [EFF Do Not Track policy](https://www.eff.org/dnt-policy), which is a way for privacy-conscious companies to receive recognition for their good practices. If their service can and will abide by the policy's requirements, posting the policy on the service's domains will tell Privacy Badger to allow loading of resources from those domains. + + +### External domains too complex to surrogate or replace with placeholders + +If nothing else seems to fit, adding the affected domain to the "[yellowlist](/doc/yellowlist-criteria.md)" will make Privacy Badger set the domain to "yellow" ("cookie-blocked") instead of "red" (blocked) after seeing it track on three or more sites. + +Resources from yellowlisted domains are requested without referrer headers, and are restricted from reading or writing cookies or localStorage. + +[Here is an example yellowlist pull request](https://github.com/EFForg/privacybadger/pull/1543) that shows what's good to know when deciding how to fix a breakage, and how to get that information. diff --git a/doc/jid1-MnnxcxisBPnSXQ@jetpack.json b/doc/jid1-MnnxcxisBPnSXQ@jetpack.json new file mode 100644 index 0000000..b9242ca --- /dev/null +++ b/doc/jid1-MnnxcxisBPnSXQ@jetpack.json @@ -0,0 +1,11 @@ +{ + "name": "jid1-MnnxcxisBPnSXQ@jetpack", + "description": "This is a sample Firefox managed storage manifest.", + "type": "storage", + "data": { + "showIntroPage": false, + "disabledSites": [ + "example.com" + ] + } +} diff --git a/doc/permissions.md b/doc/permissions.md new file mode 100644 index 0000000..1211b2a --- /dev/null +++ b/doc/permissions.md @@ -0,0 +1,27 @@ +# Permissions + +This document explains the need for each [extension permission](https://developer.chrome.com/extensions/declare_permissions) declared in Privacy Badger's [extension manifest](/src/manifest.json). + +## Privacy +The Privacy API lets extensions modify browser-wide privacy settings. Privacy Badger uses it to disable a setting that lets Chrome send third-party requests to resolve errors, and to turns off link tracking via the HTML ping attribute. We also give users the option to change their WebRTC privacy level in order to prevent leaking local network address information. + +## Cookies +Privacy Badger needs access to the cookies API in order to detect and correct a common error where Cloudflare domains are identified as trackers and blocked. + +## Storage +The storage API lets extensions store information that persists after the browser is closed. Privacy Badger uses it to save user settings and information it has learned about trackers. + +## WebRequest +The WebRequest API allows extensions to observe all incoming and outgoing network requests made by the browser. Privacy Badger inspects request for tracking behavior, and logs the destinations of outgoing requests that are flagged as tracking. No information is ever shared outside of the browser. + +## WebRequestBlocking +The blocking version of the WebRequest API allows extensions to modify or block network requests before they leave the browser. Privacy Badger uses this API to synchronously view, modify, and block requests to trackers. For example, Privacy Badger modifies requests made to domains on the yellowlist to remove the referer header and cookies. + +## WebNavigation +This API allows extensions to detect when the user navigates from one web page to another. Privacy Badger needs this in order to correctly determine whether each request is a first-party request (to the same domain as the web page) or a third-party request (to somewhere else). This permission allows it to avoid misattributing trackers on special pages such as Service Worker pages. + +## http://\*/\* and https://\*/\* +These permissions allow Privacy Badger to use the WebRequest and WebRequestBlocking permissions on requests to all websites. As described above, Privacy Badger uses these APIs to analyze requests and detect tracking, then modify or block requests to known trackers. No information is ever shared outside of the browser. + +## Tabs +Privacy Badger needs access to the tabs API so that the extension can detect which tab is active and which tabs are simply present in the background. The extension icon, badge and popup update to reflect the state of Privacy Badger. This often requires knowing the tab's URL. For example, updating the icon requires the URL in order to determine whether Privacy Badger should be shown as disabled on that tab. Privacy Badger also uses the tabs API for miscellaneous tasks such as opening or switching to the already open new user welcome page. diff --git a/doc/sample-managed-storage-manifest-chrome.json b/doc/sample-managed-storage-manifest-chrome.json new file mode 100644 index 0000000..194bd02 --- /dev/null +++ b/doc/sample-managed-storage-manifest-chrome.json @@ -0,0 +1,12 @@ +{ + "3rdparty": { + "extensions": { + "pkehgijcmpdhfbdbbnkijodmdjhbjlgp": { + "showIntroPage": false, + "disabledSites": [ + "example.com" + ] + } + } + } +} diff --git a/doc/tests.md b/doc/tests.md new file mode 100644 index 0000000..b03c4a3 --- /dev/null +++ b/doc/tests.md @@ -0,0 +1,92 @@ +# Working with Privacy Badger's tests + +We have a few different types of tests: + +* We use [unit tests](/doc/tests.md#unit-tests) for confirming that smaller pieces of code behave as expected. +* [Functional tests](/doc/tests.md#functional-tests) test the UI and that things integrate together properly. +* [Travis CI](/doc/tests.md#travis-ci) runs all these automatically for every pull request on both Chrome and Firefox. + +## Travis CI + +Every pull request runs the full suite of functional and unit tests on [Travis CI](https://travis-ci.org/). We test on latest stable Chrome and Firefox releases, as well as on Chrome Beta, Firefox Beta and Firefox ESR. + +See [`.travis.yml`](/.travis.yml) for Travis configuration, [`scripts/setup_travis.sh`](/scripts/setup_travis.sh) for test setup, and [`scripts/run_travis.sh`](/scripts/run_travis.sh) for test execution procedures. + +We use [ESLint](https://eslint.org) to flag potential JavaScript errors and style issues. Please see our [developer guide](/doc/develop.md#lint-your-changes) for setup instructions. + +## Unit tests + +We use [QUnit](https://qunitjs.com/) for unit tests. +Unit tests are defined in [`/src/tests/tests`](/src/tests/tests). Unit test dependencies live in [`/src/tests/lib`](/src/tests/lib). + +To run unit tests, first [load Privacy Badger from source code](/doc/develop.md#install-from-source) (as we don't ship unit tests with published versions). +Once you loaded Badger from source, click on its button in your browser toolbar to open Badger's popup. +Then in the popup, click on the gear icon (⚙) to open the options page. +Your browser should navigate to an internal URL that starts with `chrome-extension://` or `moz-extension://` and ends with `/skin/options.html`. +Replace `/skin/options.html` with `/tests/index.html` and hit Enter. +This will open the unit test suite and run the tests. + +### Writing unit tests + +When writing unit tests, try to scope each test to the function or method in question, then each individual assertion within that test addressing a core piece of functionality or expectation of that test. Consider testing expected input, potential breaking points, and expected outputs. It's easy to get caught going down rabbit holes testing unlikely scenarios, so consider which edge cases are most important to consider, and which are more likely to occur. + +Do verify that removing or mutating the code being tested produces failed assertions. + +## Functional tests + +Our [functional tests](/tests/selenium/) are written in Python and driven by [Selenium](https://selenium-python.readthedocs.io/) and [pytest](https://docs.pytest.org/en/latest/). + +To run them in Chrome, you need to [install `chromedriver`](http://chromedriver.chromium.org/getting-started). In Firefox, you need to [install `geckodriver`](https://github.com/EFForg/privacybadger/blob/1550b9efb64c1d5e276361e3940f402c3ec87afc/scripts/setup_travis.sh#L21-L50). + +You also need to [install the Python packages](https://snarky.ca/a-quick-and-dirty-guide-on-how-to-install-packages-for-python/) specified in [`/tests/requirements.txt`](/tests/requirements.txt). + +You should now be able to run the Selenium tests. Try them out by running +the code below. This should take several minutes. +```bash +$ BROWSER=chrome pytest -v tests/ +``` + +macOS users may need to provide the full path to the browser application folder. For example, to run tests on macOS: +```bash +$ BROWSER=/Applications/Firefox.app/Contents/MacOS/firefox-bin pytest -v tests/ +# or +$ BROWSER=/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome pytest -v tests/ +``` + +For more information, see our Travis CI [setup](/scripts/setup_travis.sh) and +[run](/scripts/run_travis.sh) scripts. + + +### Invocation examples + +Note that to use a debugger like `pdb` or `ipdb` you must pass the `-s` (`--capture=no`) flag to pytest. +```bash +# run qunit_test.py, with Firefox, with verbose output (-v) +$ BROWSER=/usr/bin/firefox pytest -v tests/selenium/qunit_test.py tests/ + +# run a specific test on a specific class in a specific module with Chrome Beta +$ BROWSER=google-chrome-beta pytest tests/selenium/super_cookie_test.py::SupercookieTest::test_should_detect_ls_of_third_party_frame + +# run any tests whose name (including the module and class) matches the string cookie_test +# this is often useful as a less verbose way to run a single test +$ BROWSER=firefox pytest -k cookie_test tests/ +``` + +More pytest invocations can be found [here](https://docs.pytest.org/en/latest/usage.html). + +If you are on Linux, you can also run the tests headlessly (without displaying a GUI). +Install `Xvfb` with your system package manager, then set the `ENABLE_XVFB=1` environment variable: + +```bash +$ BROWSER=firefox ENABLE_XVFB=1 pytest -s -v -k PopupTest tests/ +``` + +### Writing functional tests + +Test methods that you want to be discovered and run by `pytest` must be prefixed with the keyword `test`. For example: `test_pixel_tracking_detection`. A similar rule applies to naming any new test class files that you want to be detected by the testing suite: the `test` keyword must be appended to the end of the title. For example: `pixel_test.py`. + +When testing Badger's tracker detection/learning, you should first clear the pre-trained/seed tracker data. For example (run on Badger's options page): `self.js("chrome.extension.getBackgroundPage().badger.storage.clearTrackerData();")`. Clearing seed data ensures that the tracking domain was discovered just now and not from seed data. + +You should also set up your tracking detection test in a way where your test fixture has a "no tracking" mode that you visit first and assert that no tracking was detected. This is to ensure that when we detect the tracking being tested we didn't actually detect some other kind of tracking instead. + +Just as with unit tests, please verify that removing or mutating the code being tested produces failed assertions. diff --git a/doc/yellowlist-criteria.md b/doc/yellowlist-criteria.md new file mode 100644 index 0000000..c209328 --- /dev/null +++ b/doc/yellowlist-criteria.md @@ -0,0 +1,8 @@ +EFF maintains a Privacy Badger "yellowlist" of domains for which requests are allowed but Privacy Badger restricts access or availability of objectionable cookies and potentially other objectionable identifiers. + +Our objective in curating that list is to maximize user privacy while minimizing disruption to functionality that users expect from sites. The criteria we examine when considering possible yellowlist entries include (but are not limited to): + +* Was this in [Bau and Mayer's](https://jonathanmayer.org/papers_data/bau13.pdf) manually curated non-tracker list? +* Is this domain necessary for functionality the user expects from 1st party pages? +* Is the domain's privacy policy clear that it does not perform non-consensual tracking? +* Is there a reasonable self-hosted surrogate available that could replace the functionality of this domain (e.g. https://github.com/EFForg/privacybadgerchrome/issues/400). diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..deba7a3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7063 @@ +{ + "name": "privacy-badger-dev-tools", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + } + } + }, + "@babel/polyfill": { + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.11.5.tgz", + "integrity": "sha512-FunXnE0Sgpd61pKSj2OSOs1D44rKTD3pGOfGilZ6LGrrIH0QEtJlTjqOqdF8Bs98JmjfGhni2BBkTfv9KcKJ9g==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@cliqz-oss/firefox-client": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/firefox-client/-/firefox-client-0.3.1.tgz", + "integrity": "sha512-RO+Tops/wGnBzWoZYkCraqyh2JqOejqJq5/a4b54HhmjTNSKdUPwAOK17EGg/zPb0nWqkuB7QyZsI9bo+ev8Kw==", + "dev": true, + "requires": { + "colors": "0.5.x", + "js-select": "~0.6.0" + } + }, + "@cliqz-oss/node-firefox-connect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@cliqz-oss/node-firefox-connect/-/node-firefox-connect-1.2.1.tgz", + "integrity": "sha512-O/IyiB5pfztCdmxQZg0/xeq5w+YiP3gtJz8d4We2EpLPKzbDVjOrtfLKYgVfm6Ya6mbvDge1uLkSRwaoVCWKnA==", + "dev": true, + "requires": { + "@cliqz-oss/firefox-client": "0.3.1", + "es6-promise": "^2.0.1" + } + }, + "@devicefarmer/adbkit": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit/-/adbkit-2.11.3.tgz", + "integrity": "sha512-rsgWREAvSRQjdP9/3GoAV6Tq+o97haywgbTfCgt5yUqiDpaaq3hlH9FTo9XsdG8x+Jd0VQ9nTC2IXsDu8JGRSA==", + "dev": true, + "requires": { + "@devicefarmer/adbkit-logcat": "^1.1.0", + "@devicefarmer/adbkit-monkey": "~1.0.1", + "bluebird": "~2.9.24", + "commander": "^2.3.0", + "debug": "~2.6.3", + "node-forge": "^0.10.0", + "split": "~0.3.3" + } + }, + "@devicefarmer/adbkit-logcat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-logcat/-/adbkit-logcat-1.1.0.tgz", + "integrity": "sha512-K90P5gUXM/w+yzLvJIRQ+tJooNU6ipUPPQkljtPJ0laR66TGtpt4Gqsjm0n9dPHK1W5KGgU1R5wnCd6RTSlPNA==", + "dev": true + }, + "@devicefarmer/adbkit-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@devicefarmer/adbkit-monkey/-/adbkit-monkey-1.0.1.tgz", + "integrity": "sha512-HilPrVrCosYWqSyjfpDtaaN1kJwdlBpS+IAflP3z+e7nsEgk3JGJf1Vg0NgHJooTf5HDfXSyZqMVg+5jvXCK0g==", + "dev": true, + "requires": { + "async": "~0.2.9" + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "14.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz", + "integrity": "sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==", + "dev": true + }, + "JSONSelect": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.2.1.tgz", + "integrity": "sha1-QVQYpSbTP+MddLTe+jyDbUhewgM=", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "addons-linter": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/addons-linter/-/addons-linter-2.7.0.tgz", + "integrity": "sha512-kH+0fAKSc461PnCyYQ0/SeKcxEQ2zxCZwG2GB6xjvfkMiMAwwic87VP62Cffc8H/zHEfYuT8uFmy42ayH5mqEQ==", + "dev": true, + "requires": { + "@babel/runtime": "7.11.2", + "ajv": "6.12.5", + "ajv-merge-patch": "4.1.0", + "chalk": "4.1.0", + "cheerio": "1.0.0-rc.3", + "columnify": "1.5.4", + "common-tags": "1.8.0", + "deepmerge": "4.2.2", + "dispensary": "0.57.0", + "es6-promisify": "6.1.1", + "eslint": "7.9.0", + "eslint-plugin-no-unsanitized": "3.1.2", + "eslint-visitor-keys": "2.0.0", + "espree": "7.3.0", + "esprima": "4.0.1", + "first-chunk-stream": "4.0.0", + "fluent-syntax": "0.13.0", + "fsevents": "2.1.3", + "glob": "7.1.6", + "is-mergeable-object": "1.1.1", + "jed": "1.1.1", + "mdn-browser-compat-data": "1.0.39", + "os-locale": "5.0.0", + "pino": "6.6.1", + "postcss": "7.0.35", + "probe-image-size": "5.0.0", + "relaxed-json": "1.0.3", + "semver": "7.3.2", + "source-map-support": "0.5.19", + "strip-bom-stream": "4.0.0", + "tosource": "1.0.0", + "upath": "1.2.0", + "whatwg-url": "8.2.2", + "yargs": "15.4.1", + "yauzl": "2.10.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "eslint": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.9.0.tgz", + "integrity": "sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + } + } + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-merge-patch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ajv-merge-patch/-/ajv-merge-patch-4.1.0.tgz", + "integrity": "sha512-0mAYXMSauA8RZ7r+B4+EAOYcZEcO9OK5EiQCR7W7Cv4E44pJj56ZnkKLJ9/PAcOc0dT+LlV9fdDcq2TxVJfOYw==", + "dev": true, + "requires": { + "fast-json-patch": "^2.0.6", + "json-merge-patch": "^0.2.3" + } + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archiver": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.0.2.tgz", + "integrity": "sha512-Tq3yV/T4wxBsD2Wign8W9VQKhaUxzzRmjEiSoOK0SLqPgDP/N1TKdYyBeIEu56T4I9iO4fKTTR0mN9NWkBA0sg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.1.4", + "zip-stream": "^4.0.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true + }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true, + "optional": true + }, + "bl": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", + "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, + "bluebird": { + "version": "2.9.34", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.34.tgz", + "integrity": "sha1-L3tOyAIWMoqf3evfacjUlC/v99g=", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "bunyan": { + "version": "1.8.14", + "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.14.tgz", + "integrity": "sha512-LlahJUxXzZLuw/hetUQJmRgZ1LF6+cr5TPpRj6jf327AsiIq2jhYEH4oqUUkVKTor+9w2BT3oxVwhzE5lw9tcg==", + "dev": true, + "requires": { + "dtrace-provider": "~0.8", + "moment": "^2.19.3", + "mv": "~2", + "safe-json-stringify": "~1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "camelcase": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.0.0.tgz", + "integrity": "sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "cheerio": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", + "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.1", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + } + }, + "chokidar": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "chrome-launcher": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.13.4.tgz", + "integrity": "sha512-nnzXiDbGKjDSK6t2I+35OAPBy5Pw/39bgkb/ZAFwMhwJbdYBp6aH+vW28ZgtjdU890Q7D+3wN/tB8N66q5Gi2A==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "colors": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", + "dev": true + }, + "columnify": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", + "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", + "dev": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true + }, + "compress-commons": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.0.1.tgz", + "integrity": "sha512-xZm9o6iikekkI0GnXCmAl3LQGZj5TBDj0zLowsqi7tJtEa3FMGSEcHcqrSJIrOAk1UG/NBbDn/F1q+MG/p/EsA==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc32-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.0.tgz", + "integrity": "sha512-tyMw2IeUX6t9jhgXI6um0eKfWq4EIDpfv5m7GX4Jzp7eVelQ360xd8EPXJhp2mHwLQIkqlnMLjzqSZI3a+0wRw==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debounce": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", + "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "deepcopy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deepcopy/-/deepcopy-2.1.0.tgz", + "integrity": "sha512-8cZeTb1ZKC3bdSCP6XOM1IsTczIO73fdqtwa2B0N15eAz7gmyhQo+mc5gnFuulsgN3vIQYmTgbmQVKalH1dKvQ==", + "dev": true, + "requires": { + "type-detect": "^4.0.8" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "dispensary": { + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/dispensary/-/dispensary-0.57.0.tgz", + "integrity": "sha512-vgRaZa9Ok8QdrAVtx+s6heBgI1RGT+Y6VA336oPWYADZZz83K+5NOTpLamEKRyJdRY5pYLaWhV2Js7bau1JyKg==", + "dev": true, + "requires": { + "async": "~3.2.0", + "natural-compare-lite": "~1.4.0", + "pino": "~6.6.0", + "request": "~2.88.0", + "sha.js": "~2.4.4", + "source-map-support": "~0.5.4", + "yargs": "~15.4.0" + }, + "dependencies": { + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dtrace-provider": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", + "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.14.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "es6-promise": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-2.3.0.tgz", + "integrity": "sha1-lu258v2wGZWCKyY92KratnSBgbw=", + "dev": true + }, + "es6-promisify": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.1.1.tgz", + "integrity": "sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "eslint": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.10.0.tgz", + "integrity": "sha512-HpqzC+BHULKlnPwWae9MaVZ5AXJKpkxCVXQHrFaRw3hbDj26V/9ArYM4Rr/SQ8pi6qUPLXSSXC4RBJlyq2Z2OQ==", + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.0.2", + "text-table": "^0.2.0" + }, + "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" + }, + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", + "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "espree": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.0.tgz", + "integrity": "sha512-1MpUfwsdS9MMoN7ZXqAr9e9UKdVHDcvrJpyx7mm1WuQlx/ygErEQBzgi5Nh5qBHIoYweprhtMkTCb9GhcAIcsA==", + "requires": { + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + } + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "^4.0.0" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "globals": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", + "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "inquirer": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "strip-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", + "requires": { + "ansi-regex": "^4.0.0" + } + } + } + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + } + } + }, + "eslint-plugin-no-unsanitized": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.1.2.tgz", + "integrity": "sha512-KPShfliA3Uy9qqwQx35P1fwIOeJjZkb0FbMMUFztRYRposzaynsM8JCEb952fqkidROl1kpqY80uSvn+TcWkQQ==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "requires": { + "estraverse": "^4.1.0", + "object-assign": "^4.0.1" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "event-to-promise": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/event-to-promise/-/event-to-promise-0.8.0.tgz", + "integrity": "sha1-S4TxF3K28l93Uvx02XFTGsb1tiY=", + "dev": true + }, + "execa": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz", + "integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-patch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-2.2.1.tgz", + "integrity": "sha512-4j5uBaTnsYAV5ebkidvxiLUYOwjQ+JSFljeqfTxCrH9bDmlCQaOJFS84oDJ2rAXZq2yskmk3ORfoP9DCwqFNig==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fast-redact": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-2.1.0.tgz", + "integrity": "sha512-0LkHpTLyadJavq9sRzzyqIoMZemWli77K2/MGOkafrR64B9ItrvZ9aT+jluvNDsv0YEHjSNhlMBtbokuoqii4A==", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "firefox-profile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-4.0.0.tgz", + "integrity": "sha512-Vw31AsjfLDbcApMDwwnhZcz3tWjV6lxB9BNf84FaV44rZXtU87cVbFMBzPEtrJdUDbwPYiuYzprp6yksYGwjSw==", + "dev": true, + "requires": { + "adm-zip": "~0.4.x", + "archiver": "~5.0.2", + "async": "~2.5.0", + "fs-extra": "~4.0.2", + "ini": "~1.3.3", + "jetpack-id": "1.0.0", + "lazystream": "~1.0.0", + "lodash": "~4.17.2", + "minimist": "^1.1.1", + "uuid": "^3.0.0", + "xml2js": "~0.4.4" + }, + "dependencies": { + "async": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "dev": true, + "requires": { + "lodash": "^4.14.0" + } + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } + } + }, + "first-chunk-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-4.0.0.tgz", + "integrity": "sha512-8TOz/mJp7+zc2HN63vnJHotwceq4gQI1+/gdJVnJcG4dEB96oUxw7wV9We4QKjSFWUc/V0ADDfaGba5cDoG6EA==", + "dev": true + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", + "dev": true + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "fluent-syntax": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/fluent-syntax/-/fluent-syntax-0.13.0.tgz", + "integrity": "sha512-0Bk1AsliuYB550zr4JV9AYhsETsD3ELXUQzdXGJfIc1Ni/ukAfBdQInDhVMYJUaT2QxoamNslwkYF7MlOrPUwg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formatio": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", + "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", + "dev": true, + "requires": { + "samsam": "1.x" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz", + "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^1.0.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "jsonfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz", + "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^1.0.0" + } + }, + "universalify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", + "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "fx-runner": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/fx-runner/-/fx-runner-1.0.13.tgz", + "integrity": "sha512-Ces2bm+LNuXehkvmN1/Z+oEDkI/jHBp9xdyBtBy7hcgvF18/pv/D8F6A6kQgNkMZsnBgLEv+VvdDxyqkfkYycw==", + "dev": true, + "requires": { + "commander": "2.9.0", + "shell-quote": "1.6.1", + "spawn-sync": "1.0.15", + "when": "3.7.7", + "which": "1.2.4", + "winreg": "0.0.12" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "isexe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", + "dev": true + }, + "which": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/which/-/which-1.2.4.tgz", + "integrity": "sha1-FVf5YIBgTlsRs1meufRbUKnv1yI=", + "dev": true, + "requires": { + "is-absolute": "^0.1.7", + "isexe": "^1.1.1" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dev": true, + "requires": { + "ini": "^1.3.5" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "dependencies": { + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + } + } + }, + "is-mergeable-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-mergeable-object/-/is-mergeable-object-1.1.1.tgz", + "integrity": "sha512-CPduJfuGg8h8vW74WOxHtHmtQutyQBzR+3MjQ6iDHIYdbOnm1YC7jv43SqCoU8OPGTJD4nibmiryA4kmogbGrA==", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jed": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jed/-/jed-1.1.1.tgz", + "integrity": "sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=", + "dev": true + }, + "jetpack-id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jetpack-id/-/jetpack-id-1.0.0.tgz", + "integrity": "sha1-LPn7rkbYB0/Ba33gBxyO/rykc6Y=", + "dev": true + }, + "jquery": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==", + "dev": true + }, + "jquery-smooth-scroll": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jquery-smooth-scroll/-/jquery-smooth-scroll-2.2.0.tgz", + "integrity": "sha1-h9wa3YQWi39Gazza7rgcgD/SKio=", + "dev": true, + "requires": { + "jquery": ">=1.7.0" + } + }, + "jquery-ui": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", + "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=", + "dev": true + }, + "jquery-ui-iconfont": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/jquery-ui-iconfont/-/jquery-ui-iconfont-2.3.2.tgz", + "integrity": "sha1-WwhjzM6U281q3qJCdgWZjdaNNJY=", + "dev": true + }, + "js-reporters": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/js-reporters/-/js-reporters-1.2.1.tgz", + "integrity": "sha1-+IxgjjJKM3OpW8xFrTBeXJecRZs=", + "dev": true + }, + "js-select": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-select/-/js-select-0.6.0.tgz", + "integrity": "sha1-woTiKCTVknrsli3N8kcXSu+w0ZA=", + "dev": true, + "requires": { + "JSONSelect": "0.2.1", + "traverse": "0.4.x" + } + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-merge-patch": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-merge-patch/-/json-merge-patch-0.2.3.tgz", + "integrity": "sha1-+ixrWvh9p3uuKWalidUuI+2B/kA=", + "dev": true, + "requires": { + "deep-equal": "^1.0.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.6.1.tgz", + "integrity": "sha1-uI86ey5noqBIFSmCx6N1bZxIKPA=", + "dev": true, + "requires": { + "pako": "~1.0.2" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dev": true, + "requires": { + "invert-kv": "^3.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lighthouse-logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.2.0.tgz", + "integrity": "sha512-wzUvdIeJZhRsG6gpZfmSCfysaxNEr43i+QT+Hie94wvHDKFLi4n7C2GqZ4sTC+PH5b5iktmXJvU87rWvhP3lHw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "marky": "^1.2.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lolex": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "marky": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.1.tgz", + "integrity": "sha512-md9k+Gxa3qLH6sUKpeC2CNkJK/Ld+bEz5X96nYwloqphQE0CKCVEKco/6jxEZixinqNdz5RFi/KaCyfbMDMAXQ==", + "dev": true + }, + "mdn-browser-compat-data": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/mdn-browser-compat-data/-/mdn-browser-compat-data-1.0.39.tgz", + "integrity": "sha512-1U5Lt+pjYxJ1mosBIdK5fr3guzV4v81f8yy0rLAj/cu7ki3ciCe85LVJJ0RLK0lP6VwFtjpXSOESfwAEpz0FyQ==", + "dev": true, + "requires": { + "extend": "3.0.2" + } + }, + "mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", + "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.0.tgz", + "integrity": "sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA==", + "dev": true, + "optional": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + } + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "dev": true, + "optional": true, + "requires": { + "glob": "^6.0.1" + } + } + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "native-promise-only": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz", + "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=", + "dev": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "dev": true, + "optional": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-notifier": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz", + "integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", + "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-watch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.6.0.tgz", + "integrity": "sha512-XAgTL05z75ptd7JSVejH1a2Dm1zmXYhuDr9l230Qk6Z7/7GPcnAs/UyJJ4ggsXSvWil8iOzwQLW0zuGUvHpG8g==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true + }, + "object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "dev": true, + "requires": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + } + }, + "os-shim": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", + "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parse-json": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pino": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.6.1.tgz", + "integrity": "sha512-DOgm7rn6ctBkBYemHXSLj7+j3o3U1q1FWBXbHcprur8mA93QcJSycEkEqhqKiFB9Mx/3Qld2FGr6+9yfQza0kA==", + "dev": true, + "requires": { + "fast-redact": "^2.0.0", + "fast-safe-stringify": "^2.0.7", + "flatstr": "^1.0.12", + "pino-std-serializers": "^2.4.2", + "quick-format-unescaped": "^4.0.1", + "sonic-boom": "^1.0.2" + } + }, + "pino-std-serializers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz", + "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg==", + "dev": true + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "probe-image-size": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/probe-image-size/-/probe-image-size-5.0.0.tgz", + "integrity": "sha512-V6uBYw5eBc5UVIE7MUZD6Nxg0RYuGDWLDenEn0B1WC6PcTvn1xdQ6HLDDuznefsiExC6rNrCz7mFRBo0f3Xekg==", + "dev": true, + "requires": { + "deepmerge": "^4.0.0", + "inherits": "^2.0.3", + "next-tick": "^1.0.0", + "request": "^2.83.0", + "stream-parser": "~0.3.1" + } + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "quick-format-unescaped": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz", + "integrity": "sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A==", + "dev": true + }, + "qunit": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.9.2.tgz", + "integrity": "sha512-wTOYHnioWHcx5wa85Wl15IE7D6zTZe2CQlsodS14yj7s2FZ3MviRnQluspBZsueIDEO7doiuzKlv05yfky1R7w==", + "dev": true, + "requires": { + "commander": "2.12.2", + "js-reporters": "1.2.1", + "minimatch": "3.0.4", + "node-watch": "0.6.0", + "resolve": "1.9.0" + }, + "dependencies": { + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + }, + "resolve": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz", + "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdir-glob": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.0.tgz", + "integrity": "sha512-KgT0oXPIDQRRRYFf+06AUaodICTep2Q5635BORLzTEzp7rEqcR14a47j3Vzm3ix7FeI1lp8mYyG7r8lTB06Pyg==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "relaxed-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/relaxed-json/-/relaxed-json-1.0.3.tgz", + "integrity": "sha512-b7wGPo7o2KE/g7SqkJDDbav6zmrEeP4TK2VpITU72J/M949TLe/23y/ZHJo+pskcGM52xIfFoT9hydwmgr1AEg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "commander": "^2.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "optional": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-json-stringify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", + "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", + "dev": true, + "optional": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "select2": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.11.tgz", + "integrity": "sha512-8Z/yd43F5EMOkz2Mo+aE7nOx2i8nSuxGZVFkbeyCklkU+WTwCa+xdZqG+IPgZ75lkEkLD+X+f8vEG9aKBxISqA==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "sign-addon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sign-addon/-/sign-addon-3.1.0.tgz", + "integrity": "sha512-zZ7nKc5/3QWM3skYBosGDvYQf2jkKhW2u8BELrZoN1wgCSOnwsV9T47Vx9uaNbA3CyZ+V9XSA0tDVHoV1QfVPw==", + "dev": true, + "requires": { + "common-tags": "1.8.0", + "core-js": "3.6.5", + "deepcopy": "2.1.0", + "es6-error": "4.1.1", + "es6-promisify": "6.1.1", + "jsonwebtoken": "8.5.1", + "mz": "2.7.0", + "request": "2.88.2", + "source-map-support": "0.5.19", + "stream-to-promise": "3.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + } + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sinon": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.0.0.tgz", + "integrity": "sha1-SDN/pIkGnlMK1+L0TwewrpPTeyQ=", + "dev": true, + "requires": { + "diff": "^3.1.0", + "formatio": "1.2.0", + "lolex": "^1.6.0", + "native-promise-only": "^0.8.1", + "path-to-regexp": "^1.7.0", + "samsam": "^1.1.3", + "text-encoding": "0.6.4", + "type-detect": "^4.0.0" + } + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sonic-boom": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.3.0.tgz", + "integrity": "sha512-4nX6OYvOYr6R76xfQKi6cZpTO3YSWe/vd+QdIfoH0lBy0MnPkeAbb2rRWgmgADkXUeCKPwO1FZAKlAVWAadELw==", + "dev": true, + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "spawn-sync": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", + "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", + "dev": true, + "requires": { + "concat-stream": "^1.4.7", + "os-shim": "^0.1.2" + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dev": true, + "requires": { + "debug": "2" + } + }, + "stream-to-array": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M=", + "dev": true, + "requires": { + "any-promise": "^1.1.0" + } + }, + "stream-to-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-to-promise/-/stream-to-promise-3.0.0.tgz", + "integrity": "sha512-h+7wLeFiYegOdgTfTxjRsrT7/Op7grnKEIHWgaO1RTHwcwk7xRreMr3S8XpDfDMesSxzgM2V4CxNCFAGo6ssnA==", + "dev": true, + "requires": { + "any-promise": "~1.3.0", + "end-of-stream": "~1.4.1", + "stream-to-array": "~2.3.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + } + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-bom-buf": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz", + "integrity": "sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ==", + "dev": true, + "requires": { + "is-utf8": "^0.2.1" + } + }, + "strip-bom-stream": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-4.0.0.tgz", + "integrity": "sha512-0ApK3iAkHv6WbgLICw/J4nhwHeDZsBxIIsOD+gHgZICL6SeJ0S9f/WZqemka9cjkTyMN5geId6e8U5WGFAn3cQ==", + "dev": true, + "requires": { + "first-chunk-stream": "^3.0.0", + "strip-bom-buf": "^2.0.0" + }, + "dependencies": { + "first-chunk-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-3.0.0.tgz", + "integrity": "sha512-LNRvR4hr/S8cXXkIY5pTgVP7L3tq6LlYWcg9nWBuW7o1NMxKZo6oOVa/6GIekMGI0Iw7uC+HWimMe9u/VAeKqw==", + "dev": true + } + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + } + } + }, + "table": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/table/-/table-5.1.1.tgz", + "integrity": "sha512-NUjapYb/qd4PeFW03HnAuOJ7OMcBkJlqeClWxeNlQ0lXGSb52oZXGzkO0/I0ARegQ2eUT1g2VDJH0eUxDRcHmw==", + "requires": { + "ajv": "^6.6.1", + "lodash": "^4.17.11", + "slice-ansi": "2.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "slice-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.0.0.tgz", + "integrity": "sha512-4j2WTWjp3GsZ+AOagyzVbzp4vWGtZ0hEZ/gDY/uTvm6MTxUfTUIsnMIFb1bn8o0RuXiqUw15H1bue8f22Vw2oQ==", + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + } + } + }, + "tar-stream": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", + "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==", + "dev": true + }, + "text-encoding": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", + "dev": true + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tooltipster": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/tooltipster/-/tooltipster-4.2.6.tgz", + "integrity": "sha1-+/ej9bQL2D6BV04o2WZ8+CZnvHk=", + "dev": true + }, + "tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha1-QtiN0RZhi88A1hBt1URvNCeQL/E=", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "traverse": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.4.6.tgz", + "integrity": "sha1-0EsigOTHkqWBVCnve4tgxkyczDQ=", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-notifier": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz", + "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver": "^7.3.2", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "web-ext": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/web-ext/-/web-ext-5.2.0.tgz", + "integrity": "sha512-o/s206JW2U/vXHTe/XeBnsUQhIcuphsSVNVrJU+MoMFq8JlU9vI1VdS2RCW+u5NuqAsMvTyV+pA+4hLGB9CGCw==", + "dev": true, + "requires": { + "@babel/polyfill": "7.11.5", + "@babel/runtime": "7.11.2", + "@cliqz-oss/firefox-client": "0.3.1", + "@cliqz-oss/node-firefox-connect": "1.2.1", + "@devicefarmer/adbkit": "2.11.3", + "addons-linter": "2.7.0", + "bunyan": "1.8.14", + "camelcase": "6.0.0", + "chrome-launcher": "0.13.4", + "debounce": "1.2.0", + "decamelize": "4.0.0", + "es6-error": "4.1.1", + "event-to-promise": "0.8.0", + "firefox-profile": "4.0.0", + "fs-extra": "9.0.1", + "fx-runner": "1.0.13", + "import-fresh": "3.2.1", + "mkdirp": "1.0.4", + "multimatch": "4.0.0", + "mz": "2.7.0", + "node-notifier": "8.0.0", + "open": "7.3.0", + "parse-json": "5.0.1", + "sign-addon": "3.1.0", + "source-map-support": "0.5.19", + "strip-bom": "4.0.0", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1", + "update-notifier": "5.0.0", + "watchpack": "1.7.4", + "ws": "7.3.1", + "yargs": "15.4.1", + "zip-dir": "1.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + } + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-PcVnO6NiewhkmzV0qn7A+UZ9Xx4maNTI+O+TShmfE4pqjoCMwUMjkvoNhNHPTvgR7QH9Xt3R13iHuWy2sToFxQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + } + }, + "when": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", + "integrity": "sha1-q6A/w7tzbWyIsJHQE9io5ZDYRxg=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "winreg": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", + "integrity": "sha1-BxBVVLoanQiXklHRKUdb/64wBrc=", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz", + "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==", + "dev": true + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "zip-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/zip-dir/-/zip-dir-1.0.2.tgz", + "integrity": "sha1-JT+QeurWKiGs2HIdi4gDKyQRwFE=", + "dev": true, + "requires": { + "async": "^1.5.2", + "jszip": "^2.4.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "zip-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.0.2.tgz", + "integrity": "sha512-TGxB2g+1ur6MHkvM644DuZr8Uzyz0k0OYWtS3YlpfWBEmK4woaC2t3+pozEL3dBfIPmpgmClR5B2QRcMgGt22g==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.0.0", + "readable-stream": "^3.6.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..509957c --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "privacy-badger-dev-tools", + "version": "0.0.1", + "description": "Developer tools for Privacy Badger.", + "dependencies": { + "eslint": "~5.10.0" + }, + "devDependencies": { + "jquery": "3.5.1", + "jquery-smooth-scroll": "2.2.0", + "jquery-ui": "1.12.1", + "jquery-ui-iconfont": "2.3.2", + "punycode": "1.4.1", + "qunit": "2.9.2", + "select2": "4.0.11", + "sinon": "2.0.0", + "tooltipster": "4.2.6", + "underscore": "1.9.1", + "web-ext": "~5.2.0" + }, + "private": true +} diff --git a/release-utils/chromium-release.sh b/release-utils/chromium-release.sh new file mode 100755 index 0000000..491d172 --- /dev/null +++ b/release-utils/chromium-release.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ $# -ne 3 ]; then + echo "$0 TAG KEY DESTINATION" + exit +fi + +SUBDIR=checkout +[ -d $SUBDIR ] && rm -rf $SUBDIR +mkdir $SUBDIR +cp -r -f -a .git $SUBDIR +cd $SUBDIR +git reset --hard "$1" + +# clean up +# TODO duplicated in make-eff-zip.sh +rm -rf src/tests # remove unit tests +rm src/data/dnt-policy.txt # only used by unit tests +cp LICENSE src/ # include LICENSE in build + +echo "Building chrome version" "$1" + +chromium --pack-extension="src/" --pack-extension-key="$2" +cd - +mv checkout/src.crx "$3" +rm -rf checkout diff --git a/release-utils/firefox-release.sh b/release-utils/firefox-release.sh new file mode 100755 index 0000000..0242c6d --- /dev/null +++ b/release-utils/firefox-release.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +set -e +cd "$(dirname "$0")" + +PKGDIR=../pkg + +# To make an Privacy Badger firefox release, signed with an offline key + +# 1. get the repo into a sane state for a release +# 2. ensure that doc/Changelog approximately describes this release +# 3. tag the release with "git tag -s " +# 4. run this script with as the argument + + +if [ $# -ne 1 ] ; then + echo "Usage: $0 " + exit 1 +fi +TARGET=$1 + + +if ! git show release-"$TARGET" > /dev/null 2> /dev/null ; then + echo "$TARGET is not a valid git target" + exit 1 +fi + +PKG=$PKGDIR/privacy-badger-eff-$TARGET.xpi +ALT=$PKGDIR/privacy-badger-eff-latest.xpi + +if ! ./make-signed-xpi.sh "$TARGET" ; then + echo "Failed to build target $TARGET XPI" + exit 1 +fi + +if ! [ -f "$PKG" ] ; then + echo "Failed to find package $PKG after build" + exit 1 +fi + +# XXX: Why make a gpg detached sig? +echo "Making (secondary) GPG signature" +gpg --detach-sign "$PKG" + +cp "$PKG" "$ALT" diff --git a/release-utils/make-eff-zip.sh b/release-utils/make-eff-zip.sh new file mode 100755 index 0000000..e06be24 --- /dev/null +++ b/release-utils/make-eff-zip.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# make a release zip of Privacy Badger for opera and firefox +# chrome releases happen in chromium-release.sh + +# this script takes a mandatory argument which is the git tag to build + +if [ -n "$1" ]; then + SUBDIR=checkout + [ -d $SUBDIR ] && rm -rf $SUBDIR + mkdir $SUBDIR + cp -r -f -a .git $SUBDIR + cd $SUBDIR + git reset --hard "$1" + + # clean up + # TODO duplicated in chromium-release.sh + rm -rf src/tests # remove unit tests + rm src/data/dnt-policy.txt # only used by unit tests + cp LICENSE src/ # include LICENSE in build + +else + echo "Please supply a tag name for the release you are zipping" + exit 1 +fi + + +echo "Building zip version" "$1" + +(cd src && zip -q -r ../privacy_badger-"$TARGET".zip .) +mv privacy_badger*.zip ../pkg/ +cd - diff --git a/release-utils/make-release-zip.sh b/release-utils/make-release-zip.sh new file mode 100755 index 0000000..8010b1f --- /dev/null +++ b/release-utils/make-release-zip.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# We use the immutable filesystem attribute as a workaround for the fact that +# the build scripts are not currently idempotent. + +# The fact that the package is marked immutable means that it has been built +# for release. + +if ! lsattr "$PREPKG" | cut -f 1 -d" " | grep -q i ; then + + if [ -f "$PREPKG" ] ; then + echo "$PREPKG" is not immutable, rebuilding it for release! + else + echo building "$PREPKG" for the first time... + fi + + if ! release-utils/make-eff-zip.sh "$GITTAG" ; then + echo "Failed to build target $GITTAG" + exit 1 + fi + + if ! [ -f "$PREPKG" -a -f "$PREPKGCWS" ] ; then + echo "Failed to find package $PREPKG after build" + exit 1 + fi + + # Verification and testing of build goes here! + + echo Marking "$PREPKG" immutable... + if ! sudo true ; then + echo "Failed to sudo :(" + exit 1 + fi + if ! sudo chattr +i "$PREPKG" "$PREPKGCWS"; then + echo "" + echo "WARNING: FAILED TO MARK $PREPKG or $PREPKGCWS IMMUTABLE." + echo "DO NOT RERUN THIS SCRIPT AFTER SIGNING" + echo "" + read -p "(Press Enter to acknowledge)" + fi +else + echo "$PREPKG is immutable; good, not rebuilding it..." +fi diff --git a/release-utils/make-release.sh b/release-utils/make-release.sh new file mode 100755 index 0000000..4cda497 --- /dev/null +++ b/release-utils/make-release.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# To make a privacy badger release see wiki + +if [ $# -ne 1 ] ; then + echo "Usage: $0 " + exit 1 +fi +export TARGET=$1 +export GITTAG + +if ! [ -f ./release-utils/config.sh ] ; then + echo "Missing config file. Cannot continue." + exit 1 +fi +source ./release-utils/config.sh + + +if echo "$TARGET" | grep -q release- ; then + GITTAG=$TARGET + TARGET=$(echo "$TARGET" | sed s/release-//) +else + GITTAG=release-$TARGET +fi + +if ! git show "$GITTAG" > /dev/null 2> /dev/null ; then + echo "$GITTAG is not a valid git target" + exit 1 +fi + +export PREPKG=pkg/privacy_badger-$TARGET.zip +export PREPKGCWS=pkg/privacy_badger-$TARGET.zip + + +echo "Making Opera zip" +if ! release-utils/make-release-zip.sh "$TARGET"; then + echo "Failed to build target $TARGET for Opera" + exit 1 +fi + +echo "Making Firefox release" +if ! release-utils/firefox-release.sh "$TARGET"; then + echo "Failed to build target $TARGET for Firefox" + exit 1 +fi + + +./release-utils/post-release.sh "$TARGET" + +rm -rf checkout diff --git a/release-utils/make-signed-xpi.sh b/release-utils/make-signed-xpi.sh new file mode 100755 index 0000000..cf3fe73 --- /dev/null +++ b/release-utils/make-signed-xpi.sh @@ -0,0 +1,65 @@ +#!/bin/sh + +set -e + +cd "$(dirname "$0")" + +LATEST_SDK_VERSION=5.2.0 +WEB_EXT=../node_modules/.bin/web-ext + +# Auto-generated XPI name from 'web-ext sign' +PRE_XPI_NAME=privacy_badger_by_eff-$TARGET-an+fx.xpi +XPI_NAME="privacy-badger-eff-$1.xpi" +AMO_ZIP_NAME="privacy_badger-$1.amo.zip" + +if ! type $WEB_EXT > /dev/null; then + echo "Please install web-ext before running this script." + exit 1 +fi + +if ! $WEB_EXT --version | grep -q "$LATEST_SDK_VERSION"; then + echo "Please use the latest stable web-ext version or edit this script to the current version." + exit 1 +fi + +if [ $# -ne 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +echo "changing author value" +sed -i -e '/eff.software.projects@gmail.com/,+1d' -e 's/"author": {/"author": "privacybadger-owner@eff.org",/' ../checkout/src/manifest.json + +echo "removing Chrome's update_url" +# remove update_url +sed -i -e '/"update_url": "https:\/\/clients2.google.com\/service\/update2\/crx"/,+0d' ../checkout/src/manifest.json +# fix the trailing comma +# TODO fragile! at least we validate the JSON below +# https://unix.stackexchange.com/a/26288 +# https://unix.stackexchange.com/a/26290 +sed -i -e '/"storage": {/{ + n + n + s/},/}/ +}' ../checkout/src/manifest.json + +# lint the checkout folder +$WEB_EXT lint -s ../checkout/src + +echo "making zip file for AMO" + +(cd ../checkout/src && rm -f ../../pkg/"$AMO_ZIP_NAME" && zip -q -r ../../pkg/"$AMO_ZIP_NAME" ./*) + +echo "insert self hosting package id" +# Insert self hosted package id +sed -i 's,"id": "jid1-MnnxcxisBPnSXQ@jetpack","id": "jid1-MnnxcxisBPnSXQ-eff@jetpack"\,\n "update_url": "https://www.eff.org/files/privacy-badger-updates.json",' ../checkout/src/manifest.json + +# lint checkout again as our modification above could have broken something +# disable AMO-specific checks to allow applications.gecko.update_url +$WEB_EXT lint -s ../checkout/src --self-hosted + +#"update_url": "https://www.eff.org/files/privacy-badger-updates.json" +# Build and sign the XPI +echo "Running web-ext sign" +$WEB_EXT sign -s ../checkout/src --api-key "$AMO_API_KEY" --api-secret "$AMO_API_SECRET" -a ../pkg +mv "../pkg/$PRE_XPI_NAME" "../pkg/$XPI_NAME" diff --git a/release-utils/post-chrome-release.sh b/release-utils/post-chrome-release.sh new file mode 100755 index 0000000..a751ef7 --- /dev/null +++ b/release-utils/post-chrome-release.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if ! [ -f ./release-utils/config.sh ] ; then + echo "Missing config file. Cannot continue." + exit 1 +fi +source ./release-utils/config.sh + +if [ $# -ne 1 ] ; then + echo "Usage: $0 " + exit 1 +fi +TARGET=$1 +if ! git show release-"$TARGET" > /dev/null 2> /dev/null ; then + echo "$TARGET is not a valid git target" + exit 1 +fi + +PKGDIR=pkg +CHROME_PKG=$PKGDIR/privacy_badger-"$TARGET".crx +if ! [ -f "$CHROME_PKG" ] ; then + mv $PKGDIR/privacy-badger-"$TARGET".crx "$CHROME_PKG" +fi +CHROME_ALT=$PKGDIR/privacy_badger-chrome.crx +echo "Uploading chrome package" +cp "$CHROME_PKG" "$CHROME_ALT" +echo Copying .crx files... +scp "$CHROME_PKG" "$USER@$SERVER:/www/eff.org/files" || exit 1 +scp "$CHROME_ALT" "$USER@$SERVER:/www/eff.org/files" || exit 1 diff --git a/release-utils/post-release.sh b/release-utils/post-release.sh new file mode 100755 index 0000000..4bfe00e --- /dev/null +++ b/release-utils/post-release.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +cd "$(dirname "$0")" +source ./config.sh +PKGDIR=../pkg +if [ $# -ne 1 ] ; then + echo "Usage: $0 " + exit 1 +fi +TARGET=$1 +if ! git show release-"$TARGET" > /dev/null 2> /dev/null ; then + echo "$TARGET is not a valid git target" + exit 1 +fi +PKG="$PKGDIR"/privacy-badger-eff-$TARGET.xpi +ALT="$PKGDIR"/privacy-badger-eff-latest.xpi + +echo Copying .xpi files... +scp "$PKG" "$USER@$SERVER:/www/eff.org/files" || exit 1 +scp "$ALT" "$USER@$SERVER:/www/eff.org/files" || exit 1 +echo Copying detached signature +scp "$PKG".sig "$USER@$SERVER:/www/eff.org/files" || exit 1 +echo Copying Changelog.txt +git show release-"$TARGET":doc/Changelog > /tmp/pbchangelog$$ || exit 1 +scp /tmp/pbchangelog$$ "$USER@$SERVER:/www/eff.org/files/pbChangelog.txt" || exit 1 +rm -f /tmp/changelog$$ + +MSG=/tmp/email$$ + +echo "Privacy Badger $TARGET has been released for all supported browsers." > $MSG +echo "As always, you can get it from https://privacybadger.org/ or from your browser's add-on gallery." >> $MSG +echo "" >> $MSG +echo "Notable updates:" >> $MSG +echo "" >> $MSG +tail -n+5 ../doc/Changelog | sed '/^$/q' >> $MSG +echo "For further details, consult our release notes on GitHub:" >> $MSG +echo "https://github.com/EFForg/privacybadger/releases/tag/release-$TARGET" >> $MSG + +echo To send email to the mailing list... +echo mutt -s "Privacy\ Badger\ version\ $TARGET\ released" privacybadger@eff.org '<' $MSG +echo "Now please edit https://www.eff.org/files/privacy-badger-updates.json to include the following" +echo "" +echo "{" +echo " \"version\": \"$TARGET\"," +echo " \"update_link\": \"https://eff.org/files/privacy-badger-eff-$TARGET.xpi\"," +echo " \"update_hash\": \"sha256:$(sha256sum "$PKG" | cut -c 1-64)\"," +echo " \"applications\": {" +echo " \"gecko\": { \"strict_min_version\": \"52.0\" }" +echo " }" +echo "}" + +echo "" +echo "AMO release notes:" +echo "" +echo "
    " +tail -n+5 ../doc/Changelog | sed '/^$/q' | { + out="" + while IFS= read -r line; do + # changelog entries start with "*" + if [ "${line:0:1}" = "*" ]; then + # this is the first entry + if [ -z "$out" ]; then + out="
  • ${line:2}" + else + out="$out
  • \n
  • ${line:2}" + fi + # changelog entry continues + else + if [ -n "$line" ]; then + out="$out $line" + fi + fi + done + echo -e "$out
  • " +} +echo "
" +echo "" diff --git a/scripts/chromedriver.sh b/scripts/chromedriver.sh new file mode 100755 index 0000000..3bd55d6 --- /dev/null +++ b/scripts/chromedriver.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# stop on errors (nonzero exit codes), uninitialized vars +set -eu + +TEMPFILE=$(mktemp) +CHROME="$1" + +trap 'rm $TEMPFILE' EXIT + +# install the appropriate version of ChromeDriver +chrome_version=$("$CHROME" --product-version | cut -d . -f 1-3) +chromedriver_version_url=https://chromedriver.storage.googleapis.com/LATEST_RELEASE_"$chrome_version" +chromedriver_version=$(wget "$chromedriver_version_url" -q -O -) +echo "Setting up ChromeDriver version $chromedriver_version ..." +chromedriver_url=https://chromedriver.storage.googleapis.com/"$chromedriver_version"/chromedriver_linux64.zip +wget -q -O "$TEMPFILE" "$chromedriver_url" +sudo unzip -q -o "$TEMPFILE" chromedriver -d /usr/local/bin/ +sudo chmod a+x /usr/local/bin/chromedriver + +# check that chromedriver is now present +type chromedriver >/dev/null 2>&1 || { + echo "Failed to install ChromeDriver!" + exit 1 +} diff --git a/scripts/convertpsl.py b/scripts/convertpsl.py new file mode 100755 index 0000000..3cd78be --- /dev/null +++ b/scripts/convertpsl.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python + +# script based on +# https://github.com/adblockplus/buildtools/blob/d090e00610a58cebc78478ae33e896e6b949fc12/publicSuffixListUpdater.py + +from __future__ import print_function + +import json +import sys + +def convert(psl_text): + suffixes = {} + + for line in psl_text: + line = line.rstrip() + if line.startswith('//') or '.' not in line: + continue + if line.startswith('*.'): + suffixes[line[2:]] = 2 + elif line.startswith('!'): + suffixes[line[1:]] = 0 + else: + suffixes[line] = 1 + + return suffixes + + +if __name__ == '__main__': + with open(sys.argv[1], 'r+') as f: + psl = convert(f) + f.seek(0) + text = 'window.publicSuffixes = %s;' % ( + json.dumps(psl, sort_keys=True, indent=2, separators=(',', ': ')) + ) + print(text, file=f) + f.truncate() diff --git a/scripts/fix_placeholders.py b/scripts/fix_placeholders.py new file mode 100755 index 0000000..e940dcc --- /dev/null +++ b/scripts/fix_placeholders.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +import json + +from collections import OrderedDict +from glob import glob + +SOURCE_LOCALE = 'src/_locales/en_US/messages.json' + + +def fix_locale(locale, placeholder_keys): + # read in locale, preserving existing ordering + with open(locale, 'r') as f: + data = json.load(f, object_pairs_hook=OrderedDict) + + # restore missing placeholders + for key in placeholder_keys: + if key in data and "placeholders" not in data[key]: + data[key]["placeholders"] = source_data[key]["placeholders"] + + with open(locale, 'w') as f: + json.dump(data, f, ensure_ascii=False, indent=4) + + +if __name__ == '__main__': + with open(SOURCE_LOCALE, 'r') as f: + source_data = json.load(f, object_pairs_hook=OrderedDict) + + # get keys of locale messages with placeholders + placeholder_keys = [] + for key in source_data: + if "placeholders" in source_data[key]: + placeholder_keys.append(key) + + # fix all locales + for locale in glob('src/_locales/*/*.json'): + if locale == SOURCE_LOCALE: + continue + + fix_locale(locale, placeholder_keys) diff --git a/scripts/generate-legacy-yellowlist.sh b/scripts/generate-legacy-yellowlist.sh new file mode 100755 index 0000000..b74712e --- /dev/null +++ b/scripts/generate-legacy-yellowlist.sh @@ -0,0 +1 @@ +sed -e "s/^\([^\!].*\)$/@@||\1^\$third-party/g" src/data/yellowlist.txt diff --git a/scripts/run_travis.sh b/scripts/run_travis.sh new file mode 100755 index 0000000..fa20fdb --- /dev/null +++ b/scripts/run_travis.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +toplevel=$(git rev-parse --show-toplevel) +testdir=${toplevel}/tests/selenium + +function run_lint { + if ! make -C "$toplevel" lint; then + echo "Linting errors" + exit 1 + fi +} + +function run_selenium { + # autodiscover and run the tests + pytest --capture=no --verbose --durations=10 "$testdir" +} + +if [ "$INFO" == "lint" ]; then + echo "running lint tests" + run_lint +else + case $BROWSER in + *chrome*) + echo "running tests on chrome" + run_selenium + ;; + *firefox*) + echo "running tests on firefox" + run_selenium + ;; + *) + echo "bad INFO variable, got $INFO" + exit 1 + ;; + esac +fi diff --git a/scripts/setup_travis.sh b/scripts/setup_travis.sh new file mode 100755 index 0000000..5e4bbf0 --- /dev/null +++ b/scripts/setup_travis.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +# stop on errors (nonzero exit codes), uninitialized vars +set -eu + +toplevel=$(git rev-parse --show-toplevel) + +function setup_firefox { + # Install the latest version of geckodriver + version=$(curl -sI https://github.com/mozilla/geckodriver/releases/latest | grep -i "^Location: " | sed 's/.*\///' | tr -d '\r') + + # check that we got something + if [ -z "$version" ]; then + echo "Failed to determine the latest geckodriver version!" + exit 1 + fi + + # Geckodriver distribution is MacOS or Linux specific + os="$(uname -s)" + if [[ $os == "Darwin" ]]; then + os_dist="macos.tar.gz" + else + os_dist="linux64.tar.gz" + fi + + echo "Setting up geckodriver version $version ..." + url="https://github.com/mozilla/geckodriver/releases/download/${version}/geckodriver-${version}-${os_dist}" + wget -q -O /tmp/geckodriver.tar.gz "$url" + sudo tar -xvf /tmp/geckodriver.tar.gz -C /usr/local/bin/ + sudo chmod a+x /usr/local/bin/geckodriver + + # check that geckodriver is now present + type geckodriver >/dev/null 2>&1 || { + echo "Failed to install geckodriver!" + exit 1 + } +} + +function browser_setup { + # install python stuff + pip install -r "$toplevel"/tests/requirements.txt +} + +function setup_lint { + # "--production" to skip installing devDependencies modules + npm install --production || exit 1 +} + +# check that the desired browser is present as it might fail to install +# for example: https://travis-ci.org/EFForg/privacybadger/jobs/362381214 +function check_browser { + type "$BROWSER" >/dev/null 2>&1 || { + echo "$BROWSER seems to be missing!" + exit 1 + } + + # print the version + echo "Found $("$BROWSER" --version)" +} + +case $INFO in + *chrome*) + check_browser + "$toplevel"/scripts/chromedriver.sh "$BROWSER" + browser_setup + ;; + *firefox*) # Install the latest version of geckodriver + check_browser + setup_firefox + browser_setup + ;; + *lint*) + setup_lint + ;; + *) + echo "bad INFO variable, got $INFO" + exit 1 + ;; +esac diff --git a/scripts/updategoogle.py b/scripts/updategoogle.py new file mode 100755 index 0000000..a3046d4 --- /dev/null +++ b/scripts/updategoogle.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 + +import json +import sys + +from collections import OrderedDict + +def convert(text): + patterns = [] + for domain in text.split(): + patterns.append("https://www" + domain + "/*") + patterns.append("http://www" + domain + "/*") + return patterns + +def update_manifest(tempfile_path, manifest_path): + with open(manifest_path, 'r') as f: + manifest = json.load(f, object_pairs_hook=OrderedDict) + + with open(tempfile_path, 'r+') as f: + # tempfile_path contains Google's supported domains + match_patterns = convert(f.read()) + + scripts_idx = -1 + for idx, entry in enumerate(manifest['content_scripts']): + if "js/firstparties/google-search.js" in entry['js']: + scripts_idx = idx + break + if scripts_idx == -1: + print("Failed to locate the Google Search content script in the manifest!") + sys.exit(1) + + manifest['content_scripts'][scripts_idx]['matches'] = match_patterns + + # overwrite tempfile_path with the updated manifest + f.seek(0) + # print() auto-adds a trailing newline + print( + json.dumps( + manifest, + sort_keys=False, + indent=2, + separators=(',', ': ') + ), + file=f + ) + f.truncate() + +if __name__ == '__main__': + # argv[1]: the path to a copy of https://www.google.com/supported_domains + # argv[2]: the path to the extension manifest + update_manifest(sys.argv[1], sys.argv[2]) diff --git a/scripts/updategoogle.sh b/scripts/updategoogle.sh new file mode 100755 index 0000000..d446861 --- /dev/null +++ b/scripts/updategoogle.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# stop on errors (nonzero exit codes), uninitialized vars +set -eu + +GOOGLE_DOMAINS_URL=https://www.google.com/supported_domains +MANIFEST_PATH=src/manifest.json +TEMPFILE=$(mktemp) + +trap 'rm $TEMPFILE' EXIT + +echo "fetching Google Search domains ..." +if wget -q -T 30 -O "$TEMPFILE" -- $GOOGLE_DOMAINS_URL && [ -s "$TEMPFILE" ]; then + ./scripts/updategoogle.py "$TEMPFILE" "$MANIFEST_PATH" + if cmp -s "$TEMPFILE" $MANIFEST_PATH; then + echo " no Google Search domain updates" + else + cp "$TEMPFILE" $MANIFEST_PATH + echo " updated Google Search domains in $MANIFEST_PATH" + echo " please verify, update Google's MDFP list, and commit both!" + exit 1 + fi +else + echo " failed to fetch $GOOGLE_DOMAINS_URL" + echo " aborting build!" + exit 1 +fi diff --git a/scripts/updatepsl.sh b/scripts/updatepsl.sh new file mode 100755 index 0000000..fa91741 --- /dev/null +++ b/scripts/updatepsl.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Update the Public Suffix List (psl) + +# stop on errors (nonzero exit codes), uninitialized vars +set -eu + +PSL_PATH=src/lib/publicSuffixList.js +PSL_URL=https://publicsuffix.org/list/public_suffix_list.dat +TEMPFILE=$(mktemp) + +trap 'rm $TEMPFILE' EXIT + +echo "fetching Public Suffix List ..." +if wget -q -T 30 -O "$TEMPFILE" -- $PSL_URL && [ -s "$TEMPFILE" ]; then + python scripts/convertpsl.py "$TEMPFILE" + if cmp -s "$TEMPFILE" $PSL_PATH; then + echo " no PSL updates" + else + cp "$TEMPFILE" $PSL_PATH + echo " updated PSL at $PSL_PATH" + echo " please verify and commit!" + exit 1 + fi +else + echo " failed to fetch PSL from $PSL_URL" + echo " aborting build!" + exit 1 +fi diff --git a/scripts/updateseeddata.sh b/scripts/updateseeddata.sh new file mode 100755 index 0000000..bb1d221 --- /dev/null +++ b/scripts/updateseeddata.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +# Update the pre-trained "seed" tracker list + +# stop on errors (nonzero exit codes), uninitialized vars +set -eu + +SEED_PATH=src/data/seed.json +SEED_URL=https://raw.githubusercontent.com/EFForg/badger-sett/master/results.json +TEMPFILE=$(mktemp) + +trap 'rm $TEMPFILE' EXIT + +echo "fetching seed tracker lists..." +if wget -q -T 30 -O "$TEMPFILE" -- $SEED_URL && [ -s "$TEMPFILE" ]; then + if ! python scripts/verify_json.py "$TEMPFILE"; then + echo " new seed data is not formatted correctly" + echo " aborting build!" + exit 1 + fi + + if cmp -s "$TEMPFILE" $SEED_PATH; then + echo " no seed data updates" + else + cp "$TEMPFILE" $SEED_PATH + echo " updated seed data at $SEED_PATH" + echo " please verify and commit!" + exit 1 + fi +else + echo " failed to fetch seed data from $SEED_URL" + echo " aborting build!" + exit 1 +fi diff --git a/scripts/verify_json.py b/scripts/verify_json.py new file mode 100644 index 0000000..e5a17ac --- /dev/null +++ b/scripts/verify_json.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +import json +import sys + +KEYS = set(['snitch_map', 'action_map', 'version']) + +with open(sys.argv[1]) as f: + try: + js = json.load(f) + if set(js.keys()) == KEYS: + sys.exit(0) + else: + print("json keys %s are not correct" % js.keys()) + sys.exit(1) + except Exception as e: + print("error parsing json:", e) + sys.exit(1) diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json new file mode 100644 index 0000000..4c424d3 --- /dev/null +++ b/src/_locales/ar/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ محجوب", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "ملف JSON غير سليم.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "أمتأكد أنك تريد إزالة النطاق من «غرير الخصوصية»", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "لا تَعقب للنطاق $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "حاليا «غرير الخصوصية» لا يتحقق إلا من كون الأطراف الخارجية تستخدم الكعكات، أو تخزين HTML5 المحلي، أو بصمات مساحة الرسم لتعقب تصفحك. ربما تستخدم بعض هذه النطاقات طرقًا أخرى لا يستطيع «غرير الخصوصية» اكتشافها.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "تحقق من كون نطاقات الأطراف الخارحية تلتزم سياسة EFF لعدم التعقب", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "رجاء أضف مسارا أو نطاقا صحيحا.", + "description": "" + }, + "donate_to_eff": { + "message": "تبرع إلى EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "ساعدنا بالتبرع ونشر دعمك لأدواتنا", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "لست حاجبًا للإعلانات، أنا مختلف", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "شكرا، سنفحص الأمر.", + "description": "" + }, + "dnt_tooltip": { + "message": "يعِد هذا النطاق بألا يتعقبك", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "القسم التالي", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "رجاء أخبرنا بتفاصيل العطل التالي:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "أدِر البيانات", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "أبلغ عن عطل", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "مثلا: www.domain.com، أو ‪*.domain.net‬، أو domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "انقر هنا لحجب هذا النطاق من إضافة كعكات", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "المحجوب", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "امنع WebRTC من تسريب عناوين الإنترنت المحلية", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "يتعلم «غرير الخصوصية» تلقائيا كيف يحجب المتعقبات الخفية. خذ دقيقة من وقتك لتعرف كيف يحدث هذا.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "ما المشكلة؟", + "description": "" + }, + "options_domain_list_tab": { + "message": "النطاقات المتعقِّبة", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "شارك على تويتر", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "تعرف كيف يحمي «غرير الخصوصية» خصوصيتك", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "نزّل", + "description": "" + }, + "import": { + "message": "استورد", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Don't replace the following widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Enable widget replacement", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Show domains that don't appear to be tracking you", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "أرسل العطل", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ غير محجوب", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "ما «غرير الخصوصية»؟", + "description": "" + }, + "options_domain_search": { + "message": "ابحث في النطاقات:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "تعلم في نوافذ التصفح الخاص", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "تفعيل التعلم في نوافذ التصفح الخاص قد يترك آثارا لتأريخ تصفحك الخاص على حاسوبك. مبدئيا سيحجب «غرير الخصوصية» المتعقبات التي يعرفها من قبل في نوافذ التصفح الخاص، لكنه لن يتعلم أي متعقبات جديدة. قد تريد تفعيل هذا الخيار إن كان الكثير من تصفحك في نوافذ خاصة.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Show count of trackers", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "ما المتعقب؟", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "رجاء لا تنس النقر على ”هل أفسد «غرير الخصوصية» هذا الموقع“. لأننا نحترم خصوصيتك لا نرسل أي بلاغات تلقائية.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "خيارات «غرير الخصوصية»", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "المواقع غير المفعلة", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "فعّل «غرير الخصوصية» على هذا الموقع", + "description": "" + }, + "options_domain_type_filter": { + "message": "رشّح بالنوع:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "حُدثت قائمة المتعقبات و إعداداتها بنجاح.", + "description": "" + }, + "export_user_data": { + "message": "صدّر بيانات المستخدم", + "description": "" + }, + "manage_data_intro": { + "message": "استيراد بيانات المستخدم:
  • يكتب فوق قيم الإعدادات العامة
  • يدمج قوائم المواقع غير المفعلة
  • يدمج معلومات المتعقبات التي رآها «غرير الخصوصية»
  • يكتب فوق إعدادات المواقع
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "أعِد إلى الأصل", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "أعِد النطاقات المتعقِّبة إلى أصلها", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "إعادة النطاقات المتعقِّبة إلى أصلها:\n\n • سيحذف كل البيانات التي تعلمها «غرير الخصوصية» عن هذه النطاقات أثناء تصفحك\n • سيعيد قائمة النطاقات المتعقِّبة إلى آخر قائمة قبل التعلم (زر www.eff.org/badger-pretraining لمزيد من المعلومات)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "أزل الكل", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "أزل كل النطاقات المتعقِّبة", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "إزالة كل النطاقات المتعقِّبة:\n\n • سيحذف كل ما يعرفه «غرير الخصوصية» عن المتعقبات\n • سيمنع «غرير الخصوصية» من حجب أي شيء إلى أن يعيد التعلم من تصفحك", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "يحميك «غرير الخصوصية» الآن.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "انقر أدناه لتطلع أكثر على كيف يعمل.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "يمكن أن يسرب WebRTC عنواوين الإنترنت (IP) المحلية. لاحظ أن تفعيل هذا الخيار قد يقلل من أداء برمجيات الاجتماعات على الوب مثل Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "الإعدادات العامة", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "خذ جولة", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "انقر هنا لحجب هذا النطاق تماما", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "إصدارة $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "الكعكات محجوبة من النطاق $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "المحجوب جزئيا", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "أفهم هذا؛ أرني رجاء قائمة المتعقبات", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "شكرا على تنصيب «غرير الخصوصية»", + "description": "" + }, + "import_select_file": { + "message": "رجاء اختر ملفا لاستيراده", + "description": "" + }, + "report_broken_site": { + "message": "هل أفسد «غرير الخصوصية» هذا الموقع؟ أعلمنا بهذا.", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "وسط المؤشر لحجب الكعكات", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "يمسك بالمتعقبات المتخفية", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "أغلق", + "description": "" + }, + "import_user_data": { + "message": "استورد بيانات المستخدم", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "متوافق مع ”لا تتعقبني“", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "مساعدة", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "المسموح به", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "الخصوصية رياضة جماعية", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "يفترض ألا تحتاج لتغيير أي شيء هنا.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "الكل", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "ألغ", + "description": "" + }, + "tooltip_block": { + "message": "حرك المؤشر شمالا لحجب النطاق", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "تحت تحكم المستخدم", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "مشروع من مؤسسة الجبهة الإلكترونية (Electronic Frontier Foundation)", + "description": "" + }, + "add_domain_button": { + "message": "أضف النطاق", + "description": "" + }, + "tooltip_allow": { + "message": "حرك المؤشر يمينا للسماح بالنطاق", + "description": "" + }, + "popup_disable_for_site": { + "message": "عطّل «غرير الخصوصية» على هذا الموقع", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "انقر هنا للسماح بهذا النطاق", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "لن يشارك «غرير الخصوصية» أبدا أي معلومات عن تصفحك إلا إن اخترت أن تشاركها.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "لم يكتشف «غرير الخصوصية» أي نطاقات متعقِّبة حتى الآن. واصل تصفحك.", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "«غرير الخصوصية»", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "يبدأ «غرير الخصوصية» في الحجب ما إن يرى نفس المتعقب على ثلاثة مواقع مختلفة. ثلاث فرص ثم يخرج!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "رشّح بالحالة:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "صف العطل باختصار أدناه.", + "description": "" + }, + "remove_button": { + "message": "أزل المحدد", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "باستخدامك «غرير الخصوصية» تنضم إلى مؤسسة الجبهة الإلكترونية و ملايين المستخدمين في قتالهم من أجل الخصوصية. نحن مؤسسة غير ربحية نقاتل لحقوقك على الإنترنت. شكرًا لانضمامك إلينا.", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "لاستبعاد النطاقات، ضع ”-“ قبل عبارة البحث. فمثلا، ”‪.co -.com‬“ ستظهر نطاقات ‪.co‬ و ‪.co.uk‬ لكن لن تظهر نطاقات ‪.com‬ في نتائج البحث.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "إذا كنت تظن أن «غرير الخصوصية» يفسد إحدى الصفحات (الفديو لا يعمل مثلا)، فيمكنك النقر على زر ’عطّل‘ لتعطيل «غرير الخصوصية» على هذا الموقع.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "سياسة الخصوصية", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "الوصف", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "لا يظهر أن النطاقات التالية تتعقبك", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "الخيارات", + "description": "" + }, + "share_button_title_facebook": { + "message": "شارك على فيسبوك", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "يتعلم «غرير الخصوصية» تلقائيا أن يحجب المتعقبات الخفية.", + "description": "" + }, + "report_fail": { + "message": "حدث عطل ما.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "استبدل «غرير الخصوصية» زر $BUTTON$ هذا", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Allow once", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Always allow on this site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "مزامنة السحاب:
  • تحتاج إلى مزامنة فيرفكس\\كروم
  • الرفع يكتب فوق أي بيانات ل‍«‍غرير الخصوصية» موجودة على السحاب.
  • التنزيل يدمج قائمة المواقع التي عطلت عليها «غرير الخصوصية»
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "ارفع", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "صدّر المواقع غير المفعلة إلى السحاب", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "استورد المواقع غير المفعلة من السحاب", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "تم استيراد البيانات من السحاب.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "تعذّر تنزيل البيانات.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "تم رفع البيانات.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "تعذّر رفع البيانات.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "لم تنزّل أي بيانات من السحاب.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "أخبر أصدقائك", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "شارك", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "«غرير الخصوصية» (www.eff.org/privacybadger) هو امتداد للمتصفح يتعلم تلقائيا أن يحجب المتعقبات الخفية. «غرير الخصوصية» من مؤسسة الجبهة الإلكترونية، و هي منظمة غير ربحية تقاتل لحقوقك على الإنترنت.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "انسخ إلى الحافظة", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "نُسِخ", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nothing to do on this page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger doesn't work on special pages like this one. Try browsing somewhere else.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Replacement", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "When blocking social buttons and other potentially useful (video, audio, comments) widgets, Privacy Badger can replace them with click-to-activate placeholders.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/bg/messages.json b/src/_locales/bg/messages.json new file mode 100644 index 0000000..b7edfd0 --- /dev/null +++ b/src/_locales/bg/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Блокирах $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Невалиден JSON файл.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Сигурен ли си, че искаш да премахнеш този домейн от Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Няма преследвачи в $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Засега Privacy Badger проверява само дали трети страни ползват бисквитки, локалната памет на HTML5, или canvas fingerprinting, за да те следят. Някои от тези домейни може би използват други начини за следене, които Privacy Badger не може да засече.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Проверявай дали домейните от трети страни се съобразяват с Do Not Track (Не ме следи) политиката на EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Моля добави валиден домейн или URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Подкрепи EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Помогни ни с дарение или като споделиш подкрепата си за инструментите ни", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Не съм блокирач на реклами. Аз съм малко по-различен", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Мерси! Ще разнищим проблема.", + "description": "" + }, + "dnt_tooltip": { + "message": "Този домейн обещава да не те следи", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "следваща част", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Моля те кажи ни за следната грешка:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Управление на данни", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Докладвай за грешка", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "например www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Щракни тук, за да забраниш на този домейн да оставя бисквитки", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "блокирани", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Спри изтичането на локалния ти IP адрес през WebRTC", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger автоматично се научава да блокира невидими преследвачи. Отдели си минутка, за да видиш как.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Какво не е наред?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Домейни-преследвачи", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Сподели в Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Научи как Privacy Badger защитава личното ти пространство и поверителност", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Дръпни", + "description": "" + }, + "import": { + "message": "Импортирай", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Don't replace the following widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Enable widget replacement", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Show domains that don't appear to be tracking you", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Изпрати грешката", + "description": "" + }, + "badger_status_allow": { + "message": "Разреших $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Какво е Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Търси в домейните:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Учи се в Поверителни/Инкогнито прозорци", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Ако позволиш ученето в Поверителни/Инкогнито прозорци, това може да остави на компютъра ти следи от историята, докато си сърфирал поверително. По подразбиране Privacy Badger ще блокира в Поверителните/Инкогнито прозорци преследвачите, за които вече знае, но няма да се учи за нови преследвачи. Би било полезно да включиш тази настройка, ако сърфираш редовно в Поверителни/Инкогнито прозорци.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Show count of trackers", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Какво е преследвач?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Моля те не забравай да щракнеш на \"Развали ли Privacy Badger този сайт\". Уважаваме личното ти пространство, така че не изпращаме автоматични доклади.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Настройки на Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Сайтове-изключения", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Включи Privacy Badger за този сайт", + "description": "" + }, + "options_domain_type_filter": { + "message": "Филтрирай според вид:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Списъкът с преследвачи и опциите бяха променени успешно!", + "description": "" + }, + "export_user_data": { + "message": "Експортирай потребителските данни", + "description": "" + }, + "manage_data_intro": { + "message": "Импортирането на потребителски данни:
  • Презаписва общите настройки
  • Слива списъците със сайтове-изключения
  • Слива информацията за това кои преследвачи е виждал Privacy Badger
  • Презаписва персонализирането на плъзгачите
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Започни отначало", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Започни отначало с домейните-преследвачи", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Започването отначало с домейните-преследвачи ще:\n\n • Изтрие всички данни за преследвачи, които Privacy Badger е научил от твоето сърфиране\n • Възвърне списъка на домейните-преслевдачи към най-новия предварително трениран списък (посети www.eff.org/badger-pretraining, за да научиш повече)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Премахни всички", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Премахни всички домейни-преследвачи", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Премахването на всички домейни-преследвачи ще:\n\n • Изтрие всичко, което Privacy Badger знае за преследвачите\n • Накара Privacy Badger да не блокира нищо, докато не успее да се научи наново от твоето сърфиране", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Privacy Badger вече те защитава.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "За да разбереш как работи Privacy Badger, щракни долу, за да ти обясни набързо.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "През WebRTC може да изтече локалния ти IP адрес. Имай предвид, че включването на тази опция може да забави някои апове за разговори, като например Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Общи настройки", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Обясни ми набързо", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Щракни тук, за да блокираш този домейн напълно", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "версия $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Блокирах бисквитки от $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "частично блокирани", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Разбирам; покажи ми все пак домейните-преследвачи", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Благодаря, че инсталира Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Моля избери файл за импорт.", + "description": "" + }, + "report_broken_site": { + "message": "Развали ли Privacy Badger този сайт? Уведоми ни!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Премести плъзгача в средата, за да блокираш бисквитките", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Хващам подмолни преследвачи", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Затвори", + "description": "" + }, + "import_user_data": { + "message": "Импортирай потребителски данни", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "съобразяващи се с DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Помощ", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "разрешени", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Личното пространство е отборна игра!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Не би трябвало да се налага да променяш каквото и да е тук.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "всички", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Откажи", + "description": "" + }, + "tooltip_block": { + "message": "Премести плъзгача наляво, за да блокираш домейн", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "контролирани от теб", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Един проект на Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Добави домейн", + "description": "" + }, + "tooltip_allow": { + "message": "Премести плъзгача надясно, за да разрешиш домейн", + "description": "" + }, + "popup_disable_for_site": { + "message": "Изключи Privacy Badger за този сайт", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Щракни тук, за да разрешиш този домейн", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger НИКОГА няма да споделя данни за сърфирането ти, освен ако ти не решиш да ги споделиш.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger досега не е открил домейни-преследвачи. Продължавай да си сърфираш!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger започва да блокира, когато види един и същ преследвач на три различни сайта. Три картона и е аут!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Филтрирай според настройка:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Опиши накратко грешката по́ долу.", + "description": "" + }, + "remove_button": { + "message": "Премахни избраните", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Когато използваш Privacy Badger, се присъединяваш към Electronic Frontier Foundation и милиони други потребители в борбата за лично пространство и поверителност. Ние сме сдружение с непарична цел, което се бори за онлайн правата ти. Благодаря, че си с нас!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "За да изключиш домейни от търсенето, започни с \"-\". Например: \".co -.com\" ще покаже домейни с .co и .co.uk, но не и .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Ако смяташ, че Privacy Badger е развалил страница (например не върви видео клип), можеш да щракнеш на бутона \"Изключи\", за да изключиш Privacy Badger за този сайт.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Политика за поверителност", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Описание", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Домейните по́ долу не изглеждат сякаш те следят", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Настройки", + "description": "" + }, + "share_button_title_facebook": { + "message": "Сподели във Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger автоматично се научава да блокира невидими преследвачи.", + "description": "" + }, + "report_fail": { + "message": "Опа. Нещо се обърка.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger замени този $BUTTON$ бутон", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Разреши веднъж", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Разрешаване винаги на този сайт", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Синхронизацията с облака:
  • Изисква Firefox/Chrome Синхронизация
  • Качването презаписва всички съществуващи в облака данни на Privacy Badger
  • Дърпането слива списъците със сайтове, на които язовеца ти е изключен
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Качи", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Експортирай сайтовете-изключения в облака", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Импортирай сайтовете-изключения от облака", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Импортирах успешно данните от облака.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Не успях да дръпна данните от облака.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Качих успешно данните в обалака.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Не успях да кача данните в облака.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "В облака няма данни за дърпане.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Кажи на приятелите си", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Сподели", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) е разширение за браузер, което автоматично се научава да блокира невидими преследвачи. Privacy Badger е направен от Electronic Frontier Foundation, организация с нестопанска цел, която се бори за твоите онлайн права.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Копирай в клипборда", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Копирах", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nothing to do on this page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger doesn't work on special pages like this one. Try browsing somewhere else.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Replacement", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "When blocking social buttons and other potentially useful (video, audio, comments) widgets, Privacy Badger can replace them with click-to-activate placeholders.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/ca/messages.json b/src/_locales/ca/messages.json new file mode 100644 index 0000000..790c4b3 --- /dev/null +++ b/src/_locales/ca/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "S'ha blocat $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Arxiu JSON no vàlid", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Segur que voleu treure aquest domini de Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "El domini $DOMAIN$ no fa seguiments", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Ara mateix, Privacy Badger només comprova si terceres parts estan utilitzant galetes, emmagatzematge local d'HTML5 o el marcat del llenç per fer seguiments del vostre navegador. Alguns d'aquests dominis poden utilitzar mètodes de seguiment que Privacy Badger no pot detectar.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Comproveu si els dominis de terceres parts compleixen amb la política d'EFF de no seguiment", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Si us plau, afegiu un domini vàlid o un URL", + "description": "" + }, + "donate_to_eff": { + "message": "Feu un donatiu a EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Ajudeu-nos fent un donatiu i compartint el vostre suport per les nostres eines", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "No bloco anuncis, sóc diferent", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Gràcies! Arribarem al fons d'això.", + "description": "" + }, + "dnt_tooltip": { + "message": "Aquest domini promet no seguir-vos", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "següent secció", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Si us plau, expliqueu-nos alguna cosa sobre el següent error:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gestió de dades", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Informeu d'un error", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "p. ex. www.domini.com, *.domini.net, domini.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Cliqueu aquí per blocar les galetes d'aquest domini", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blocat", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Impediu que el WebRTC filtri una adreça IP local", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger aprèn automàticament a blocar rastrejadors invisibles. Deixeu-nos un minut per ensenyar-vos com.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Què ha fallat?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Dominis de seguiment", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Compartiu-lo a Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Apreneu com Privacy Badger protegeix la vostra privacitat", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Descarregar", + "description": "" + }, + "import": { + "message": "Importar", + "description": "" + }, + "options_hide_social_widgets": { + "message": "No reemplaçar els ginys següents:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Habilita el reemplaçament de ginys", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Mostra els dominis que, aparentment, no us segueixen", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Enviar Errada", + "description": "" + }, + "badger_status_allow": { + "message": "Permès $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Què és Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Cerca de dominis:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Aprendre en finestres Privades/Incògnit", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Habilitant l'aprenentatge en finestres Privades/Incògnit, podeu deixar traces a l'historial privat de navegació del vostre ordinador. Per defecte, Privacy Badger blocarà els rastrejadors coneguts a les finestres Privades/Incògnit, però no aprendrà sobre nous rastrejadors. Cal que habiliteu aquesta opció si la majoria de la vostra navegació la feu en finestres Privades/Incògnit", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Mostra el comptador de rastrejadors", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Què és un rastrejador?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Si us plau, no us oblideu de clicar a 'El Privacy Badger ha espatllat aquest lloc'. Respectem tant la vostra privacitat que no enviem informes de forma automàtica.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Opcions de Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Llocs deshabilitats", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Habilita el Privacy Badger per aquest lloc", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtra per tipus:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "La llista i la configuració del rastrejador s'ha actualitzat correctament!", + "description": "" + }, + "export_user_data": { + "message": "Exporta les dades d'usuari", + "description": "" + }, + "manage_data_intro": { + "message": "Si importeu les dades d'usuari:
  • Sobreescriureu la configuració general
  • Fusionareu les llistes de llocs deshabilitats
  • Fusionareu la informació sobre els rastrejadors que Privacy Badger ha vist
  • Sobreescriureu la personalització dels lliscadors
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Restablir", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Restablir els dominis de seguiment", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Restablint els dominis de seguiment:\n\n • Esborrareu totes les dades que el Privacy Badger hagi après sobre rastrejadors durant la vostra navegació\n • Restaurareu la llista de dominis de seguiment a la llista d'abans de començar a aprendre (visiteu www.eff.org/badger-pretraining per saber-ne més)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Eliminar-ho tot", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Eliminar tots els dominis de seguiment", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Eliminant tots els dominis de seguiment:\n\n • Esborrareu tot el que Privacy Badger sap sobre els rastrejadors\n • Provocareu que Privacy Badger no bloqui res fins que hagi tornat a aprendre amb la vostra navegació", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Ara el Privacy Badger ja us protegeix.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Per saber com treballa el Privacy Badger, cliqueu aquí baix i seguiu la guia ràpida.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC pot filtrar la vostra IP local. Teniu en compte que aquesta opció pot degradar el rendiment d'aplicacions de videoconferència com Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Configuració general", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Feu la visita guiada", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Cliqueu aquí per blocar completament aquest domini", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versió $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "S'han blocat les galetes de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "blocat parcialment", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Ho entenc; si us plau, mostra'm igualment el llistat de dominis de seguiment", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Gràcies per instal·lar el Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Si us plau, seleccioneu l'arxiu a importar", + "description": "" + }, + "report_broken_site": { + "message": "El Privacy Badger ha espatllat aquest lloc? Feu-nos-ho saber!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centreu el lliscador per blocar les galetes", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Captura rastrejadors furtius", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Tanca", + "description": "" + }, + "import_user_data": { + "message": "Importa dades d'usuari", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "respecta el No Em Seguiu", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Ajuda", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permès", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "La privacitat és un esport d'equip!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Aquí no hauria de ser necessari modificar res", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "tot", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Cancel·la", + "description": "" + }, + "tooltip_block": { + "message": "Moveu el lliscador a l'esquerra per blocar el domini", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "controlat per l'usuari", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Un projecte de l'Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Afegeix domini", + "description": "" + }, + "tooltip_allow": { + "message": "Moveu el lliscador a la dreta per permetre un domini", + "description": "" + }, + "popup_disable_for_site": { + "message": "Deshabiliteu el Privacy Badger en aquest lloc", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Cliqueu aquí per permetre aquest domini", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "El Privacy Badger MAI compartirà dades sobre la vostra navegació, excepte si decidiu compartir-les.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "El Privacy Badger encara no ha detectat cap domini de seguiment. Seguiu navegant!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger comença a blocar un cop veu el mateix rastrejador en tres llocs web diferents. Tres strikes i eliminat! Com al beisbol.", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrar per estat:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Descriviu breument l'errada a sota.", + "description": "" + }, + "remove_button": { + "message": "Treu els seleccionats", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Quan utilitzeu el Privacy Badger, us uniu a l'Electronic Frontier Foundation i milions de persones en la lluita per la privacitat. Som una entitat sense ànim de lucre lluitant pels vostres drets en línia. Gràcies per unir-vos a nosaltres!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Per excloure dominis, utilitzeu el caràcter \"-\". Per exemple, si cerqueu \".co -.com\" us mostrarà els dominis .co i .co.uk, però no us mostrarà el domini .com", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Si penseu que el Privacy Badger ha espatllat una pàgina (un vídeo que no es veu, per exemple), podeu clicar el botó 'Deshabilita' perquè el Privacy Badger no controli el lloc.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Política de privacitat", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Descripció", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Els dominis de sota, aparentment, no us segueixen.", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opcions", + "description": "" + }, + "share_button_title_facebook": { + "message": "Compartiu-ho a Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "El Privacy Badger aprèn automàticament a blocar rastrejadors invisibles.", + "description": "" + }, + "report_fail": { + "message": "Ai! Alguna cosa no ha anat bé.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "El Privacy Badger ha substituït aquest botó de $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permetre-ho un cop", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Permet sempre en aquest lloc", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Sincronització al núvol:
  • Requereix Firefox/Chrome Sync
  • La càrrega sobreescriu qualsevol dada del Privacy Badger existent al núvol
  • La descàrrega fusiona les llistes dels llocs que heu deshabilitat al teixó (Badger)
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Carrega", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exporta els llocs deshabilitats al núvol", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importa els llocs deshabilitats del núvol", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Les dades del núvol s'han importat correctament.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Les dades del núvol no s'han pogut descarregar.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "S'han carregat les dades al núvol correctament.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Les dades no s'han pogut carregar al núvol.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Al núvol no hi ha dades per descarregar.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Expliqueu-ho a les vostres amistats", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Compartiu", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "El Privacy Badger (www.eff.org/privacybadger) és una extensió del navegador que aprèn automàticament a blocar rastrejadors invisibles. El Privacy Badger l'ha creat l'Electronic Frontier Foundation, una entitat sense ànim de lucre que lluita pels vostres drets en línia.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copia-ho al porta-retalls", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copiat", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "En aquesta pàgina no hi ha res a fer", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger no funciona en pàgines especials com aquesta. Proveu de navegar per altres llocs.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "En aquest lloc, el Privacy Badger està deshabilitat", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Reemplaçament de ginys", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Quan es bloquegen els botons de les xarxes socials i altres ginys (vídeo, àudio, comentaris) habituals, el Privacy Badger pot reemplaçar-los per espais reservats activables amb un clic.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/cs/messages.json b/src/_locales/cs/messages.json new file mode 100644 index 0000000..275960c --- /dev/null +++ b/src/_locales/cs/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Doména $DOMAIN$ je blokována", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Neplatný soubor JSON.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Jste si jistí, že chcete odebrat tuto doménu ze seznamu Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Žádné sledovací prvky pro $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "V současnosti Privacy Badger hlídá, zda soubory cookies třetích stran, lokální úložiště HTML5 a metoda canvas fingerprinting neslouží ke sledování Vašeho procházení internetu. Některé domény mohou používat metody sledování, které Privacy Badger dosud nedokáže detekovat.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Zkontrolujte, zda domény třetích stran dodržují pravidla Žádosti o nesledování od organizace EFF.", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Prosím, vložte validní doménu nebo adresu URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Přispět EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Můžete nám přispět finanční obnos, nebo sdílet Vaši podporu na sociálních sítích", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Není to prostý program na blokování reklam", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Děkujeme! Přijdeme tomu na kloub.", + "description": "" + }, + "dnt_tooltip": { + "message": "Tato doména slibuje, že Vás nebude sledovat", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "další sekce", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Prosím, napište nám o vzniklé chybě:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Spravovat data", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Nahlásit chybu", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "např. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Kliknutím zde zakážete doméně nastavovat soubory cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blokované", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Bránit uniku lokální IP adresy skrze WebRTC", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger se automaticky učí blokovat neviditelné sledovací prvky na webových stránkách. Jestliže máte minutku, ukážeme Vám jak.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Co je špatně?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Sledovací domény", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Sdílet na Twitteru", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Zjistěte, jak Privacy Badger chrání Vaše soukromí", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Stáhnout", + "description": "" + }, + "import": { + "message": "Importovat", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Don't replace the following widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Enable widget replacement", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Show domains that don't appear to be tracking you", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Odeslat hlášení o chybě", + "description": "" + }, + "badger_status_allow": { + "message": "Doména $DOMAIN je povolena", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Co je to Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Hledat domény:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Učit se v Anonymním okně prohlížeče", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Jestliže povolíte učení v Anonymním okně, může zůstat na počítači Vaše historie procházení. Ve výchozím nastavení Privacy Badger blokuje v Anonymním okně pouze sledovací prvky, které již zná, ale nebude se snažit objevovat nové a učit se z nich. Zvažte zapnutí této možnosti v případě, že často používáte Anonymní okno.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Show count of trackers", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Co je to sledovací prvek?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Nezapomeňte prosím kliknout na tlačítko \"Rozbil Privacy Badger tuto stránku?\", jelikož respektujeme Vaše soukromí a neposíláme automatické hlášení o chybách.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Nastavení Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Vyloučené stránky", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Zapnout Privacy Badger pro tuto stránku", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrovat podle druhu:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Seznam sledovacích prvků a nastavení bylo úspěšně aktualizováno!", + "description": "" + }, + "export_user_data": { + "message": "Exportovat uživatelská data", + "description": "" + }, + "manage_data_intro": { + "message": "Importováním uživatelských dat:
  • přepíšete základní nastavení,
  • sloučíte seznamy vyloučených domén,
  • sloučíte seznamy sledovacích domén, které Privacy Badger objevil,
  • přepíšete nastavení posuvníků.
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Resetovat", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Resetovat seznam sledovacích domén", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Resetování sledovacích domén způsobí:\n\n • Všechna data o sledovacích doménách, které se Privacy Badger naučil během Vašeho používání, budou smazána.\n • Seznam sledovacích domén se obnoví do základního nastavení (na adrese www.eff.org/badger-pretraining naleznete více informací).", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Odstranit vše", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Odstranit všechny sledovací domény", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Odstranění všech sledovacích domén způsobí:\n\n • Všechny zjištěné údaje o sledovacích doménách budou smazána.\n • Privacy Badger nebude nic blokovat, dokud se opětovně nenaučí odhalovat sledovací domény během Vašeho procházení internetu.", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Nyní Vás chrání Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Pokud chcete vědět, jak Privacy Badger funguje, klikněte níže pro rychlý tutoriál.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "Skrze WebRTC může unikat Vaše lokání IP adresa. Jestliže povolíte toto nastavení, kvalita Vašich hovorů na službách jako jsou Google Hangouts se může zhoršit.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Obecná nastavení", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Spustit prohlídku", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Kliknutím zde doménu zablokujete úplně", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "verze $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blokovány soubory cookies z domény $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "částečně blokované", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Rozumím, přesto mi ukažte seznam sledovacích domén", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Děkujeme Vám za instalaci Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Vyberte prosím soubor pro importování.", + "description": "" + }, + "report_broken_site": { + "message": "Rozbil Privacy Badger tuto stránku? Dejte nám vědět!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Umístěte posuvník doprostřed pro zablokování souborů cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Chytá zákeřné sledovací prvky", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Zavřít", + "description": "" + }, + "import_user_data": { + "message": "Importovat uživatelská data", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "v souladu s Do Not Track", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Nápověda", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "povolené", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Snaha o soukromí je týmový sport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Obvykle zde nemusíte nic upravovat.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "všechny", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Zrušit", + "description": "" + }, + "tooltip_block": { + "message": "Posuňte posuvník vlevo pro zablokování domény", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "nastavené uživatelem", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Projekt Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Přidat doménu", + "description": "" + }, + "tooltip_allow": { + "message": "Posuňte posuvník vpravo pro povolení domény", + "description": "" + }, + "popup_disable_for_site": { + "message": "Vypnout Privacy Badger pro tuto stránku", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klikněte zde pro povolení této domény", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger NIKDY nesdílí žádná data o Vašem procházení, jestliže se k tomu sami nerozhodnete.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger zatím neobjevil žádné sledovací domény. Můžete pokračovat v procházení internetu!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger začne blokovat prvek teprve ve chvíli, kdy jej najde na třech různých webových stránkách. Tři zářezy a jde ze hry!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrovat podle stavu:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Níže stručně popište chybu.", + "description": "" + }, + "remove_button": { + "message": "Smazat vybrané", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Používáním rozšíření Privacy Badger se připojíte k organizaci Electronic Frontier Foundation a milionům dalších uživatelů k boji za soukromí. Jsme nezisková organizace, která bojuje za Vaše práva na internetu. Děkujeme, že jste s námi!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Pro vyloučení určitých domén z vyhledávní přidejte před hledaný výraz znak \"-\". Například jestliže chcete najít všechny domény .co a .co.uk, ale chcete vynechat doménu .com, můžete použít hledání \".co -.com\".", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Pokud si myslíte, že Privacy Badger rozbil nějakou webovou stránku (například se nezobrazí video), můžete kliknout na tlačítko \"Vypnout Privacy Badger pro tuto stránku\", díky čemuž nebude Privacy Badger na této stránce aktivní.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Zásady ochrany osobních údajů", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Popis", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Domény níže nevypadají, že Vás sledují", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Nastavení", + "description": "" + }, + "share_button_title_facebook": { + "message": "Sdílet na Facebooku", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger se automaticky učí blokovat neviditelné sledovací prvky na webových stránkách.", + "description": "" + }, + "report_fail": { + "message": "Jejda. Něco se pokazilo.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger nahradil toto $BUTTON$ tlačítko", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Allow once", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Povolit vždy na tomto webu", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Synchronizace s cloudovou službou:
  • Vyžaduje účet pro synchronizaci dat prohlížeče Firefox nebo Google Chrome.
  • Nahráním údajů přepíšete veškerá předchozí data rozšíření Privacy Badger na cloudu.
  • Stáhnutím dat z cloudu se sjednotí seznamy domén, na kterých je Privacy Badger vypnutý.
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Nahrát", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Nahrát vyloučené stránky na cloud", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importovat vyloučené stránky z cloudu", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Data z cloudu byla úspěšně importována.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Data z cloudu nemohla být stáhnuta.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Data byla úspěšně nahrána na cloud.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Data nemohla být nahrána na cloud.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Žádná data z cloudu nejsou k dispozici ke stažení.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Povězte to svým přátelům", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Sdílet", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) je rozšíření prohlížeče, které automaticky detekuje neviditelné sledovací prvky. Privacy Badger je tvořen kolektivem Electronic Frontier Foundation, neziskovou organizací, která bojuje za Vaše práva na internetu.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Zkopírovat do schránky", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Zkopírováno", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nothing to do on this page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger doesn't work on special pages like this one. Try browsing somewhere else.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Replacement", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "When blocking social buttons and other potentially useful (video, audio, comments) widgets, Privacy Badger can replace them with click-to-activate placeholders.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/da/messages.json b/src/_locales/da/messages.json new file mode 100644 index 0000000..0fcd47c --- /dev/null +++ b/src/_locales/da/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Blokerede $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Ugyldig JSON-fil.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Er du sikker på at du vil fjerne dette domæne fra Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Ingen sporing fra $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "I øjeblikket tjekker Privacy Badger kun om tredjeparter bruger cookies, HTML5 lokal lagring, eller kanvasfingeraftryk til at spore din netlæsning. Nogle af disse domæner kan bruge sporingsmetoder som Privacy Badger ikke kan opdage.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Tjek om tredjepartsdomæner overholder EFFs \"Spor Ikke\"-politik", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Tilføj venligst et gyldigt domæne eller URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Doner til EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Hjælp os ved at donere og dele din støtte til vores væktøjer", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Ikke en reklameblokering, jeg er anderledes", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Tak! Vi skal nok komme til bunds i det.", + "description": "" + }, + "dnt_tooltip": { + "message": "Dette domæne lover ikke at spore dig", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Nogle netsteder virker ikke når dette domæne blokeres", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Klik for at give Privacy Badger kontrol over dette domæne", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "næste sektion", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Fortæl os om følgende fejl:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Håndter Data", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Rapporter en fejl", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "fx www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Klik her for at blokere dette domæne fra at sætte cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blokeret", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Forhindr WebRTC i at lække lokal IP-adresse", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger lærer automatisk at blokere usynlige sporinger. Brug et minut på at se hvordan.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Hvad er der galt?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Sporingsdomæner", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Del på Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Lær hvordan Privacy Badger beskytter dit privatliv", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Hent", + "description": "" + }, + "import": { + "message": "Importer", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Udskift ikke følgende ting:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Aktiver udskiftning", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Vis domæner der ser ud til ikke at spore dig", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Indsend fejl", + "description": "" + }, + "badger_status_allow": { + "message": "Tillod $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Hvad er Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Søg domæner:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Lær i Private/Inkognito-vinduer", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "At aktivere læring i Private/Inkognito-vinduer kan efterlade spor af din private browsinghistorik på din computer. Som standard vil Privacy Badger blokere sporinger den allerede kender til i Private/Inkognito-vinduer, men den vil ikke lære om nye sporinger. Du vil muligvis slå denne indsilling til hvis du browser meget med Private/Inkognito-vinduer.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Vis antal sporinger", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Hvad er en sporing?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Glem ikke at klikke på 'Ødelagde Privacy Badger dette netsted'. Vi respekterer dit privatliv, så vi sender ikke automatiske rapporter.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger Indstillinger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Deaktiverede Steder", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Aktiver Privacy Badger for dette netsted", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrer efter type:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Sporingsliste og opsætning successfuldt opdateret!", + "description": "" + }, + "export_user_data": { + "message": "Eksporter brugerdata", + "description": "" + }, + "manage_data_intro": { + "message": "Import af brugerdata:
  • Overskriver generelle indstillinger
  • Kombinerer lister over deaktiverede steder
  • Kombinerer informationer om hvilke sporinger Privacy Badger har set
  • Overskriver skyderes brugerindstillinger
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Nulstil", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Nulstil sporingsdomæner", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Nulstilling af sporingsdomæner vil:\n\n• Slette alle data om sporinger som Privacy Badger har lært fra din browsning.\n• Gendanner listen over sporingdomæner til den seneste før-trænede liste (besøg www.eff.org/badger-pretraining for at lære mere)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Fjern alle", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Fjern alle sporingsdomæner", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "At fjerne alle sporingsdomæner vil:\n\n• Slette alt Privacy Badger ved om sporinger\n• Få Privacy Badger til ikke at blokere noget indtil den har haft en chance til igen at lære fra din browsning", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Du er nu beskyttet af Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "For at lære hvordan Privacy Badger virker, klik herunder for en hurtig gennemgang.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC kan lække din lokale IP-addresse. Bemærk at aktivering af denne funktion kan have en negativ effekt på ydeevnen af webkonferenceprogrammer som Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Generelle Indstillinger", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Tag turen", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Klik her for at blokere dette domæne fuldstændigt", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "version $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blokerede cookies fra $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "delvist blokeret", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Jeg forstår; vis mig listen over sporingsdomæner alligevel", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Tak for at installere Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Vælg en fil at importere.", + "description": "" + }, + "report_broken_site": { + "message": "Ødelagde Privacy Badger dette netsted? Fortæl os om det!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centrer skyderen for at blokere cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Fanger luskede sporinger", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Luk", + "description": "" + }, + "import_user_data": { + "message": "Importer brugerdata", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "\"Spor ikke\"-kompatibel", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Hjælp", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "tilladt", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Privatliv er en gruppesport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Du burde ikke have nødigt at ændre noget her.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "alle", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Annuller", + "description": "" + }, + "tooltip_block": { + "message": "Flyt skyderen til venstre for at blokere et domæne", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "brugerstyret", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Et projekt fra Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Tilføj domæne", + "description": "" + }, + "tooltip_allow": { + "message": "Flyt skyderen til højre for at tillade domænet", + "description": "" + }, + "popup_disable_for_site": { + "message": "Deaktiver Privacy Badger for dette netsted", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klik her for at tillade dette domæne", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger vil ALDRIG dele data om din browsning, med mindre du vælger at dele det.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger har ikke opdaget nogle sporingsdomæner endnu. Fortsæt med at browse!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger starts blocking once it sees the same tracker on three different websites. Three strikes and it's out!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrer efter status:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Beskriv fejlen kort herunder.", + "description": "" + }, + "remove_button": { + "message": "Fjern valgte", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Når du bruger Privacy Badger, tilslutter du dig Electronic Frontier Foundation og millioner af andre brugere i kampen for privatliv. Vi er en nonprofit organisation der kæmper for dine rettigheder online. Tak for at slutte dig til os!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Sæt \"-\" foran dine søgeudtryk for at udelukke domæner. For eksempel vil \".co -.com\" vise .co og .co.uk men ikke .com-domæner.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Hvis du tror at Privacy Badger ødelægger en side (f.eks. en video spiller ikke), kan du klikke på \"Deaktiver\"-knappen for at slå Privacy Badger fra på det netsted.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Privatlivspolitik", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Beskrivelse", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Din Badger har endnu ikke besluttet om disse domæner skal blokeres", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Vis domæner din Badger endnu ikke har besluttet at blokere:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Domænerne herunder ser ikke ud til at spore dig", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opsætning", + "description": "" + }, + "share_button_title_facebook": { + "message": "Del på Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger lærer automatisk at blokere usynlige sporinger.", + "description": "" + }, + "report_fail": { + "message": "Ups. Noget gik galt.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger har erstattet denne $BUTTON$ knap", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger har erstattet denne $WIDGET$-kontrol", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Tillad en gang", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Tillad altid på dette netsted", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Skysynkronisering:
  • Kræver Firefox/Chrome-Synkronisering
  • Oplægning overskriver eksisterende Privacy Badger-data i skyen
  • Hentning kombinerer listerne over steder hvor din Privacy Badger er deaktiveret
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Læg op", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Eksporter deaktiverede steder til skyen", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importer deaktiverede steder fra skyen", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Skydata importeret med success.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Skydata kunne ikke hentes.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Skydata lagt op med success.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Skydata kunne ikke lægges op.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Ingen skydata at hente.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Del med dine venner", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Del", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) er en browserudvidelse som automatisk lærer at blokere usynlige sporinger. Privacy Badger laves af Electronic Frontier Foundation, en nonprofit-orginsation der kæmper for dine rettigheder online.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Kopiér til klippebord", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopieret", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Der er intet at gøre på denne side", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger virker ikke på specielle sider som denne. Prøv at browse et andet sted.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger er deaktiveret på dette netsted", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Kontroludskiftning", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Ved blokering af sociale knapper og andre potentielt brugbare (video, lyd, kommentarer) kontroller, kan Privacy Badger udskifte dem med klik-for-at-aktivere pladsholdere.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json new file mode 100644 index 0000000..ea2535d --- /dev/null +++ b/src/_locales/de/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ geblockt", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Ungültige JSON-Datei.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Möchten Sie diese Domain wirklich aus Privacy Badger entfernen?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Kein Tracking für $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Derzeit überprüft Privacy Badger nur, ob Drittparteien zum Verfolgen Ihrer Internetaktivitäten Cookies, lokalen HTML5-Speicher oder Canvas-Fingerprinting verwenden. Einige dieser Domains könnten allerdings Tracking-Methoden benutzen, die Privacy Badger nicht erkennen kann.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Überprüfen, ob Drittanbieter-Domains EFFs Do-Not-Track-Richtlinie befolgen", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Bitte eine gültige Domain oder Adresse hinzufügen.", + "description": "" + }, + "donate_to_eff": { + "message": "An EFF spenden", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Helfen Sie uns durch Spenden und Weiterempfehlen unserer Software", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Kein Adblocker: Ich bin anders", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Vielen Dank! Wir werden den Fehler umgehend untersuchen.", + "description": "" + }, + "dnt_tooltip": { + "message": "Diese Domain verspricht, Ihre Internetaktivitäten nicht zu verfolgen", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Das Blocken dieser Domain ist dafür bekannt, bei Websites Probleme zu verursachen", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Anklicken, um die Kontrolle dieser Domain an Privacy Badger zurückzugeben", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "nächster Abschnitt", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Bitte informieren Sie uns über den folgenden Fehler:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Benutzerdaten verwalten", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Melden eines Fehlers", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "z. B. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Hier klicken, um zu verhindern, dass diese Domain Cookies setzt", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "geblockt", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "WebRTC hindern, die lokale IP-Adresse zu verraten", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger lernt automatisch, unsichtbare Tracker zu blocken. Nehmen Sie sich eine Minute Zeit, um zu erfahren wie.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Was läuft falsch?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Tracking-Domains", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Auf Twitter teilen", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Erfahren Sie, wie Privacy Badger Ihre Privatsphäre schützt", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Herunterladen", + "description": "" + }, + "import": { + "message": "Importieren", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Folgende Widgets nicht ersetzen:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Ersetzen von Widgets aktivieren", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Domains anzeigen, die Ihre Internetaktivitäten anscheinend nicht verfolgen", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Fehler übermitteln", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ erlaubt", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Was ist Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Domains suchen:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Blocken neuer Tracker beim Browsen lernen", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Aktiviertes Lernen macht dich für Websites möglicherweise leichter identifizierbar", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Auch in privaten bzw. Inkognito-Fenstern lernen", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Die Aktivierung des Lernens in privaten bzw. Inkognito-Fenstern hinterlässt eventuell Spuren Ihres privaten Surfverlaufs auf Ihrem Computer. In privaten/Inkognito-Fenstern blockt Privacy Badger standardmäßig bereits bekannte Tracker, erlernt aber keine neuen. Falls Sie oft private/Inkognito-Fenster verwenden, kann die Aktivierung dieser Option Sinn machen.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger wird standardmäßig nicht mehr aus Ihrem Browsen lernen.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Klicken Sie unten, um mehr zu erfahren.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Erfahren Sie, was sich in Privacy Badger ändert.", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Trackeranzahl anzeigen", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Was ist ein Tracker?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Bitte vergessen Sie nicht, auf »Verursacht Privacy Badger bei dieser Website Probleme?« zu klicken. Da wir Ihre Privatsphäre respektieren, senden wir keine automatisierten Berichte.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Optionen von Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Dies wird folgende Informationen automatisch an die EFF senden: Die von Ihnen derzeit besuchte Webseite, Ihre Browserversion, die Version von Privacy Badger und den Status aller Schieberegler auf dieser Webseite.", + "description": "" + }, + "whitelisted_domains": { + "message": "Deaktivierte Websites", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Für diese Website Privacy Badger aktivieren", + "description": "" + }, + "options_domain_type_filter": { + "message": "Nach Typ filtern:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Trackerliste und Einstellungen erfolgreich aktualisiert!", + "description": "" + }, + "export_user_data": { + "message": "Benutzerdaten exportieren", + "description": "" + }, + "manage_data_intro": { + "message": "Importieren von Benutzerdaten:
  • Überschreibt allgemeine Einstellungen
  • Kombiniert Listen deaktivierter Sites
  • Kombiniert Informationen über die bereits erkannten Tracker
  • Überschreibt Veränderungen der Schieberegler
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Zurücksetzen", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Tracking-Domains zurücksetzen", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Zurücksetzen der Tracking-Domains wird:\n\n • Alle Daten über Tracker löschen, die Privacy Badger während Ihrer Browsernutzung gelernt hat\n • Die Tracking-Domain-Liste auf die neueste vorgegebene Liste zurücksetzen (besuchen Sie www.eff.org/badger-pretraining für weitere Informationen)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Alle entfernen", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Alle Tracking-Domains entfernen", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Entfernen aller Tracking-Domains wird:\n\n • Alles löschen, was Privacy Badger über Tracker weiß\n • Privacy Badger veranlassen, solange nichts zu blocken, bis er Gelegenheit hatte, von Ihrer Browsernutzung neu zu lernen", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Sie werden nun von Privacy Badger geschützt.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Um zu erfahren, wie Privacy Badger funktioniert, klicken Sie bitte unten für eine kurze Einführung.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC kann Ihre lokale IP-Adresse verraten. Bitte beachten Sie, dass das Aktivieren dieser Option eventuell die Leistung bei Apps für Webkonferenzen wie Google Hangouts verringert.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Allgemeine Einstellungen", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Datenschutz", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Erweitert", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Rundgang machen", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Hier klicken, um diese Domain vollständig zu blocken", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "Version $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookies von $DOMAIN$ geblockt", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "teilweise geblockt", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Verstanden. Bitte die Liste der Tracking-Domains trotzdem anzeigen.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Danke für das Installieren von Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Bitte eine Datei zum Importieren auswählen.", + "description": "" + }, + "report_broken_site": { + "message": "Verursacht Privacy Badger bei dieser Website Probleme?", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Bewegen Sie den Schieberegler in die Mitte, um Cookies zu blocken", + "description": "" + }, + "intro_learns": { + "message": "Lernt automatisch", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Anstatt vorgefertigte Listen zu blockender Domains zu verwenden, entdeckt Privacy Badger Tracker aufgrund ihres Verhaltens automatisch.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Fängt hinterlistige Tracker", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Unsichtbares Tracking wird auf unterschiedlichen Wegen realisiert; Werbeanzeigen sind hierbei nur die sichtbare Spitze des Eisbergs. Privacy Badger signalisiert Websites durch Global Privacy Control, dass Ihre Daten nicht geteilt und verkauft werden sollen, und durch Do Not Track, dass Sie nicht verfolgt werden wollen. Falls diese Ihren Wunsch ignorieren, lernt Privacy Badger, sie zu blocken — egal, ob es sich dabei um Werbung oder andere Arten von Tracking handelt.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Schließen", + "description": "" + }, + "import_user_data": { + "message": "Benutzerdaten importieren", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-konform", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Hilfe", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "erlaubt", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Datenschutz ist ein Teamsport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Hier sollten keine Änderungen notwendig sein.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "alle", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Abbrechen", + "description": "" + }, + "tooltip_block": { + "message": "Bewegen Sie den Schieberegler nach links, um eine Domain zu blocken", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Websites »Global Privacy Control« und »Do Not Track« signalisieren", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Senden besuchter Web-Adressen an Google deaktivieren. Dies deaktiviert Vorschläge für ähnliche Seiten, wenn eine Seite nicht gefunden werden kann.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Hyperlink-Auditing deaktivieren", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "benutzergesteuert", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger ist auf den folgenden Websites deaktiviert. Das heißt, Privacy Badger wird nichts blocken, wenn Sie die hier aufgeführten Sites besuchen, und wird weder »Do Not Track« noch »Global Privacy Control« signalisieren.

Falls Sie annehmen, dass Privacy Badger bei einer Webseite Probleme verursacht, oder wenn Sie einer bestimmten Site erlauben möchten, Ihre Daten zu teilen oder zu verkaufen, so können Sie die Domain der entsprechenden Seite in das Feld unten eingeben und auf die Schaltfläche »Domain hinzufügen« klicken.

Falls Sie den Tab der Seite bereits ausgewählt haben, können Sie auch einfach auf Privacy Badgers Schaltfläche in der Browsersymbolleiste und dann dort auf die Schaltfäche »Deaktivieren« klicken.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ mögliche $LINK_START$Tracker$LINK_END$ geblockt", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Keine $LINK_START$Tracker$LINK_END$ geblockt", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Auf dieser Webseite sind keine Elemente von Drittparteien vorhanden. Ein Hoch auf die Privatsphäre!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Ein Projekt der Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Domain hinzufügen", + "description": "" + }, + "tooltip_allow": { + "message": "Bewegen Sie den Schieberegler nach rechts, um eine Domain zu erlauben", + "description": "" + }, + "popup_disable_for_site": { + "message": "Für diese Website Privacy Badger deaktivieren", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Hier klicken, um diese Domain zu erlauben", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger wird NIEMALS Daten über Ihre Internetaktivitäten weitergeben, solange Sie sich selbst nicht dazu entscheiden.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger hat entschieden, bisher $COUNT$ mögliche $TRACKER_LINK_START$Tracking-Domains$TRACKER_LINK_END$ zu blocken", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger hat bisher keine Tracking-Domains erkannt. Surfen Sie weiter!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger beginnt mit dem Blocken, sobald er denselben Tracker auf drei verschiedenen Websites erkennt.", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Nach Status filtern:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Beschreiben Sie bitte unten kurz den Fehler.", + "description": "" + }, + "remove_button": { + "message": "Ausgewählte entfernen", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Durch das Verwenden von Privacy Badger werden Sie Teil der Electronic Frontier Foundation und Millionen anderer Nutzer im Kampf für Datenschutz. Wir sind eine gemeinnützige Organisation, die sich für Ihre Rechte im Internet einsetzt. Vielen Dank für Ihre Teilnahme!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Stellen Sie zum Ausschließen von Domains Ihrem Suchbegriff ein »-« voran. Beispielsweise zeigt ».co -.com« als Ergebnis ».co«- und ».co.uk«-Domains an, aber keine ».com«-Domains.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Falls Sie annehmen, dass Privacy Badger bei einer Webseite Probleme verursacht (z. B. ein Video wird nicht wiedergegeben), so können Sie auf die Schaltfläche »Deaktivieren« klicken, um Privacy Badger für diese Website auszuschalten.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Datenschutzerklärung", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Beschreibung", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Ihr Badger hat noch nicht entschieden, ob diese Domains geblockt werden sollen", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Domains anzeigen, deren Blockstatus noch nicht entschieden ist:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Die nachfolgenden Domains scheinen Ihre Internetaktivitäten nicht zu verfolgen", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Optionen", + "description": "" + }, + "share_button_title_facebook": { + "message": "Auf Facebook teilen", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger lernt automatisch, unsichtbare Tracker zu blocken.", + "description": "" + }, + "report_fail": { + "message": "Huch! Etwas ist schief gelaufen.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger hat diese $BUTTON$-Schaltfläche ersetzt", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger hat dieses $WIDGET$-Widget ersetzt", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Einmalig erlauben", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Auf dieser Site immer erlauben", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Cloud-Sync:
  • Erfordert Firefox-/Chrome-Sync
  • »Hochladen« überschreibt alle in der Cloud gespeicherten Privacy-Badger-Daten
  • »Herunterladen« kombiniert die Listen der Sites, auf denen Privacy Badger deaktiviert ist
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Hochladen", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Deaktivierte Sites zu Cloud exportieren", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Deaktivierte Sites von Cloud importieren", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Cloud-Daten erfolgreich importiert.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Cloud-Daten konnten nicht heruntergeladen werden.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Cloud-Daten erfolgreich hochgeladen.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Cloud-Daten konnten nicht hochgeladen werden.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Keine herunterzuladenden Cloud-Daten.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Ihren Freunden mitteilen", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Teilen", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger hat $COUNT$ mögliche Tracker auf $DOMAIN$ geblockt:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) ist eine Browser-Erweiterung, die automatisch lernt, unsichtbare Tracker zu blocken. Privacy Badger wird von der Electronic Frontier Foundation entwickelt, einer gemeinnützigen Organisation, die sich für Ihre Rechte im Internet einsetzt.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "In Zwischenablage kopieren", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopiert", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nichts zu tun auf dieser Seite", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Auf besonderen Seiten wie dieser funktioniert Privacy Badger nicht. Versuchen Sie eine andere.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Für diese Website ist Privacy Badger deaktiviert", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Ersetzen von Widgets", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Beim Blocken von sozialen Schaltflächen und anderen potentiell nützlichen (Video-, Audio-, Kommentar-)Widgets kann Privacy Badger diese mit Platzhaltern ersetzen, die durch Anklicken aktiviert werden können.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/en_US/messages.json b/src/_locales/en_US/messages.json new file mode 100644 index 0000000..f10fe37 --- /dev/null +++ b/src/_locales/en_US/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Blocked $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Invalid JSON file.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Are you sure you want to remove this domain from Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "No tracking for $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Currently Privacy Badger only checks if third parties are using cookies, HTML5 local storage, or canvas fingerprinting to track your browsing. Some of these domains may be using tracking methods that Privacy Badger can't detect.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Check if third-party domains comply with EFF's Do Not Track policy", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Please add a valid domain or URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Donate to EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Help us by donating and sharing your support for our tools", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Not an ad blocker, I'm different", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Thanks! We'll get to the bottom of it.", + "description": "" + }, + "dnt_tooltip": { + "message": "This domain promises to not track you", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "next section", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Please tell us about the following error:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Manage Data", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Report an Error", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "e.g. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Click here to block this domain from setting cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blocked", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Prevent WebRTC from leaking local IP address", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger automatically learns to block invisible trackers. Take a minute to see how.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "What's Wrong?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Tracking Domains", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Share on Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Learn how Privacy Badger protects your privacy", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Download", + "description": "" + }, + "import": { + "message": "Import", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Don't replace the following widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Enable widget replacement", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Show domains that don't appear to be tracking you", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Submit Error", + "description": "" + }, + "badger_status_allow": { + "message": "Allowed $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "What is Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Search domains:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Learn in Private/Incognito windows", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Enabling learning in Private/Incognito windows may leave traces of your private browsing history on your computer. By default, Privacy Badger will block trackers it already knows about in Private/Incognito windows, but it won't learn about new trackers. You might want to enable this option if a lot of your browsing happens in Private/Incognito windows.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Show count of trackers", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "What is a tracker?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Please don't forget to click on 'Did Privacy Badger break this site'. We respect your privacy so we don't send automatic reports.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger Options", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Disabled Sites", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Enable Privacy Badger for this site", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filter by type:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Tracker list and settings updated successfully!", + "description": "" + }, + "export_user_data": { + "message": "Export user data", + "description": "" + }, + "manage_data_intro": { + "message": "Importing user data:
  • Overwrites general settings
  • Combines lists of disabled sites
  • Combines information about what trackers Privacy Badger has seen
  • Overwrites slider customizations
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Reset", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Reset tracking domains", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Resetting tracking domains will:\n\n • Delete all data about trackers that Privacy Badger has learned from your browsing\n • Restore the tracking domain list to the latest pre-trained list (visit www.eff.org/badger-pretraining to learn more)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Remove all", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Remove all tracking domains", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Removing all tracking domains will:\n\n • Delete everything Privacy Badger knows about trackers\n • Cause Privacy Badger to not block anything until it has had a chance to re-learn from your browsing", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "You're now protected by Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "To learn how Privacy Badger works, click below for a quick tutorial.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC can leak your local IP address. Note that enabling this option may degrade performance on web conferencing apps like Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "General Settings", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Take the tour", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Click here to block this domain entirely", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "version $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blocked cookies from $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "partially-blocked", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "I understand; please show me the tracking domains list anyway", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Thank you for installing Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Please select a file to import.", + "description": "" + }, + "report_broken_site": { + "message": "Did Privacy Badger break this site? Let us know!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Center the slider to block cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Catches sneaky trackers", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Close", + "description": "" + }, + "import_user_data": { + "message": "Import user data", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-compliant", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Help", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "allowed", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Privacy is a team sport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "You shouldn't need to modify anything here.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "all", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Cancel", + "description": "" + }, + "tooltip_block": { + "message": "Move the slider left to block a domain", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "user-controlled", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "A project of the Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Add domain", + "description": "" + }, + "tooltip_allow": { + "message": "Move the slider right to allow a domain", + "description": "" + }, + "popup_disable_for_site": { + "message": "Disable Privacy Badger for this site", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Click here to allow this domain", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger will NEVER share data about your browsing unless you choose to share it.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger hasn't detected any tracking domains yet. Keep browsing!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger starts blocking once it sees the same tracker on three different websites. Three strikes and it's out!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filter by status:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Briefly describe the error below.", + "description": "" + }, + "remove_button": { + "message": "Remove selected", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "When you use Privacy Badger you join the Electronic Frontier Foundation and millions of other users in the fight for privacy. We are a nonprofit fighting for your rights online. Thanks for joining us!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "To exclude domains, prepend your search term with \"-\". For example, \".co -.com\" will show .co and .co.uk but not .com domains.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "If you think Privacy Badger is breaking a page (a video doesn't play, for example), you can click the 'Disable' button to turn off Privacy Badger for that site.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Privacy Policy", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Description", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "The domains below don't appear to be tracking you", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Options", + "description": "" + }, + "share_button_title_facebook": { + "message": "Share on Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger automatically learns to block invisible trackers.", + "description": "" + }, + "report_fail": { + "message": "Oops. Something went wrong.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger has replaced this $BUTTON$ button", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Allow once", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Always allow on this site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Cloud sync:
  • Requires Firefox/Chrome Sync
  • Upload overwrites any existing Privacy Badger data in the cloud
  • Download combines the lists of sites where your Badger is disabled
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Upload", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Export disabled sites to cloud", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Import disabled sites from cloud", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Cloud data imported successfully.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Cloud data could not be downloaded.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Cloud data uploaded successfully.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Cloud data could not be uploaded.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "No cloud data to download.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Tell your friends", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Share", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) is a browser extension that automatically learns to block invisible trackers. Privacy Badger is made by the Electronic Frontier Foundation, a nonprofit that fights for your rights online.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copy to clipboard", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copied", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nothing to do on this page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger doesn't work on special pages like this one. Try browsing somewhere else.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Replacement", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "When blocking social buttons and other potentially useful (video, audio, comments) widgets, Privacy Badger can replace them with click-to-activate placeholders.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} diff --git a/src/_locales/eo/messages.json b/src/_locales/eo/messages.json new file mode 100644 index 0000000..a410b93 --- /dev/null +++ b/src/_locales/eo/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Blokita $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Malĝusta dosiero JSON.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Ĉu vi certas pri forigi tiun ĉi nomregnon el Privata Melo?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Ne spuras por $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Nune Privata Melo nur kontrolas ĉu eksteraj liverantoj uzas kuketojn, lokan konservejon HTML5 aŭ kanvasan fingrospuron por spuri vian retumadon. Iuj de tiuj nomregnoj povas uzi aliajn spurajn rimedojn, kiujn Privata Melo ne povas malkovri.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Kontroli ĉu eksteraj domajnoj kongruas kun la politiko pri nespurado de EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Bonvolu aldoni ĝustan nomregnon aŭ URL-n.", + "description": "" + }, + "donate_to_eff": { + "message": "Donaci al EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Helpu nin per donaci kaj oferi helpon al niaj iloj", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Malsama ol reklam-spuriloj", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Dankon! Ni okupiĝos pri tio.", + "description": "" + }, + "dnt_tooltip": { + "message": "Tiu ĉi nomregno promesas al vi ne spuri.", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Per bloki tiun ĉi nomregnon, retejoj povus misfunkcii", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Klaku por permesi al Privata Melo decidi kiel trakti tiun ĉi nomregnon", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "antaŭen", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Bonvolu informi nin pri la jena eraro:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Administri datumojn", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Raporti eraron", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "ekz. www.nomregno.com, *.nomregno.net, nomregno.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Klaku tie ĉi por bloki tiun ĉi nomregnon de agordi kuketojn", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blokitaj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Preventi WebRTC de malkovri lokan IP-adreson", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privata Melo aŭtomate lernas bloki nevideblajn spurilojn. Jen konciza klarigo kiel.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Kio malfunkcias?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Spurantaj nomregnoj", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Kunhavigi per Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Sciigi pri kiel Privata Melo protektas vian privatecon", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Elŝuti", + "description": "" + }, + "import": { + "message": "Enporti", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Ne anstataŭigi la jenajn ret‑aplikaĵetojn:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Aktivigi anstataŭigon de ret‑aplikaĵetoj", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Montri nomregnojn, kiuj verŝajne ne spuras vin", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Raporti eraron", + "description": "" + }, + "badger_status_allow": { + "message": "Permesata $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Kio la Privata Melo estas?", + "description": "" + }, + "options_domain_search": { + "message": "Serĉi nomregnon:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Lerni bloki novajn spurilojn surbaze de via retumado", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Aktivigo de lernadu dum retumado povas igi vin pli identigebla al retejoj", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Lerni en privataj fenestroj", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Aktivigo de lernado en privataj fenestroj povas resti spurojn de historio de via privata retumado en via komputilo. Implicite Privata Melo blokos jam-konatajn spurilojn en privataj langetoj, tamen ne lernos pri novaj spuriloj. Vi povas aktivigi tiun ĉi agordon, se vi multe retumas en privataj fenestroj.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Montri nombron de spuriloj", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Kio estas spurilo?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Bonvolu ne forgesi klaki “Ĉu Privata Melo difektis tiun ĉi retejon?”. Ni estimas vian privatecon, do ni ne sendas aŭtomatajn raportojn.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Agordoj pri Privata Melo", + "description": "" + }, + "report_terms": { + "message": "Tio ĉi aŭtomate sendos la jenajn datumojn al EFF: la nune vizitatan retpaĝon, version de via retumilo, version de Privata Melo kaj staton de ĉiuj ŝovilojn por tiu ĉi retpaĝo.", + "description": "" + }, + "whitelisted_domains": { + "message": "Neblokataj retejoj", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Aktivigi Privatan Melon por tiu ĉi retejo", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtri laŭ speco:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Sukcese enportis spuril-liston kaj agordojn!", + "description": "" + }, + "export_user_data": { + "message": "Elporti datumojn de uzanto", + "description": "" + }, + "manage_data_intro": { + "message": "Enporti datumojn de uzantoj por:\n
    \n
  • anstataŭigi ĝeneralajn agordojn
  • \n
  • kombini listojn de neblokataj retejoj
  • \n
  • kombini informojn pri observitaj spuriloj
  • \n
  • anstataŭigi agordojn de ŝovilo
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Rekomencigi", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Rekomencigi spurantajn nomregnojn", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Rekomencigu spurantajn nomregnojn por:\n\n • forviŝi ĉiujn datumojn pri spurilojn, kiujn Privata Melo lernis dum retumado\n • restarigi la liston de spurantaj nomregnoj al la plej aktuala antaŭlernita versio (legu www.eff.org/badger-pretraining por pli da informoj)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Forigi ĉiujn", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Forigi ĉiujn spurantajn nomregnojn", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Forigu ĉiujn spurantajn nomregnojn por:\n\n • forigi ĉion, kion Privata Melo scias pri spuriloj\n • igi Privatan Melon ne bloki ion ajn ĝis ĝi relernos surbaze de via retumado", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Vi nun estas protektata de Privata Melo.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Por lerni kiel Privata Melo funkcias, klaku sube por koncizan gvidilon.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC povas malkovri vian lokan IP-adreson. Rimarku, ke tio ĉi povas malpliigi rendimenton de aplikaĵoj por retaj konferencoj, ekz. Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Ĝeneralaj agordoj", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privateco", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Spertulaj", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Enkonduko", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Klaku tie ĉi por tute bloki tiun ĉi nomregnon", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versio $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blokitaj kuketoj el $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "parte-blokitaj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Mi konscias, tamen bonvolu montri al mi la liston de spurantaj nomregnoj.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Dankon al vi pro instali Privatan Melon!", + "description": "" + }, + "import_select_file": { + "message": "Bonvolu elekti dosieron por enporti.", + "description": "" + }, + "report_broken_site": { + "message": "Ĉu Privata Melo difektis tiun ĉi retejon? Sciigu nin!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centrigu la ŝovilon por bloki kuketojn.", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Kaptas trompajn spurilojn", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Fermi", + "description": "" + }, + "import_user_data": { + "message": "Enporti datumojn de uzanto", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-kongruaj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Helpo", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permesitaj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Privateco estas kunlaboro!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Vi ne devus bezoni modifi ion ajn tie ĉi.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "ĉiuj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Nuligi", + "description": "" + }, + "tooltip_block": { + "message": "Movu la ŝovilon maldekstren por bloki nomregnon.", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Malaktivigi sendi adresojn de vizitataj retejoj al Google. Tio ĉi malaktivigas sugestojn pri similaj retejoj, kiam la paĝo ne povas esti malfermita.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Malaktivigi kontroladon de ligiloj", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "uzant-kontrolitaj", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "Blokitaj eblaj $LINK_START$spuriloj$LINK_END$: $COUNT$", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Neniu blokita $LINK_START$spurilo$LINK_END$", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Estas neniu ekstera rimedo sur tiu ĉi retpaĝo. Vivu la privateco!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Projekto de Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Aldoni nomregnon", + "description": "" + }, + "tooltip_allow": { + "message": "Movu la ŝovilon dekstren por permesi nomregnon.", + "description": "" + }, + "popup_disable_for_site": { + "message": "Malaktivigi Privatan Melon por tiu ĉi retejo", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klaku tie ĉi por permesi tiun ĉi nomregnon", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privata Melo NENIAM diskonigos datumojn pri via retumado escepte se vi decidos alie.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privata Melo ne malkovris iun ajn spurantan nomregnon ĝis nun. Pluigu retumi!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privata Melo", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privata Melo komencas bloki kiam ĝi rimarkas la saman spurilon ĉe tri diversaj retejoj. Tri aperoj kaj ĝi malaperas!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtri laŭ stato:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Koncize priskribu la eraron sube.", + "description": "" + }, + "remove_button": { + "message": "Forigi elektitajn", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Kiam vi uzas Privatan Melon vi aniĝas al la Ret-Lima Fondaĵo (EFF) kune kun milionoj da aliaj retanoj en la batalo por privateco. Ni estas ne-profit-cela fondaĵo, kiu batalas por viaj rajtoj en la interreto. Dankon por kuniĝi al ni!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Por escepti nomregnojn, antaŭskribu vian serĉon per “-”. Ekzemplo: “co -.com” montros domajnojn .co kaj .co.uk sed ne .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Se viaopinie Privata Melo difektas retpaĝon (ekzemple filmeto ne ludas), vi povas klaki la butonon “malaktivigi” por malaktivigi Privatan Melon por tiu retejo.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Privateca politiko", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Priskribo", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Via Melĉjo ankoraŭ ne decidiĝis ĉu tiuj ĉi nomregnoj estu blokitaj", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Montri nomregnojn, pri kiuj Privata Melo ne decidiĝis ĉu bloki ilin:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "La subaj nomregnoj verŝajne ne spuras vin", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Agordoj", + "description": "" + }, + "share_button_title_facebook": { + "message": "Kunhavigi per Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privata Melo aŭtomate lernas bloki nevideblajn spurilojn.", + "description": "" + }, + "report_fail": { + "message": "Ho ne! Eraro okazis.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privata Melo anstataŭigis tiun ĉi butonon de $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privata Melo anstataŭigis tiun ĉi ret‑aplikaĵeton $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permesi unufoje", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Ĉiam permesi en tiu ĉi retejo", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Samtempigo en servilo:\n
    \n
  • postulas Firefox Spegulado/Chrome Sync
  • \n
  • alŝuto anstataŭigas ĉiujn ekzistajn datumojn de Privata Melo en la servilo
  • \n
  • elŝuto kunigas listojn de retejoj kun malaktiva Privata Melo
  • \n
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Alŝuti", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Elporti neblokatajn retejojn al servilo", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Enporti neblokatajn retejojn el servilo", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Sukcese enportis datumojn.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Ne povas elŝuti datumojn el servilo.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Sukcese alŝutis datumojn.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Ne povas alŝuti datumojn al servilo.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Neniuj datumoj en la servilo por elŝuti.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Sciigu amikojn", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Diskonigi", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privata Melo blokis $COUNT$ eblajn spurilojn ĉe $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privata Melo (www.eff.org/privacybadger) estas retumila etendaĵo, kiu aŭtomate lernas kiel bloki nevideblajn spurilojn. Privata Melo estas farita de Electronic Frontier Foundation, ne-profit-cela fondaĵo, kiu batalas por viaj rajtoj en la interreto.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Kopii al tondejo", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopiita", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Estas nenio por fari sur tiu ĉi paĝo", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privata Melo ne funkcias sur specialaj paĝoj kiel tiu ĉi. Provu malfermi alian paĝon.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privata Melo estas malaktivigita por tiu ĉi retejo", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Anstataŭigi ret‑aplikaĵetojn", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Privata Melo povas bloki butonojn de sociaj retejoj kaj aliajn virtuale uzeblajn aplikaĵetojn (filmetojn, aŭdaĵojn, komentojn), tiu ĉi eblaĵo anstataŭigas ilin per klakeblaj (ne aŭtomate montriĝantaj) butonoj.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json new file mode 100644 index 0000000..76d4f17 --- /dev/null +++ b/src/_locales/es/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Bloqueado $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Archivo JSON no válido.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "¿Seguro de que deseas eliminar este dominio de Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Sin rastreo para $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Actualmente, Privacy Badger solo comprueba si hay terceras partes usando cookies, almacenamiento local HTML5 o huellas digitales de «canvas» para rastrear tu navegación. Algunos de estos dominios pueden estar usando métodos de rastreo que Privacy Badger no puede detectar.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Comprobar si los dominios de terceros cumplen con la política de No rastrear de la EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Por favor, añade un dominio o URL válido.", + "description": "" + }, + "donate_to_eff": { + "message": "Donar a la EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Ayúdenos con un donativo, o tu apoyo compartiendo nuestras herramientas", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "No soy un bloqueador de anuncios, soy diferente", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "¡Gracias! Llegaremos al fondo del asunto.", + "description": "" + }, + "dnt_tooltip": { + "message": "Este dominio promete no rastrearte", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bloquear este dominio es conocido por romper sitios web", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Haz clic para devolver el control de este dominio a Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "siguiente sección", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Por favor, infórmanos del siguiente error:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gestionar datos", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Reportar un error", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "p. ej., www.dominio.com, *.dominio.net, dominio.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Haz clic aquí para impedir que este dominio cree cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Impedir que WebRTC divulgue la dirección IP local", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger aprende automáticamente a bloquear rastreadores invisibles. Tómate un minuto para ver cómo lo hace.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "¿Qué está mal?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Dominios de rastreo", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Compartir en Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Aprende cómo Privacy Badger protege tu privacidad", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Descargar", + "description": "" + }, + "import": { + "message": "Importar", + "description": "" + }, + "options_hide_social_widgets": { + "message": "No sustituir los siguientes widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Habilitar la sustitución de widgets", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Mostrar los dominios que no parecen estar rastreándote", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Informar de un error", + "description": "" + }, + "badger_status_allow": { + "message": "Permitido $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "¿Qué es Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Buscar dominios:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Aprende a bloquear rastreadores nuevos de tu navegación", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Permitir el aprendizaje puede hacerte más identificable con los sitios web", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Aprender en ventanas privadas o de incógnito", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Permitir el aprendizaje en ventanas privadas o de incógnito puede dejar rastros de tu historial de navegación privada en tu computadora. Privacy Badger bloquea de forma predeterminada los rastreadores que ya conoce en las ventanas privadas o de incógnito, pero no reconoce rastreadores nuevos. Es posible que desees habilitar esta opción si gran parte de tu navegación ocurre en ventanas privadas o de incógnito.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger ya no aprenderá de tu navegación de forma predeterminada.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Clic abajo para más información.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Aprende cómo está cambiando Privacy Badger", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Mostrar el número de rastreadores", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "¿Qué es un rastreador?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Por favor, no olvides hacer clic en «¿Ha roto Privacy Badger este sitio?». Respetamos tu privacidad, por lo que no enviamos reportes de forma automática.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Opciones de Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Esto enviará automáticamente la siguiente información a la EFF: la página que estás visitando actualmente, la versión de tu navegador, la versión de Privacy Badger y el estado de todos los controles deslizantes en esta página.", + "description": "" + }, + "whitelisted_domains": { + "message": "Sitios deshabilitados", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Habilitar Privacy Badger en este sitio", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrar por tipo:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "¡La lista de rastreadores y la configuración se han actualizado correctamente!", + "description": "" + }, + "export_user_data": { + "message": "Exportar datos de usuario", + "description": "" + }, + "manage_data_intro": { + "message": "La importación de datos de usuario:
  • Sobrescribe la configuración general
  • Combina listas de sitios deshabilitados
  • Combina información sobre los rastreadores que Privacy Badger has visto
  • Sobrescribe las personalizaciones de los controles deslizantes
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Restablecer", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Restablecer dominios de rastreo", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Restablecer los dominios de rastreo:\n\n • Elimina todos los datos sobre los rastreadores que Privacy Badger ha aprendido de tu navegación\n • Restaura la lista de dominios de rastreo a la más reciente ya entrenada (visita www.eff.org/badger-pretraining para obtener más información)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Eliminar todo", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Eliminar todos los dominios de rastreo", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Eliminar todos los dominios de rastreo:\n\n • Elimina todo lo que sabe Privacy Badger sobre los rastreadores\n • Hace que Privacy Badger no bloquee nada hasta que haya tenido la oportunidad de volver a aprender de tu navegación", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Ahora te encuentras bajo la protección de Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Para saber cómo funciona Privacy Badger, haz clic abajo para un tutorial rápido.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC puede divulgar tu dirección IP local. Ten en cuenta que habilitar esta opción puede reducir el rendimiento en aplicaciones de conferencia web como Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Configuración general", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacidad", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Avanzado", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Hacer el recorrido", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Haz clic aquí para bloquear por completo este dominio", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versión $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookies bloqueadas de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "parcialmente bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Entiendo; por favor, muéstrame la lista de dominios de rastreo de todos modos", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "¡Gracias por instalar Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Por favor, selecciona un archivo para importar.", + "description": "" + }, + "report_broken_site": { + "message": "¿Ha roto Privacy Badger este sitio? ¡Háganoslo saber!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centra el control deslizante para bloquear las cookies", + "description": "" + }, + "intro_learns": { + "message": "Aprende automáticamente", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "En lugar de mantener listas de qué bloquear, Privacy Badger descubre automáticamente los rastreadores según su comportamiento.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Neutraliza rastreadores ocultos", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "El rastreo invisible ocurre de muchas formas; los anuncios son solo la punta visible del iceberg. Privacy Badger envía la señal Control de privacidad global, para excluirte de compartir y vender datos, y la señal No rastrear para indicar a las empresas que no te rastreen. Si ignoran tus deseos, Privacy Badger aprenderá a bloquearlos, ya sean anunciantes o rastreadores de otro tipo.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Cerrar", + "description": "" + }, + "import_user_data": { + "message": "Importar datos de usuario", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "respeta DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Ayuda", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permitido", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "¡La privacidad es un deporte de equipo!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "No deberías necesitar modificar nada aquí.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "todo", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Cancelar", + "description": "" + }, + "tooltip_block": { + "message": "Mueve el control deslizante a la izquierda para bloquear un dominio", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Enviar a los sitios web las señales «Control de privacidad global» y «No rastrear»", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Deshabilitar el envío de las direcciones web que visitas a Google. Esto deshabilita las sugerencias de páginas similares cuando no se puede encontrar una página.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Deshabilitar auditoría de hipervínculos", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "controlado por usuario", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger está deshabilitado en los siguientes sitios. Esto significa que Privacy Badger no bloqueará nada cuando visites los sitios listados aquí, y no enviará las señales No rastrear o Control de privacidad global.

Si crees que Privacy Badger está rompiendo una página o deseas permitir que un sitio en particular comparta o venda tus datos, puedes escribir el dominio de dicha página en el cuadro de abajo y hacer clic en el botón «Añadir dominio».

Alternativamente, cuando ya tengas seleccionada la pestaña de la página, simplemente haz clic en el botón de Privacy Badger en la barra de herramientas del navegador y luego haz clic en el botón «Deshabilitar».

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ $LINK_START$rastreadores$LINK_END$ potenciales bloqueados", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No hay $LINK_START$rastreadores$LINK_END$ bloqueados", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "No hay recursos de terceros en esta página. ¡Hurra por la privacidad!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Un proyecto de la Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Añadir dominio", + "description": "" + }, + "tooltip_allow": { + "message": "Mueve el control deslizante a la derecha para permitir un dominio", + "description": "" + }, + "popup_disable_for_site": { + "message": "Deshabilitar Privacy Badger en este sitio", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Haz clic aquí para permitir este dominio", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger NUNCA comparte datos sobre tu navegación a menos que elijas compartirlos.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger ha decidido bloquear $COUNT$ $TRACKER_LINK_START$dominios de rastreo$TRACKER_LINK_END$ potenciales hasta el momento", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger no ha detectado ningún dominio de rastreo por el momento. ¡Sigue navegando!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger comienza a bloquear una vez que ve el mismo rastreador en tres sitios web diferentes. ¡Tres strikes y está afuera!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrar por estado:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Describe brevemente el error aquí abajo.", + "description": "" + }, + "remove_button": { + "message": "Eliminar seleccionado", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Cuando utilizas Privacy Badger te unes a la Electronic Frontier Foundation y a millones de otros usuarios en la lucha por la privacidad. Somos una organización sin ánimo de lucro que lucha por tus derechos en línea. ¡Gracias por unirte a nosotros!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Para excluir dominios, preceda el término de búsqueda con «-». Por ejemplo, «.co -.com» muestra dominios .co y .co.uk, pero no .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Si crees que Privacy Badger está rompiendo una página (un vídeo no se reproduce, por ejemplo), puede hacer clic en el botón «Deshabilitar» para deshabilitar Privacy Badger en ese sitio.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Política de privacidad", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Descripción", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Privacy Badger aún no ha decidido si estos dominios deben ser bloqueados", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Mostrar dominios que Privacy Badger aún no ha decidido bloquear:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Los siguientes dominios no parecen estar rastreándote", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opciones", + "description": "" + }, + "share_button_title_facebook": { + "message": "Compartir en Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger aprende automáticamente a bloquear rastreadores invisibles.", + "description": "" + }, + "report_fail": { + "message": "Ups. Algo salió mal.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger ha sustituido este botón de $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger ha sustituido este widget de $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permitir una vez", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Permitir siempre en este sitio", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Sincronización en la nube:
  • Requiere Firefox/Chrome Sync
  • La subida de datos sobrescribe cualquier dato existente de Privacy Badger en la nube
  • La descarga combina las listas de sitios en los que Privacy Badger está deshabilitado
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Subir", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exportar sitios deshabilitados a la nube", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importar sitios deshabilitados de la nube", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Los datos de la nube se han importado correctamente.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "No se han podido descargar los datos de la nube.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Los datos para nube se han subido correctamente.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "No se han podido subir los datos para la nube.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "No hay datos en la nube para descargar.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Cuéntaselo a tus amigos", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Compartir", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger ha bloqueado $COUNT$ rastreadores potenciales en $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) es una extensión de navegador que aprende automáticamente a bloquear rastreadores invisibles. Privacy Badger está hecho por la Electronic Frontier Foundation, una organización sin ánimo de lucro que lucha por tus derechos en línea.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copiar al portapapeles", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copiado", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nada que hacer en esta página", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger no funciona en páginas especiales como ésta. Intenta buscar en otro lugar.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger está deshabilitado en este sitio", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Sustitución de widgets", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Al bloquear botones de redes sociales y otros widgets potencialmente útiles (vídeo, audio, comentarios), Privacy Badger puede sustituirlos con marcadores de posición de clic para activarlos.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json new file mode 100644 index 0000000..cc1562e --- /dev/null +++ b/src/_locales/fa/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ بلاک شد", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "فایل JSON نامعتبر.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "آیا مطمئن هستید که میخواهید این را از پرایوسی بجر حذف کنید؟", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "هیچ ردیابی برای $DOMAIN$ وجود ندارد", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "هم اکنون پرایوسی بجر فقط چک میکند آیا اشخاص ثالث از کوکی ها، مخزن محلی HTML5، اثرانگشت کانواس برای ردیابی شما استفاده میکنند یا نه. بعضی از این دامنه ها ممکن است از متد های ردیابی استفاده کنند که پرایوسی بجر قابلیت شناسایی آن ها را ندارد.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "چک کن آیا دامنه های شخص ثالث با خط مشی ردیابی نکن EFF تطابق دارند", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "لطفا یک دامنه یا URL معتبر اضافه کنید.", + "description": "" + }, + "donate_to_eff": { + "message": "کمک مالی به EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "با کمک مالی و حمایت از ابزار هایمان میتوانید به ما کمک کنید", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "اد بلاکر نیستم، من فرق دارم", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "ممنون! پیگیری خواهیم کرد.", + "description": "" + }, + "dnt_tooltip": { + "message": "این دامنه اطمینان می دهد که شما را ردیابی نخواهد کرد", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "بخش بعدی", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "لطفا به ما درباره خطای زیر بگویید:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "مدیریت داده", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "گزارش خطا", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "برای مثال www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "برای منع این دامنه از تنظیم کردن کوکی ها اینجا کلیک کنید", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "بلاک شده", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "نگذار WebRTC آدرس IP را لو بدهد", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "پرایوسی بجر به صورت اتوماتیک یاد می گیرد تا ردیاب های مخفی را بلاک کند. برای اینکه بفهمید چگونه اینکار را انجام می دهد، یک دقیقه وقت بگذارید.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "چه مشکلی وجود دارد؟", + "description": "" + }, + "options_domain_list_tab": { + "message": "دامنه های ردیاب", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "اشتراک گذاری بر روی توییتر", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "درباره اینکه پرایوسی بجر چگونه از حریم خصوصی شما محافظت میکند مطالعه کنید", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "دانلود", + "description": "" + }, + "import": { + "message": "ایمپورت", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Don't replace the following widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Enable widget replacement", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "دامنه‌هایی که شما را ردیابی نمی‌کنند را نمایش بده", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "ارسال خطا", + "description": "" + }, + "badger_status_allow": { + "message": "به $DOMAIN$ اجازه داده شده است", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "پرایوسی بجر چیست؟", + "description": "" + }, + "options_domain_search": { + "message": "جستجوی دامنه ها:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "یادگیری در پنجره های خصوصی/ناشناس", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "اجازه یادگیری در پنجره های خصوصی/ناشناس ممکن است ردی از تاریخچه گشت خصوصی شما در وب روی کامپیوترتان به جا بگذارد. به صورت پیش فرض، پرایوسی بجر ردیاب هایی که در پنجره های خصوصی/ناشناس می شناسد را بلاک خواهد کرد، اما درباره ردیاب های جدید اطلاعی کسب نخواهد کرد. اگر بیشتر وقت خود را در پنجره های خصوصی/ناشناس می گذرانید شاید بهتر باشد که این گزینه را فعال کنید.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "نمایش تعداد ردیاب‌ها", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "ردیاب چیست؟", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "فراموش نکنید تا روی 'آیا پرایوسی بجر باعث شده است تا این سایت به درستی کار نکند' کلیک کنید. ما به حریم خصوصی شما احترام میگذاریم برای همین به صورت خودکار گزارش نمی فرستیم.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "گزینه های پرایوسی بجر", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "سایت های غیر فعال شده", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "فعال سازی پرایوسی بجر برای این سایت", + "description": "" + }, + "options_domain_type_filter": { + "message": "فیلتر کردن بر اساس نوع:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "لیست ردیاب و تنظیمات با موفقیت آپدیت شد!", + "description": "" + }, + "export_user_data": { + "message": "انتقال داده کاربری", + "description": "" + }, + "manage_data_intro": { + "message": "ایمپورت داده کاربری:
  • اوورایت تنظیمات کلی
  • ترکیب لیست سایت های غیرفعال شده
  • ترکیب اطلاعات درباره ردیاب هایی که پرایوسی بجر با آن ها برخورد داشته است
  • اوورایت کاستومایزیشن اسلایدر
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "ریست", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "ریست دامنه های ردیاب", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "ریست کردن دامنه های ردیاب باعث می شود:\n\n• تمام داده های مربوط به ردیاب هایی که پرایوسی بجر از گردش شما در وب آموخته از بین برود\n• بازیابی لیست دامنه ردیاب به آخرین لیست از پیش پرورش شده ( برای اطلاعات بیشتر به www.eff.org/badger-pretraining بروید)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "حذف همه", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "حذف همه دامنه های ردیاب", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "حذف تمام دامنه های ردیاب باعث می شود:\n\n• تمام چیزهایی که پرایوسی بجر درباره ردیاب ها می داند از بین برود\n• پرایوسی بجر تا دفعه بعدی که مشغول گردش در وب هستید و فرصت یادگیری دوباره دارد چیزی را بلاک نکند", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "شما هم اکنون توسط پرایوسی بجر محافظت می شوید.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "برای یادگیری بیشتر درباره عملکرد پرایوسی بجر، روی قسمت پایین کلیک کنید.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC میتواند منجر به لو رفتن آدرس IP شما شود. توجه داشته باشید که این گزینه میتواند باعث کندی عملکرد در برنامه های کنفرانسی وب مثل Google Hangouts شود.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "تنظیمات کلی", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "انجام تور", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "برای بلاک کردن این دامنه به صورت کامل روی اینجا کلیک کنید", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "نسخه $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "کوکی های متعلق به$DOMAIN$ بلاک شد", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "بلاک شده به صورت جزئی", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "متوجه هستم; لطفا لیست دامنه هایی که ردیابی میکنند را به من نشان بده", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "بابت نصب پرایوسی از شما ممنونیم!", + "description": "" + }, + "import_select_file": { + "message": "لطفا یک فایل را برای ایمپورت کردن انتخاب کنید.", + "description": "" + }, + "report_broken_site": { + "message": "آیا پرایوسی بجر باعث شده است تا این سایت به درستی کار نکند؟ ما را در جریان بگذارید!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "برای بلاک کردن کوکی ها اسلایدر را در وسط قرار بدهید", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "ردیاب های موذی را میگیرد", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "بستن", + "description": "" + }, + "import_user_data": { + "message": "ایمپورت داده کاربری", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "سازگار با DNT (ردیابی نکن)", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "راهنما", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "اجازه داده شده", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "حریم خصوصی یک ورزش تیمی می باشد.", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "در اینجا نیاز نیست چیزی را تغییر دهید.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "همه", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "لغو", + "description": "" + }, + "tooltip_block": { + "message": "برای بلاک کردن یک دامنه اسلایدر را به سمت چپ حرکت دهید", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "کنترل شده توسط کاربر", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "پروژه ای از EFF", + "description": "" + }, + "add_domain_button": { + "message": "افزودن دامنه", + "description": "" + }, + "tooltip_allow": { + "message": "برای اجازه دادن به یک دامنه، اسلایدر را به سمت راست حرکت دهید", + "description": "" + }, + "popup_disable_for_site": { + "message": "غیرفعال سازی پرایوسی بجر برای این سایت", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "برای اجازه دادن به این دامنه روی اینجا کلیک کنید", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger will NEVER share data about your browsing unless you choose to share it.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "پرایوسی بجر هنوز نتوانسته هیچ دامنه ی ردیابی پیدا کنید. به گردش خود در وب ادامه دهید!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "پرایوسی بجر", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "زمانی که یک ردیاب را در سه سایت مختلف ببیند، پرایوسی بجر شروع به بلاک کردن آن می کند.", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "فیلتر کردن بر اساس وضعیت:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "به طور مختصر خطای زیر را شرح دهید.", + "description": "" + }, + "remove_button": { + "message": "حذف گزینه (های) انتخاب شده", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "هنگام استفاده از پرایوسی بجر شما به بنیاد مرزی الکترونیکی و میلیون ها کاربر دیگر در مبارزه برای حریم خصوصی می پیوندید. ما یک بنیاد غیر انتفاعی هستیم که برای حقوق آنلاین شما می جنگیم. ممنون از اینکه به ما پیوستید!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "برای استثناء قائل شدن دامنه ها، به اول عبارت \"-\" اضافه کنید. برای مثال، \".co -.com\" دامنه های co. و co.uk. را نمایش داده می شود اما دامنه های com. نمایش داده نخواهند شد.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "اگر فکر میکنید که پرایوسی بجر باعث از کار افتادن سایتی شده است ( برای مثال، یک ویدیو پخش نمی شود)، میتوانید روی دکمه 'غیرفعال سازی' کلیک کنید تا پرایوسی بجر برای آن سایت غیرفعال شود.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "سیاست حفظ حریم خصوصی", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "توضیحات", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "دامنه های زیر به نظر شما را ردیابی نمی کنند", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "گزینه ها", + "description": "" + }, + "share_button_title_facebook": { + "message": "اشتراک گذاری بر روی فیسبوک", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "پرایوسی بجر به صورت اتوماتیک یاد می گیرد تا ردیاب های مخفی را بلاک کند.", + "description": "" + }, + "report_fail": { + "message": "اوه. خطایی رخ داد.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "پرایوسی بجر دکمه $BUTTON$ را جایگزین کرده است", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "یکبار اجازه دادن", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Always allow on this site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "همگام سازی ابری:
  • به همگام سازی فایرفاکس/کروم نیاز دارد
  • آپلود باعث دوباره نویسی داده پرایوسی بجر در کلود می شود
  • دانلود، لیست سایت هایی که پرایوسی بجر برای آن ها غیرفعال است را ترکیب میکند
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "آپلود", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "انتقال سایت های غیرفعال شده به کلود", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "ایمپورت سایت های غیرفعال شده از کلود", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "داده ابری با موفقیت ایمپورت شد.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "داده ابری دانلود نشد.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "داده ابری با موفقیت آپلود شد.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "داده ابری آپلود نشد.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "هیچ داده ابری برای دانلود وجود ندارد.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "به دوستانتان اطلاع دهید", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "به اشتراک بگذارید", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "پرایوسی بجر (www.eff.org/privacybadger) یک افزونه‌ی مرورگر است که به صورت خودکار می‌آموزد تا ردیاب‌های مخفی را مسدود کند. پرایوسی بجر توسط Electronic Frontier Foundation ساخته شده که به صورت غیر انتفاعی و آنلاین برای حقوق شما به می‌جنگد.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "کپی به کلیپ‌بورد", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "کپی شد", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nothing to do on this page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger doesn't work on special pages like this one. Try browsing somewhere else.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Replacement", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "When blocking social buttons and other potentially useful (video, audio, comments) widgets, Privacy Badger can replace them with click-to-activate placeholders.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/fi/messages.json b/src/_locales/fi/messages.json new file mode 100644 index 0000000..bd7796f --- /dev/null +++ b/src/_locales/fi/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ estetty", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "JSON-tiedosto ei kelpaa.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Haluatko varmasti poistaa tämän verkkotunnuksen Privacy Badgerista?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Ei jäljitystä verkkotunnuksesta $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Tällä hetkellä Privacy Badger tarkistaa ainoastaan, käyttävätkö kolmannet osapuolet evästeitä, HTML5:n paikallista tallennusta tai canvas-elementtiin perustuvaa sormenjälkeä seuratakseen verkkoselaamistasi. Jotkin näistä verkkotunnuksista saattavat käyttää seurantamenetelmiä, joita Privacy Badger ei tunnista.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Tarkista, noudattavatko kolmansien osapuolten verkkotunnukset EFF:n Do Not Track -käytäntöä", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Lisää kelvollinen verkkotunnus tai URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Lahjoita EFF:lle", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Auta meitä lahjoittamalla ja antamalla tukesi työkaluillemme", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "En ole mainosten estäjä, olen erilainen", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Kiitos! Selvitämme asian perin pohjin.", + "description": "" + }, + "dnt_tooltip": { + "message": "Tämä verkkotunnus lupaa, ettei se jäljitä sinua", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Tämän verkkotunnuksen estämisen tiedetään rikkovan sivustoja", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Klikkaa palauttaaksesi tämän verkkotunnuksen hallinnan Privacy Badgerille", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "seuraava osio", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Kerro meille seuraavasta virheestä:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Hallitse dataa", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Ilmoita virheestä", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "esim. www.verkkotunnus.com, *.verkkotunnus.net, verkkotunnus.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Klikkaa tästä estääksesi tätä verkkotunnusta asettamasta evästeitä", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "estetty", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Estä WebRTC:tä vuotamasta paikallista IP-osoitetta", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger oppii automaattisesti estämään näkymättömät jäljittimet. Näin se käy:", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Mikä on pielessä?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Jäljittävät verkkotunnukset", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Jaa Twitterissä", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Lue, miten Privacy Badger suojelee yksityisyyttäsi", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Lataa", + "description": "" + }, + "import": { + "message": "Tuo", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Älä korvaa seuraavia sovelmia:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Ota sovelmien korvaaminen käyttöön", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Näytä verkkotunnukset, jotka eivät vaikuta jäljittävän sinua", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Lähetä virheilmoitus", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ sallittu", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Mikä on Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Etsi verkkotunnuksia:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Opi yksityisessä selauksessa", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Jos otat oppimisen käyttöön yksityisessä selauksissakin, tietokoneellesi voi jäädä jälkiä selaushistoriastasi. Oletusarvoisesti Privacy Badger estää tuntemansa jäljittimet selattaessa yksityisesti, muttei opettele uusia jäljittimiä. Tämä valinta voi olla paikallaan, jos selaat nettiä paljon yksityisesti.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Näytä jäljitinten määrä", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Mikä on jäljitin?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Muista klikata 'Rikkoiko Privacy Badger tämän sivuston?' -painiketta. Kunnioitamme yksityisyyttäsi, emmekä siksi lähetä automaattisesti virheilmoituksia.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badgerin asetukset", + "description": "" + }, + "report_terms": { + "message": "Seuraavat tiedot lähetetään automaattisesti EFF:lle: sivu, jolla olet nyt, selaimesi versio, Privacy Badgerin versio sekä kaikkien liukuvalitsimien tila tämän sivun osalta.", + "description": "" + }, + "whitelisted_domains": { + "message": "Käytöstä poistetut sivustot", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Ota Privacy Badger käyttöön tällä sivustolla", + "description": "" + }, + "options_domain_type_filter": { + "message": "Suodata tyypin mukaan:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Jäljitinlista ja asetukset päivitetty!", + "description": "" + }, + "export_user_data": { + "message": "Vie käyttäjädata", + "description": "" + }, + "manage_data_intro": { + "message": "Käyttäjädatan tuominen:
  • Ylikirjoittaa yleiset asetukset
  • Yhdistää listat käytöstä poistetuista sivustoista
  • Yhdistää tiedot Privacy Badgerin havaitsemista jäljittimistä
  • Ylikirjoittaa liukuvalitsimien muokkaukset
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Nollaa", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Nollaa jäljittävät verkkotunnukset", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Jäljittävien verkkotunnusten nollaaminen:\n\n • Poistaa kaiken jäljittäjiä koskevan datan, jonka Privacy Badger on oppinut selaamisestasi\n • Palauttaa jäljittävien verkkotunnusten listaksi uusimman esikoulutetun listan (katso lisätietoja osoitteesta www.eff.org/badger-pretraining )", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Poista kaikki", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Poista kaikki jäljittävät verkkotunnukset", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Kaikkien jäljittävien verkkotunnusten poistaminen:\n\n • Poistaa kaiken, mitä Privacy Badger tietää jäljittimistä\n • Saa Privacy Badgerin olemaan estämättä mitään, kunnes se on saanut mahdollisuuden oppia uudelleen selaamisesi pohjalta", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Privacy Badger suojelee nyt sinua.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Voit klikata alta avataksesi nopean oppaan, joka kertoo, miten Privacy Badger toimii.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC voi vuotaa paikallisen IP-osoitteesi. Huomaa, että tämä valinta voi haitata Google Hangoutsin tapaisten konferenssisovellusten toimintaa.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Yleiset asetukset", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Tietosuoja", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Esittelykierros", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Klikkaa tästä estääksesi tämän verkkotunnuksen kokonaan", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versio $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Evästeet estetty verkkotunnuksesta $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "osittain estetty", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Ymmärrän; näytä silti lista jäljittävistä verkkotunnuksista", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Kiitos, että asensit Privacy Badgerin!", + "description": "" + }, + "import_select_file": { + "message": "Valitse tuotava tiedosto.", + "description": "" + }, + "report_broken_site": { + "message": "Rikkoiko Privacy Badger tämän sivuston? Kerro siitä meille!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Evästeet estetään, kun liukuvalitsin on keskellä", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Nappaa katalat jäljittimet", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Sulje", + "description": "" + }, + "import_user_data": { + "message": "Tuo käyttäjädata", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT:tä noudattava", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Ohje", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "sallittu", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Yksityisyys on tiimipeliä!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Näitä ei pitäisi olla tarpeen muuttaa.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "kaikki", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Peruuta", + "description": "" + }, + "tooltip_block": { + "message": "Verkkotunnus estetään, kun liukuvalitsin on vasemmalla", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "käyttäjän hallitsema", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ mahdollista $LINK_START$jäljitintä$LINK_END$ estetty", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Yhtään $LINK_START$jäljitintä$LINK_END$ ei ole estetty", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Tällä sivulla ei ole kolmansien osapuolten resursseja. Eläköön yksityisyys!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Electronic Frontier Foundationin projekti", + "description": "" + }, + "add_domain_button": { + "message": "Lisää verkkotunnus", + "description": "" + }, + "tooltip_allow": { + "message": "Verkkotunnus sallitaan, kun liukuvalitsin on oikealla", + "description": "" + }, + "popup_disable_for_site": { + "message": "Poista Privacy Badger käytöstä tällä sivustolla", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klikkaa tästä salliaksesi tämän verkkotunnuksen", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger ei koskaan jaa tietoa nettiselaamisestasi, ellet itse halua.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger ei ole vielä havainnut yhtään jäljittävää verkkotunnusta. Jatka selaamista!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger aloittaa estämisen, kun se näkee saman jäljittimen kolmella eri sivustolla. Kolmesta poikki!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Suodata tilan mukaan:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Kuvaile virhetilanne lyhyesti alapuolelle.", + "description": "" + }, + "remove_button": { + "message": "Poista valitut", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Käyttämällä Privacy Badgeria liityt Electronic Frontier Foundationin ja miljoonien muiden käyttäjien joukkoon taistelussa yksityisyyden puolesta. Olemme voittoa tavoittelematon järjestö, joka taistelee oikeuksiesi puolesta verkossa. Kiitos, että liityt mukaan!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Sulkeaksesi verkkotunnuksia pois hausta, laita hakutermisi eteen \"-\". Esimerkiksi \".co -.com\" näyttää .co- ja .co.uk-verkkotunnukset, muttei .com-verkkotunnuksia.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Jos arvelet, että Privacy Badger rikkoo nettisivun (esim. video ei toimi), voit klikata 'Poista käytöstä' -painiketta poistaaksesi Privacy Badgerin käytöstä kyseisellä sivustolla.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Tietosuojakäytäntö", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Kuvaus", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Badgerisi ei ole vielä päättänyt, estetäänkö nämä verkkotunnukset", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Näytä verkkotunnukset, joita Badgerisi ei ole vielä päättänyt estää:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Alla olevat verkkotunnukset eivät vaikuta jäljittävän sinua", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Asetukset", + "description": "" + }, + "share_button_title_facebook": { + "message": "Jaa Facebookissa", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger oppii automaattisesti estämään näkymättömät jäljittimet.", + "description": "" + }, + "report_fail": { + "message": "Hups. Jotakin meni pieleen.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger on korvannut tämän $BUTTON$-painikkeen", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger on korvannut tämän $WIDGET$-sovelman", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Salli tämän kerran", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Salli aina tällä sivustolla", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Pilvisynkronointi:
  • Vaatii Firefox/Chrome Syncin
  • Pilveen lataaminen ylikirjoittaa pilvessä mahdollisesti jo olevan Privacy Badgerin datan
  • Pilvestä lataaminen yhdistää listat sivustoista, joilla Badgerisi on poistettu käytöstä
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Lataa pilveen", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Vie käytöstä poistetut sivustot pilveen", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Tuo käytöstä poistetut sivustot pilvestä", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Data tuotu pilvestä.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Dataa ei voitu ladata pilvestä.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Data ladattu pilveen.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Dataa ei voitu ladata pilveen.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Pilvessä ei ole dataa ladattavaksi.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Kerro kavereillesi", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Jaa", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) on selainlaajennus, joka oppii automaattisesti estämään näkymättömät jäljittimet. Privacy Badgerin on tehnyt Electronic Frontier Foundation, voittoa tavoittelematon järjestö joka taistelee oikeuksiesi puolesta verkossa.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Kopioi leikepöydälle", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopioitu", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Ei mitään tehtävää tällä sivulla", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger ei toimi tämänkaltaisilla erikoissivuilla. Kokeile selata muualla.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger on poistettu käytöstä tällä sivustolla", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Sovelmien korvaaminen", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Estäessään sosiaalisen median painikkeita ja muita mahdollisesti hyödyllisiä (video-, ääni-, kommentti-) sovelmia, Privacy Badger voi korvata ne klikkaamalla aktivoitavilla korvikkeilla.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json new file mode 100644 index 0000000..0814767 --- /dev/null +++ b/src/_locales/fr/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Blocage de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Fichier JSON invalide.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Voulez-vous vraiment supprimer ce domaine de Privacy Badger ?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Pas de traçage de $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "À ce jour, Privacy Badger vérifie seulement si un tiers se sert de cookies, du stockage HTML5 local ou de l'empreinte par canvas pour épier votre navigation. Il se peut que d'autres méthodes non détectées soient utilisées.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Vérifier si les domaines tiers se conforment à la charte de non-pistage de l'EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Veuillez ajouter un domaine ou une URL valide.", + "description": "" + }, + "donate_to_eff": { + "message": "Faire un don à l'EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Aidez-nous par un don et en partageant votre appréciation de nos outils", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Différent d'un bloqueur de publicités", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Merci ! Nous allons étudier ça.", + "description": "" + }, + "dnt_tooltip": { + "message": "Ce domaine s'engage à ne pas vous tracer", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bloquer ce domaine est connu pour perturber certains sites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Cliquer pour redonner le contrôle de ce domaine à Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "section suivante", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Merci de nous signaler l'erreur suivante :", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gestion des données", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Signaler une erreur", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "p. ex. www.domaine.com, *.domaine.net, domaine.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Cliquer ici pour bloquer les cookies de ce domaine", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "bloqués", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Empêcher la fuite des adresses IP locales via WebRTC", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger apprend automatiquement à bloquer les traceurs invisibles. Prenez une minute pour comprendre comment.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Quel est le problème ?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Domaines traceurs", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Partager sur Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Apprendre comment Privacy Badger protège votre vie privée", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Télécharger", + "description": "" + }, + "import": { + "message": "Importer", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Ne pas remplacer les widgets suivant :", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Autoriser le remplacement des widgets", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Afficher les domaines qui ne semblent pas vous tracer", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Soumettre l'erreur", + "description": "" + }, + "badger_status_allow": { + "message": "Autorisation de $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Qu'est-ce que Privacy Badger ?", + "description": "" + }, + "options_domain_search": { + "message": "Rechercher un nom de domaine :", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Apprendre à bloquer de nouveaux traceurs en naviguant", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Activer l'apprentissage peut vous rendre plus identifiable par les sites internet", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Activer l'apprentissage dans les fenêtres de navigation privée", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Dans les fenêtres de navigation privée, Privacy Badger se contente de bloquer les traceurs qu'il connait. En activant cette option, il cherchera aussi à en identifier de nouveaux. Ceci pourrait laisser sur votre ordinateur des traces de sites que vous visitez. Son utilité pourrait se révéler si vous naviguez beaucoup en mode privé.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Afficher le nombre de traceurs", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Qu'est-ce qu'un traceur ?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "N'hésitez pas à cliquer sur « Signaler un site non fonctionnel ». Respectant votre vie privée, les rapports ne sont pas automatiquement envoyés.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Options de Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "La page que vous visitez, la version de votre navigateur et de Privacy Badger, ainsi que le réglage des curseurs pour cette page seront automatiquement transmis à l'EFF.", + "description": "" + }, + "whitelisted_domains": { + "message": "Liste blanche", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Activer Privacy Badger pour ce site", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrer par type :", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Liste des traceurs et paramètres mis à jour avec succès !", + "description": "" + }, + "export_user_data": { + "message": "Exporter les données utilisateur", + "description": "" + }, + "manage_data_intro": { + "message": "Importer des données utilisateur :
  • Remplace les réglages généraux
  • Combine les listes blanches
  • Combine les informations sur les sites que Privacy Badger a vus
  • Remplace les personnalisations des curseurs
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Réinitialiser", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Réinitialisation des domaines traceurs", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Réinitialiser les domaines traceurs :\n\n• supprimera toutes les données apprises par Privacy Badger sur les traceurs  ;\n• restaurera la liste des domaines traceurs à la dernière liste préétablie (www.eff.org/badger-pretraining pour en savoir plus).", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Tout supprimer", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Supprimer tous les domaines traceurs", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Supprimer tous les domaines traceurs :\n\n• supprimera tout ce que Privacy Badger a appris sur les traceurs ;\n• suspendra tout blocage des traceurs jusqu'à ce que Privacy Badger apprenne à les reconnaitre de nouveau.", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Vous êtes maintenant protégé par Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Pour découvrir son fonctionnement, cliquez ci-dessous pour un tutoriel rapide.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC peut divulguer vos adresses IP locales. Activer cette option peut dégrader les performances des logiciels de visiophonie comme Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Réglages généraux", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Confidentialité", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Avancées", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Commencer la visite", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Cliquer ici pour bloquer entièrement ce domaine", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "version $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blocage des cookies de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "partiellement bloqués", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Je comprends. Montrez-moi quand même la liste de domaines traceurs.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Merci d'avoir installé Privacy Badger !", + "description": "" + }, + "import_select_file": { + "message": "Veuillez sélectionner un fichier à importer.", + "description": "" + }, + "report_broken_site": { + "message": "Signaler un site non fonctionnel", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centrer le curseur pour bloquer les cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Intercepte les traceurs sournois", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Fermer", + "description": "" + }, + "import_user_data": { + "message": "Importer des données utilisateur", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "respectant les règles de non-pistage", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Aide", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "autorisés", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "La vie privée est un effort de groupe !", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Vous ne devriez pas avoir besoin de modifier quoi que ce soit ici.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "tous", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Annuler", + "description": "" + }, + "tooltip_block": { + "message": "Déplacer le curseur à gauche pour bloquer un domaine", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Désactiver l'envoi à Google des adresses web que vous visitez. Des pages similaires ne seront alors plus suggérer lorsqu'une page n'est pas trouvée.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Désactiver l'analyse des hyperliens", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "définis par l'utilisateur", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ $LINK_START$traceurs$LINK_END$ potentiels bloqués", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Aucun $LINK_START$traceur$LINK_END$ bloqué", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Il n'y a pas de ressource tierce sur cette page. Un point pour la vie privée !", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Un projet de l'Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Ajouter un domaine", + "description": "" + }, + "tooltip_allow": { + "message": "Déplacer le curseur à droite pour autoriser un domaine", + "description": "" + }, + "popup_disable_for_site": { + "message": "Désactiver Privacy Badger pour ce site", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Cliquer ici pour autoriser ce domaine", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Il ne communiquera jamais sur votre navigation, sauf si vous le décidez.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger n'a pas encore détecté de domaine traceur. Continuez à naviguer !", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger décide de bloquer un traceur lorsqu'il est détecté sur trois sites internet différents.", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrer par statut :", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Décrivez brièvement ci-dessous l'erreur.", + "description": "" + }, + "remove_button": { + "message": "Supprimer la sélection", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Lorsque vous utilisez Privacy Badger, vous rejoignez l'Electronic Frontier Foundation et des millions d'autres utilisateurs dans le combat pour la vie privée. Nous sommes à but non lucratif et nous battons pour vos droits en ligne. Merci d'en faire parti !", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Pour exclure un domaine, ajoutez \"-\" devant celui-ci lors de votre recherche. Par exemple, \".co -.com\" affichera les domaines en .co ou .co.uk, mais pas .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Si vous soupçonner Privacy Badger de perturber le fonctionnement d'une page (par exemple, la lecture d'une vidéo), vous pouvez cliquer sur le bouton « Désactiver » pour l'empêcher d'opérer sur ce site.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Politique de confidentialité", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Description", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Privacy Badger n'a pas encore décidé si ces domaines devaient être bloqués", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Afficher les domaines que Privacy Badger ne s'est pas encore décidé à bloquer : ", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Les domaines ci-dessous ne semblent pas vous tracer.", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Options", + "description": "" + }, + "share_button_title_facebook": { + "message": "Partager sur Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger apprend automatiquement à bloquer les traceurs invisibles.", + "description": "" + }, + "report_fail": { + "message": "Oups, quelque chose a râté.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger a remplacé ce bouton $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger a remplacé ce widget $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Autoriser une fois", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Toujours autoriser sur ce site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Synchronisation avec le nuage :
  • Nécessite Firefox ou Chrome Sync
  • Le téléversement écrase toutes données de Privacy Badger dans le nuage
  • Télécharger combinera la liste blanche avec celle présente
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Téléverser", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exporter la liste blanche dans le nuage", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importer la liste blanche du nuage", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Données du nuage correctement importées.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Les données du nuage n'ont pas pu être téléchargées.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Données correctement téléversées dans le nuage.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Les données du nuage n'ont pas pu être téléversées.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Pas de données dans le nuage à télécharger.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Parlez-en à vos amis", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Partager", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger a bloqué $COUNT$ traceurs potentiels sur $DOMAIN$ :", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) est une extension de navigateur qui apprend automatiquement à bloquer les traceurs invisibles. Il est conçu par l'Electronic Frontier Foundation, une organisation à but non lucratif qui se bat pour vos droits en ligne.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copier dans le presse-papiers", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copié", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Rien à faire sur cette page", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger ne fonctionne pas sur les pages spéciales comme celle-ci. Essayez de naviguer ailleurs.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger est désactivé pour ce site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Remplacement de widgets", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Les boutons sociaux bloqués, et autres widgets potentiellement utiles (vidéos, sons, commentaires), peuvent être remplacés par une option « cliquer pour activer ».", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/he/messages.json b/src/_locales/he/messages.json new file mode 100644 index 0000000..ce3203a --- /dev/null +++ b/src/_locales/he/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ חסום", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "קובץ JSON בלתי תקף.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "האם אתה בטוח שאתה רוצה להסיר תחום זה מתוך Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "אין מעקב עבור $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "כרגע Privacy Badger בודק רק אם צדדים שלישיים משתמשים בעוגיות, אחסון מקומי HTML5 או לקיחת טביעת אצבע של בד כדי לאתר את גלישתך. חלק מתחומים אלו עשוי להשתמש בשיטות מעקב אשר Privacy Badger אינו יכול לגלות.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "בדוק אם תחומי צד־שלישי מצייתים אל מדיניות אל תעקוב של EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "אנא הוסף תחום או כתובת תקפים.", + "description": "" + }, + "donate_to_eff": { + "message": "תרום אל EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "עזור לנו ע״י תרומה ושיתוף של תמיכתך בכלים שלנו", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "לא חוסם פרסומות, אני שונה", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "תודה! נחקור זאת לעומק.", + "description": "" + }, + "dnt_tooltip": { + "message": "תחום זה מבטיח לא לעקוב אחריך.", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "חסימת תחום זה ידועה בתור שוברת אתרים", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "לחץ כדי להחזיר שליטה בתחום זה אל Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "הקטע הבא", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "אנא ספר לנו על השגיאה הבאה:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "ניהול נתונים", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "דווח על שגיאה", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "לדוגמה www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "לחץ כאן כדי למנוע מתחום זה להשתמש בעוגיות", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "חסום", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "מנע מן WebRTC להדליף כתובת IP מקומית", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger לומד באופן אוטומטי לחסום עוקבנים בלתי נראים. קח דקה כדי לראות כיצד.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "מה לא בסדר?", + "description": "" + }, + "options_domain_list_tab": { + "message": "תחומי מעקב", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "שתף ב־Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "למד כיצד Privacy Badger מגן על פרטיותך", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "הורד", + "description": "" + }, + "import": { + "message": "ייבא", + "description": "" + }, + "options_hide_social_widgets": { + "message": "אל תחליף את היישומונים הבאים:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "אפשר החלפת יישומונים", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "הראה תחומים שנראה כי אינם עוקבים אחריך", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "הגש שגיאה", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ מותר", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "מהו Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "חפש תחומים:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "למד לחסום עוקבנים חדשים מתוך גלישתך", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "אפשור למידה עשוי לעשות אותך בר־זיהוי יותר כלפי אתרים", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "למד בחלונות פרטיים או בחלונות עילום שם", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "איפשור למידה בחלונות פרטיים או בחלונות עילום שם עלול להותיר עקבות של היסטוריה של גלישה פרטית. כברירת מחדל, Privacy Badger יחסום עוקבנים שהוא כבר יודע עליהם בחלונות פרטיים או בחלונות עילום שם, אבל הוא לא ילמד על עוקבנים חדשים. ייתכן שתרצה לאפשר אפשרות זו אם חלק גדול של הגלישה שלך מתרחש בחלונות פרטיים או בחלונות עילום שם.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger לא ילמד עוד מגלישתך כברירת מחדל.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "לחץ למטה כדי ללמוד עוד.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "למד כיצד Privacy Badger משתנה", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "הראה ספירת עוקבנים", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "מהו עוקבן?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "אנא אל תשכח ללחוץ על 'Privacy Badger שבר את האתר הזה'. אנו מכבדים את פרטיותך כך שלא נשלח דוחות אוטומטיים.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "אפשרויות Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "זה ישלח באופן אוטומטי את המידע הבא אל EFF: הדף שאתה כרגע מבקר בו, גרסת הדפדפן שלך, הגרסה של Privacy Badger והמצב של כל המחוונים בדף זה.", + "description": "" + }, + "whitelisted_domains": { + "message": "אתרים מושבתים", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "אפשר את Privacy Badger עבור אתר זה", + "description": "" + }, + "options_domain_type_filter": { + "message": "סנן לפי סוג:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "רשימת עוקבנים והגדרות עודכנו בהצלחה!", + "description": "" + }, + "export_user_data": { + "message": "ייצא נתוני משתמש", + "description": "" + }, + "manage_data_intro": { + "message": "יבוא נתוני משתמש:
  • דריסת הגדרות כלליות
  • שילוב רשימות של אתרים מושבתים
  • שילוב מידע על אילו עוקבנים Privacy Badger ראה
  • דריסת התאמות אישיות של מחוונים
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "אפס", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "אפס תחומי מעקב", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "איפוס תחומי מעקב:\n\n • ימחק את כל הנתונים על עוקבנים אשר Privacy Badger למד מגלישתך \n • ישחזר את רשימת תחומי המעקב אל הרשימה הקדם־מאומנת (בקר בכתובת www.eff.org/badger-pretraining כדי ללמוד עוד)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "הסר הכל", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "הסר את כל תחומי המעקב", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "הסרת כל תחומי המעקב:\n\n • תמחק את כל מה ש־Privacy Badger יודע על עוקבנים\n • תיגרום אל Privacy Badger לא לחסום שום דבר עד שיהיה לו סיכוי ללמוד את זה שוב מגלישתך", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "אתה מוגן כעת על ידי Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "כדי ללמוד כיצד Privacy Badger עובד, לחץ למטה עבור הדרכה זריזה.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC יכול להדליף את כתובת ה־IP המקומית שלך. שים לב שאיפשור אפשרות זו עלול להפחית ביצועים על יישומי ועידת רשת כמו Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "הגדרות כלליות", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "פרטיות", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "מתקדם", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "צא לסיור", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "לחץ כאן כדי לחסום לגמרי תחום זה", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "גרסה $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "עוגיות חסומות מן $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "חסום חלקית", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "אני מבין; אנא הראה לי את רשימת תחומי המעקב בכל זאת", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "תודה על התקנת Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "אנא בחר קובץ לייבא.", + "description": "" + }, + "report_broken_site": { + "message": "Privacy Badger שבר את האתר הזה? יידע אותנו!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "מרכז את המחוון כדי לחסום עוגיות", + "description": "" + }, + "intro_learns": { + "message": "לומד באופן אוטומטי", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "במקום לשמור רשימות של מה לחסום, Privacy Badger מגלה באופן אוטומטי עוקבנים על סמך התנהגותם.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "תופס עוקבנים ערמומיים", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "מעקב בלתי נראה מתרחש בכל מיני דרכים; פרסומות הן הקצה הנראה של הקרחון. Privacy Badger שולח את האות בקרה גלובלית של פרטיות, כדי להוציא אותך משיתוף ומכירה של נתונים, ואת האות אל תעקוב כדי לומר לחברות לא לעקוב אחריך. אם הן מתעלמות מבקשותיך, Privacy Badger ילמד לחסום אותן—בין אם הן מפרסמים או עוקבנים מסוגים אחרים.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "סגור", + "description": "" + }, + "import_user_data": { + "message": "ייבא נתוני משתמש", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "תואם־DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "עזרה", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "מותר", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "פרטיות היא ספורט קבוצתי!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "אינך אמור להיות צריך לשנות שום דבר כאן.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "הכל", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "בטל", + "description": "" + }, + "tooltip_block": { + "message": "הזז את המחוון שמאלה כדי לחסום תחום", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "שלח אל אתרים את האותות \"בקרה גלובלית של פרטיות ו\"אל תעקוב", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "השבת שליחת כתובות אתר שאתה מבקר בהן אל Google. זה משבית הצעות אל דפים דומים כאשר דף אינו יכול להימצא.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "השבת בדיקת היפר־קישורים", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "נשלט־משתמש", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger מושבת באתרים הבאים. זה אומר כי Privacy Badger לא יחסום שום דבר כאשר תבקר באתרים הכתובים למטה, והוא לא ישלח את האות אל תעקוב או את האות בקרה גלובלית של פרטיות.

אם אתה חושב כי Privacy Badger שובר עמוד, או אם אתה רוצה להתיר לאתר מסוים לשתף או למכור את הנתונים שלך, אתה יכול להקליד את תחום האתר בתיבה למטה וללחוץ על הכפתור \"הוסף תחום\".

לחלופין, כאשר לשונית העמוד כבר נבחרה, אתה יכול פשוט ללחוץ על הכפתור של Privacy Badger בסרגל הכלים של הדפדפן ואז ללחוץ על הכפתור \"השבת\".

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ $LINK_START$עוקבנים$LINK_END$ פוטנציאליים נחסמו", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "$LINK_START$עוקבנים$LINK_END$ לא נחסמו", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "אין משאבי צד שלישי בדף זה. הידד לפרטיות!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "מיזם של הקרן של החזית האלקטרונית", + "description": "" + }, + "add_domain_button": { + "message": "הוסף תחום", + "description": "" + }, + "tooltip_allow": { + "message": "הזז את המחוון ימינה כדי להתיר תחום", + "description": "" + }, + "popup_disable_for_site": { + "message": "השבת את Privacy Badger עבור אתר זה", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "לחץ כאן כדי להתיר תחום זה", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger לעולם לא ישתף נתונים על גלישתך אלא אם תבחר לשתף אותם.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger החליט לחסום $COUNT$ $TRACKER_LINK_START$תחומי מעקב$TRACKER_LINK_END$ פוטנציאליים עד כה", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger לא גילה תחומי מעקב עדין. המשך לגלוש!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger מתחיל לחסום ברגע שהוא רואה את אותו עוקבן בשלושה אתרים שונים. שלוש פגיעות והוא בחוץ!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "סנן לפי מעמד:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "תאר בקצרה את השגיאה למטה.", + "description": "" + }, + "remove_button": { + "message": "הסר נבחרים", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "כאשר אתה משתמש ב־Privacy Badger אתה מצטרף אל הקרן של החזית האלקטרונית ואל מיליוני משתמשים אחרים בלחימה למען פרטיות. אנחנו ארגון ללא מטרות רווח הנלחם על זכויותיך באופן מקוון. תודה שהצטרפת אלינו!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "כדי לשלול תחומים, הוסף בראש אל מונח החיפוש שלך \"-\". לדוגמה, \".co -.com\" יראה תחומי .co ותחומי .co.uk אבל לא תחומי .com", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "אם אתה חושב כי Privacy Badger שובר עמוד (סרטון לא מתנגן, לדוגמה), אתה יכול ללחוץ על הכפתור 'השבת' כדי לכבות את Privacy Badger עבור אותו אתר.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "מדיניות פרטיות", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "תיאור", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Privacy Badger לא החליט עדין אם תחומים אלו צריכים להיחסם", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "הראה תחומים אשר Privacy Badger לא החליט עדין אם לחסום:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "לא נראה שהתחומים למטה עוקבים אחריך", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "אפשרויות", + "description": "" + }, + "share_button_title_facebook": { + "message": "שתף ב־Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger לומד באופן אוטומטי לחסום עוקבנים בלתי נראים.", + "description": "" + }, + "report_fail": { + "message": "אופס. משהו השתבש.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "זה $BUTTON$ החליף כפתור Privacy Badger", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger החליף יישומון $WIDGET$ זה", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "התר פעם אחת", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "התר תמיד באתר זה", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "סינכרון ענן:
  • דורש סינכרון Firefox/Chrome
  • העלאה דורסת נתונים קיימים כלשהם של Privacy Badger בענן
  • הורדה משלבת את רשימות האתרים בהם Privacy Badger מושבת
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "העלה", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "ייצא אתרים מושבתים אל ענן", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "ייבא אתרים מושבתים מענן", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "נתוני ענן יובאו בהצלחה.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "נתוני ענן לא יכלו לרדת.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "נתוני ענן הועלו בהצלחה.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "נתוני ענן לא יכלו להיעלות.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "אין נתוני ענן להוריד.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "ספר לחבריך", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "שתף", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger חסם $COUNT$ עוקבנים פוטנציאליים בתחום $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) הוא הרחבת דפדפן אשר לומדת באופן אוטומטי לחסום עוקבנים בלתי נראים. Privacy Badger נוצר על ידי הקרן של החזית האלקטרונית, ארגון ללא מטרות רווח שנלחם על זכויותיך באופן מקוון.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "העתק ללוח עריכה", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "הועתק", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "אין מה לעשות בדף זה", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger אינו עובד על עמודים מיוחדים כמו זה. נסה לגלוש במקום כלשהו אחר.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger מושבת באתר זה", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "החלפת יישומונים", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "בעת חסימת כפתורים חברתיים ויישומונים שימושיים פוטנציאלים אחרים (סרטון, שמע, תגובות), Privacy Badger יכול להחליף אותם בממלאי מקום של לחץ־כדי־לשפעל.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json new file mode 100644 index 0000000..b1185e2 --- /dev/null +++ b/src/_locales/it/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Bloccato $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "File JSON non valido.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Sei sicuro di voler rimuovere questo dominio da Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Nessun tracciamento da $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Al momento Privacy Badger sta controllando esclusivamente se terze parti stanno usando dei cookie, local storage HTML5 o il canvas fingerprinting per tracciare la navigazione. Alcuni di questi domini potrebbero utilizzare metodi di tracciamento che Privacy Badger non è in grado rilevare.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Controlla se i domini di terze parti rispettano la politica Do Not Track della EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Inserisci un dominio o URL valido.", + "description": "" + }, + "donate_to_eff": { + "message": "Dona alla EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Aiutaci donando e offrendo il tuo supporto per i nostri strumenti", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Non un ad-blocker, sono diverso", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Grazie! Indagheremo a fondo.", + "description": "" + }, + "dnt_tooltip": { + "message": "Questo dominio si impegna a non tracciarti", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bloccando questo dominio si rovinano alcuni siti web", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Clicca per restituire il controllo di questo dominio a Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "prossima sezione", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Scrivici riguardo il seguente errore:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gestione dati", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Segnala un errore", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "es. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Clicca qui per bloccare questo dominio dalle impostazioni dei cookie", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "bloccati", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Impedisci a WebRTC di rivelare l'indirizzo IP locale", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger impara automaticamente a bloccare i tracker invisibili. Prenditi un minuto per vedere come.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Cosa c'è che non va?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Domini Traccianti", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Condividi su Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Scopri come Privacy Badger protegge la tua privacy", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Scarica", + "description": "" + }, + "import": { + "message": "Importa", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Non sostituire i seguenti widget:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Attiva sostituzione dei widget", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Mostra i domini che non sembra ti stiano tracciando", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Invia errore", + "description": "" + }, + "badger_status_allow": { + "message": "Permesso $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Cos'è Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Cerca domini:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Impara a bloccare nuovi tracker dalla tua navigazione", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "L'attivazione dell'apprendimento può renderti più identificabile dai siti", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Apprendi nelle finestre Private/Incognito", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "L'attivazione dell'apprendimento nelle finestre Private/Incognito potrebbe lasciare tracce nel computer della tua cronologia privata. Normalmente, nelle finestre Private/Incognito Privacy Badger blocca i tracker che conosce già, ma non ricorderà quelli nuovi. Potresti volere attivare questa opzione se navighi spesso utilizzando le finestre Private/Incognito.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger non imparerà più dalla tua navigazione in modo predefinito.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Clicca sotto per maggiori informazioni.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Scopri come Privacy Badger sta cambiando", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Mostra numero di tracker", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Cos'è un tracker?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Non dimenticare di cliccare 'Privacy Badger ha dato problemi a questo sito'. Rispettiamo la tua privacy, quindi non inviamo segnalazioni automatiche.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Opzioni di Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Verranno inviate automaticamente le seguenti informazioni alla EFF: la pagina che stai visitando, la versione del browser, la versione di Privacy Badger e lo stato di tutti i pulsanti per questa pagina.", + "description": "" + }, + "whitelisted_domains": { + "message": "Siti disattivati", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Attiva Privacy Badger per questo sito", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtra per tipo:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Lista di tracker e impostazioni aggiornate correttamente!", + "description": "" + }, + "export_user_data": { + "message": "Esporta dati utente", + "description": "" + }, + "manage_data_intro": { + "message": "Importazione dati utente:
  • Sovrascrive impostazioni generali
  • Combina liste di siti disattivati
  • Combina informazioni su quali tracker ha visto Privacy Badger
  • Sovrascrive le scelte dei pulsanti
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Ripristina", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Ripristina domini traccianti", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Il ripristino dei domini traccianti causa:\n\n • L'eliminazione di tutti i dati sui tracker che Privacy Badger ha imparato dalla tua navigazione\n • Il ripristino dell'elenco dei domini traccianti all'ultimo elenco pre-istruzione (visita www.eff.org/badger-pretraining per altre info)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Rimuovi tutto", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Rimuovi tutti i domini traccianti", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "La rimozione di tutti i domini traccianti causa:\n\n • L'eliminazione di tutto ciò che Privacy Badger sa sui tracker\n • Privacy Badger non bloccherà nulla finchè non ha avuto la possibilità di re-imparare dalla tua navigazione", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Ora sei protetto da Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Per conoscere il funzionamento del programma, cliccare sotto per una breve guida.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC può rivelare il tuo indirizzo IP locale. Nota che attivare questa opzione potrebbe incidere sulle prestazioni con app di conferenze web come Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Impostazioni generali", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Avanzate", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Fai un giro", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Clicca qui per bloccare completamente questo dominio", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versione $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookie bloccati da $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "parzialmente bloccati", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Ho capito; mostrami comunque l'elenco dei domini traccianti", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Grazie per aver installato Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Seleziona un file da importare.", + "description": "" + }, + "report_broken_site": { + "message": "Privacy Badger ha dato problemi a questo sito? Faccelo sapere!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Sposta il pulsante al centro per bloccare i cookie", + "description": "" + }, + "intro_learns": { + "message": "Impara automaticamente", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Invece di tenere liste di cosa bloccare, Privacy Badger scopre automaticamente i tracker in base al loro comportamento.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Cattura i tracker subdoli", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Il tracciamento invisibile ha molte forme; le pubblicità sono solo la punta visibile dell'iceberg. Privacy Badger invia il segnale Global Privacy Control per escluderti dalla condivisione e vendita di dati e il segnale Do Not Track per dire alle aziende di non tracciarti. Se ignorano le tue scelte, Privacy Badger imparerà a bloccarli—che siano inserzionisti o tracker di altro tipo.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Chiudi", + "description": "" + }, + "import_user_data": { + "message": "Importa dati utente", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-compatibili", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Aiuto", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permessi", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "La privacy è un gioco di squadra!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Non dovresti aver bisogno di modificare nulla qui.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "tutti", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Annulla", + "description": "" + }, + "tooltip_block": { + "message": "Sposta il pulsante a sinistra per bloccare un dominio", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Invia ai siti i segnali \"Global Privacy Control\" e \"Do Not Track\"", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disattiva l'invio degli indirizzi web che visiti a Google. Ciò disattiva i suggerimenti per pagine simili quando una pagina non può essere trovata.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disattiva controllo dei link ipertestuali", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "utente-dipendenti", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger è disattivato nei seguenti siti. Ciò significa che Privacy Badger non bloccherà nulla mentre visiti i siti elencati qui e non invierà i segnali Do Not Track e Global Privacy Control.

Se pensi che con Privacy Badger non funzioni bene una pagina, o se volessi permettere a uno specifico sito di condividere o vendere i tuoi dati, puoi digitare il dominio di quella pagina nella casella sotto e cliccare il pulsante \"Aggiungi dominio\".

Altrimenti, quando la scheda della pagina è selezionata, puoi cliccare il pulsante di Privacy Badger nella barra degli strumenti e poi cliccare il pulsante \"Disattiva\".

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potenziali $LINK_START$tracker$LINK_END$ bloccati", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Nessun $LINK_START$tracker$LINK_END$ bloccato", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Non ci sono risorse di terze parti in questa pagina. Urrà per la privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Un progetto della Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Aggiungi dominio", + "description": "" + }, + "tooltip_allow": { + "message": "Spostare il pulsante a destra per consentire un dominio", + "description": "" + }, + "popup_disable_for_site": { + "message": "Disattiva Privacy Badger per questo sito", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Clicca qui per permettere questo dominio", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger non condivide MAI i tuoi dati di navigazione a meno che non lo scegli.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger ha deciso di bloccare $COUNT$ potenziali $TRACKER_LINK_START$domini traccianti$TRACKER_LINK_END$ finora", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger non ha ancora rilevato alcun dominio tracciante . Continua a navigare!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger inizia a bloccare una volta visto lo stesso tracker su tre siti diversi. Tre colpi ed è fuori!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtra per stato:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Descrivi brevemente l'errore qui sotto.", + "description": "" + }, + "remove_button": { + "message": "Rimuovi selezionati", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Quando usi Privacy Badger ti unisci alla Electronic Frontier Foundation e a milioni di altri utenti nella lotta per la privacy. Siamo senza scopo di lucro e combattiamo per i diritti nella rete. Grazie per la partecipazione!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Per escludere domini, apponi al termine di ricerca il segno \"-\". Ad esempio, \".co -.com\" mostrerà i domini .co e .co.uk ma non .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Se pensi che Privacy Badger stia dando problemi a una pagina (ad esempio un video non si avvia), puoi cliccare il tasto 'Disattiva' per spegnere Privacy Badger in quel sito.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Politica sulla privacy", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Descrizione", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Il tuo tasso non ha ancora deciso se questi domini andrebbero bloccati", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Mostra i domini che il tuo tasso non ha ancora deciso di bloccare:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "I domini sottostanti sembrano non tracciarti", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opzioni", + "description": "" + }, + "share_button_title_facebook": { + "message": "Condividi su Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger impara automaticamente a bloccare i tracker invisibili.", + "description": "" + }, + "report_fail": { + "message": "Ops. Qualcosa è andato storto.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger ha sostituito questo pulsante $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger ha sostituito questo widget $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permetti una volta", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Permetti sempre in questo sito", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Sincronizzazione cloud:
  • Richiede Firefox/Chrome Sync
  • L'invio sovrascrive qualsiasi dato di Privacy Badger nel cloud
  • Lo scaricamento combina gli elenchi di siti dove il tuo tasso è disattivato
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Invia", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Esporta nel cloud i siti disattivati", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importa dal cloud i siti disattivati", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Dati cloud importati con successo.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Impossibile scaricare i dati cloud.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Dati cloud inviati con successo.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Impossibile inviare i dati cloud.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Nessun dato cloud da scaricare.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Dillo ai tuoi amici", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Condividi", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger ha bloccato $COUNT$ potenziali tracker su $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) è un'estensione del browser che impara automaticamente a bloccare i tracker invisibili. Privacy Badger è creato da Electronic Frontier Foundation, un'organizzazione senza scopo di lucro che combatte per i tuoi diritti nella rete.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copia negli appunti", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copiato", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Niente da fare in questa pagina", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger non funziona in pagine speciali come questa. Prova a navigare altrove.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger è disattivato in questo sito", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Sostituzione dei widget", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Quando vengono bloccati i pulsanti social ed altri widget possibilmente utili (video, audio, commenti), Privacy Badger li può sostituire con segnaposto clicca-per-attivare.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/ko/messages.json b/src/_locales/ko/messages.json new file mode 100644 index 0000000..2ff65b2 --- /dev/null +++ b/src/_locales/ko/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "차단된 $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "유효하지 않은 JSON 파일", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Privacy Badger로부터 이 도메인을 제거합니까?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "추적되지 않는 $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "현재 Privacy Badger는 검색 추적을 위해 제3자가 쿠키, HTML5 로컬 스토리지 또는 캔버스 지문 채취를 사용하는 경우에만 검사합니다. 이러한 도메인 중 일부는 Privacy Badger가 감지할 수 없는 추적 방법을 사용하고 있을 수 있습니다.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "제 3자 도메인EFF의 추적 금지 정책을 준수하는지 확인합니다.", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "유효한 도메인 또는 URL을 추가하세요.", + "description": "" + }, + "donate_to_eff": { + "message": "EFF에게 기부", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "기부 또는 툴에 대한 지원을 공유함으로써 저희를 도와주세요.", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "저는 ad blocker와는 다릅니다.", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "감사합니다! 원인을 밝혀내겠습니다.", + "description": "" + }, + "dnt_tooltip": { + "message": "이 도메인은 당신을 추적하지 않습니다.", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blocking this domain is known to break websites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Click to return control of this domain to Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "다음 섹션", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "다음 오류에 대해 말씀해 주세요:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "데이터 관리", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "오류 보고", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "예시, www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "이 도메인의 쿠키 설정을 차단하려면 여기를 클릭하세요.", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "차단", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "WebRTC가 로컬 IP 주소를 유출하지 못하도록 합니다.", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger는 자동으로 보이지 않는 추적기를 차단하는 방법을 배웁니다. 잠시 시간을 내서 어떻게 동작하는지 알아보세요.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "무슨 문제가 있나요?", + "description": "" + }, + "options_domain_list_tab": { + "message": "추적 도메인", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "트위터에 공유", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Privacy Badger가 개인 정보를 보호하는 방법에 대해 알아봅니다.", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "다운로드", + "description": "" + }, + "import": { + "message": "가져오기", + "description": "" + }, + "options_hide_social_widgets": { + "message": "다음 위젯을 교체하지 마세요:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "위젯 교체를 사용하도록 설정합니다.", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "사용자를 추적하지 않는 것으로 보이는 도메인을 표시합니다.", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "오류 보고", + "description": "" + }, + "badger_status_allow": { + "message": "허용된 $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Privacy Badger란?", + "description": "" + }, + "options_domain_search": { + "message": "도메인 검색:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Private/Incognito 창에서 학습합니다.", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Private/Incognito 창에서 학습을 활성화하면 컴퓨터에 개인 검색 기록을 남길 수 있습니다. 기본적으로 Privacy Badger는 Private/Incognito 창에서 이미 알고 있는 추적기를 차단하지만 새로운 추적기에 대해서는 학습하지 않습니다. Private/Incognito 창에서 많은 검색이 발생하는 경우 이 옵션을 사용하도록 설정할 수 있습니다.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "추적기의 수를 표시합니다.", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "추적기란?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "'Privacy Badger가 이 사이트를 파손했습니까?'를 클릭하는 것을 잊지 마세요. 우리는 당신의 프라이버시를 존중합니다. 그래서 우리는 자동으로 보고서를 보내지 않습니다.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger 옵션", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "비활성화 사이트", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "이 사이트에 대해 Privacy Badger를 사용하도록 설정합니다.", + "description": "" + }, + "options_domain_type_filter": { + "message": "유형별 필터:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "추적기목록 및 설정이 성공적으로 업데이트 되었습니다!", + "description": "" + }, + "export_user_data": { + "message": "사용자 데이터 내보내기", + "description": "" + }, + "manage_data_intro": { + "message": "사용자 데이터 가져오기:
  • 일반 설정을 덮어씁니다.
  • 차단된 사이트의 목록을 결합합니다.
  • Privacy Badger가 찾은 추적기정보를 결합합니다.
  • 사용자 지정 슬라이더를 덮어씁니다.
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "초기화", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "추적 도메인 초기화", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "추적 도메인을 초기화하면\n\n • Privacy Badger가 검색을 통해 학습한 추적기에 대한 모든 데이터를 삭제합니다.\n • 추적 도메인 목록을 최신 사전 훈련된 목록으로 복원합니다(자세한 내용은 www.eff.org/badger-pretraining 참조)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "모두 제거", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "추적 도메인 모두 제거", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "추적 도메인을 모두 제거하면\n\n • Privacy Badger가 추적기에 대해 알고 있는 모든 데이터를 삭제합니다.\n • Privacy Badger가 검색을 통해서 다시 학습할 때까지 아무것도 차단하지 않습니다.", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "이제 Privacy Badger의 보호를 받습니다.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Privacy Badger의 동작 방식을 알아보려면 아래를 클릭하여 간단한 튜토리얼을 확인하세요.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC에서 로컬 IP 주소가 유출될 수 있습니다. 이 옵션을 활성화하면 Google Hangouts와 같은 웹 회의 앱의 성능이 저하될 수 있습니다.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "일반 설정", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "알아보기", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "이 도메인을 완전히 차단하려면 여기를 클릭하세요.", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "버전 $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "$DOMAIN$로부터 차단된 쿠키", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "부분적으로 차단", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "그래도 추적 도메인 목록을 확인하나요?", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Privacy Badger를 설치해 주셔서 감사합니다!", + "description": "" + }, + "import_select_file": { + "message": "가져올 파일을 선택하세요.", + "description": "" + }, + "report_broken_site": { + "message": "Privacy Badger가 이 사이트를 파손했습니까? 우리에게 알려주세요!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "슬라이더를 중앙에 배치하여 쿠키를 차단합니다.", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "은밀한 추적기를 잡습니다.", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "닫기", + "description": "" + }, + "import_user_data": { + "message": "사용자 데이터 가져오기", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "추적 금지에 순응", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "도움", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "허용", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "프라이버시는 팀 활동입니다!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "여기서 어떤 것도 수정할 필요가 없습니다.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "전체", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "취소", + "description": "" + }, + "tooltip_block": { + "message": "슬라이더를 왼쪽으로 이동하여 도메인을 차단합니다.", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "사용자 정의", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Electronic Frontier Foundation의 프로젝트입니다.", + "description": "" + }, + "add_domain_button": { + "message": "도메인 추가", + "description": "" + }, + "tooltip_allow": { + "message": "슬라이더를 오른쪽으로 이동하여 도메인을 허용합니다.", + "description": "" + }, + "popup_disable_for_site": { + "message": "이 사이트에 대해 Privacy Badger를 사용하지 않도록 설정합니다.", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "이 도메인을 허용하려면 여기를 클릭하세요.", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger는 사용자가 검색을 공유하도록 선택하지 않는 한 검색에 대한 데이터를 절대 공유하지 않습니다.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger가 아직 추적 도메인을 감지하지 못했습니다. 계속 탐색하세요!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger는 세 개의 다른 웹 사이트에서 동일한 추적기를 보면 차단하기 시작합니다. 삼진 아웃이에요!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "상태별 필터:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "아래에 오류에 대해서 간략하게 설명해주세요.", + "description": "" + }, + "remove_button": { + "message": "제거", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Privacy Badger를 사용하면 개인 정보 보호를 위해 Electronic Frontier Foundation및 수백만 명의 다른 사용자와 함께합니다. 우리는 온라인에서 당신의 권리를 위해 싸우는 비영리 단체입니다. 참여해 주셔서 감사합니다!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "도메인을 제외하려면 검색어를 \"-\"로 미리 입력합니다. 예를 들어 \".co -.com\"에는 .co 및 .co.uk이 표시되지만 .com 도메인은 표시되지 않습니다.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Privacy Badger가 페이지를 파손하고 있다고 생각되면 (예를 들어 비디오가 재생되지 않는 등) ‘이 사이트에 대해 Privacy Badger를 사용하지 않도록 설정’ 버튼을 클릭하여 해당 사이트에 대한 Privacy Badger를 해제할 수 있습니다.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "개인 정보 보호 정책", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "설명", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Your Badger hasn't decided yet if these domains should get blocked", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Show domains your Badger hasn't decided yet to block:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "아래 도메인은 사용자를 추적하는 것 같지 않습니다.", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "옵션", + "description": "" + }, + "share_button_title_facebook": { + "message": "페이스북에 공유", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger는 자동으로 보이지 않는 추적기를 차단하는 법을 학습합니다.", + "description": "" + }, + "report_fail": { + "message": "앗, 뭔가 잘못됐어요.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger가 이 $BUTTON$버튼을 대체했습니다.", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger has replaced this $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "한 번 허용", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "이 사이트에서 항상 허용", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "클라우드 동기화:
  • Firefox/Chrome 동기화가 필요합니다.
  • 업로드는 클라우드에 있는 기존의 모든 Privacy Badger 데이터를 덮어씁니다.
  • 다운로드는 Privacy Badger를 사용할 수 없는 사이트 목록을 결합합니다.
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "업로드", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "클라우드로 비활성화 사이트 내보내기", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "클라우드에서 비활성화 사이트 가져오기", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "클라우드 데이터를 성공적으로 가져왔습니다.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "클라우드 데이터를 다운로드할 수 없습니다.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "클라우드 데이터가 성공적으로 업로드 되었습니다.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "클라우드 데이터를 업로드할 수 없습니다.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "다운로드할 클라우드 데이터가 없습니다.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "당신의 친구들에게 추천하세요.", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "공유", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger)는 보이지 않는 추적기를 자동으로 차단하는 방법을 학습하는 브라우저 확장 기능입니다. Privacy Badger는 온라인에서 당신의 권리를 위해 싸우는 비영리 단체인 Electronic Frontier Foundation에서 만들어졌습니다.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "클립보드에 복사", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "복사됨", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "이 페이지에서 할 일이 없습니다.", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger는 이러한 특수 페이지에서는 동작하지 않습니다. 다른 곳을 찾아보세요.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is disabled on this site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "위젯 교체", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "소셜 버튼 및 기타 잠재적으로 유용한 (비디오, 오디오, 댓글) 위젯을 차단할 때 Privacy Badger는 이를 클릭하여 활성화하는 플레이스홀더로 대체할 수 있습니다.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json new file mode 100755 index 0000000..392875c --- /dev/null +++ b/src/_locales/nl/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ geblokkeerd", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Ongeldig JSON-bestand.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Weet u zeker dat u dit domein van Privacy Badger wilt verwijderen?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Uw surfgedrag wordt niet gevolgd door $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Momenteel controleert Privacy Badger alleen of derde partijen cookies, HTML5 lokale opslag of canvas fingerprinting gebruiken om uw surfgedrag te volgen. Sommige van deze domeinen gebruiken wellicht volgmethoden die Privacy Badger (nog) niet detecteert.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Controleer of domeinen van derde partijen voldoen aan het Niet-volgen-beleid (Do Not Track) van het EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Voeg een geldig domein of URL toe.", + "description": "" + }, + "donate_to_eff": { + "message": "Aan EFF doneren", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Help ons door te doneren en uw steun voor onze hulpprogramma's te delen", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Geen advertentieblokkade, ik ben anders", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Bedankt voor uw inzet! We gaan dit verder uitzoeken.", + "description": "" + }, + "dnt_tooltip": { + "message": "Dit domein belooft u niet te volgen", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Het staat bekend dat door het blokkeren van dit domein sommige websites niet langer goed werken", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Klik om controle voor dit domein terug te geven aan Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "volgende onderdeel", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Vertel ons over de onderstaande fout:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gegevens beheren", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Een fout melden", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "bv. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Klik hier om cookies van dit domein te blokkeren", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "geblokkeerd", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Voorkom dat WebRTC het lokale IP-adres lekt", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger leert automatisch onzichtbare volgers te blokkeren. Neem even de tijd om te zien hoe het werkt.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Wat ging er mis?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Volgerdomeinen", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Op Twitter delen", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Leer meer over hoe Privacy Badger uw privacy beschermt", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Downloaden", + "description": "" + }, + "import": { + "message": "Importeren", + "description": "" + }, + "options_hide_social_widgets": { + "message": "De volgende widgets niet vervangen:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Widgets vervangen inschakelen", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Geef domeinen weer welke u niet lijken te volgen", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Foutmelding indienen", + "description": "" + }, + "badger_status_allow": { + "message": "Toegestaan $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Wat is Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Zoek domeinen:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Leer door het web te surfen nieuwe volgers te blokkeren", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Door leren in te schakelen wirdt je mogelijk meer identificeerbaar voor websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Leer in incognitovensters", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Als u leren in incognitovensters inschakelt kunnen er sporen van uw privé browsegeschiedenis op uw computer achterblijven. Standaard blokkeert Privacy Badger wel bekende volgers in incognitovensters, maar leert het niets over nieuwe volgers. U kunt deze optie inschakelen als u veel gebruik maakt van incognitovensters.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger zal niet langer als standaard gedrag leren van jouw surfgedrag.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Klik hieronder om meer te leren.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Lees how Privacy Badger verandert", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Geef het aantal geblokkeerde volgers weer", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Wat is een volger?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Vergeet niet op 'Een website melden die niet meer werkt' te klikken. Om uw privacy te respecteren verzenden we geen automatische meldingen.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger-opties", + "description": "" + }, + "report_terms": { + "message": "Dit zal automatisch de volgende gegevens naar het EFF verzenden: de webpagina die je momenteel bezoekt, de versie van je webbrowser, de versie van Privacy Badger en de instelling van alle schuifknoppen voor deze webpagina.", + "description": "" + }, + "whitelisted_domains": { + "message": "Uitgeschakelde websites", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Privacy Badger inschakelen op deze website", + "description": "" + }, + "options_domain_type_filter": { + "message": "Op type filteren:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Volgerlijst en instellingen zijn succesvol bijgewerkt!", + "description": "" + }, + "export_user_data": { + "message": "Exporteer gebruikersgegevens", + "description": "" + }, + "manage_data_intro": { + "message": "Gebruikersgegevens importeren:
  • Overschrijft algemene instellingen
  • Combineert lijsten van uitgeschakelde sites
  • Combineert informatie over welke volgers Privacy Badger heeft gevonden
  • Overschrijft aanpassingen aan schuifbalkjes
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Herstellen", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Volgerdomeinen herstellen", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Het herstellen van volgerdomeinen zal:\n\n • De gegevens van alle volgers verwijderen die Privacy Badger op basis van uw surfgedrag kent.\n • De lijst met volgerdomeinen terugzetten naar de laatste standaardlijst (bezoek www.eff.org/badger-pretraining voor meer informatie).", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Alles verwijderen", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Alle volgerdomeinen verwijderen", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Het verwijderen van alle volgerdomeinen zal:\n\n • Alles verwijderen wat Privacy Badger heeft geleerd over volgers.\n • Er voor zorgen dat Privacy Badger niets meer blokkeert totdat het de kans heeft gehad om opnieuw te leren uit uw surfgedrag.", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "U wordt nu beschermd door Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Om te leren hoe Privacy Badger werkt klikt u hieronder voor een kort overzicht.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC kan uw lokale IP-adres lekken. Door dit te blokkeren kunnen de prestaties van sommige videoconferentie apps zoals Google Hangouts verminderen.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Algemene instellingen", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Geavanceerd", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Neem de rondleiding", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Klik hier om dit domein volledig te blokkeren", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versie $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookies geblokkeerd van $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "gedeeltelijk geblokkeerd", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Ik snap het; laat me de lijst met volgerdomeinen zien", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Bedankt voor het installeren van Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Kies een bestand om te importeren.", + "description": "" + }, + "report_broken_site": { + "message": "Een website melden die niet meer werkt", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Zet het schuifbalkje in het midden om cookies te blokkeren", + "description": "" + }, + "intro_learns": { + "message": "Leert automatisch", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "In plaats van lijsten bij te houden over wat je wilt blokkeren, zal Privacy Badger automatisch volgers ontdekken op basis van hun gedrag.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Vangt stiekeme volgers", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Onzichtbaar volgen gebeurd op allerlei manieren; advertenties zijn slechts het zichtbare topje van de ijsberg. Privacy Badger verzendt het “Global Privacy Control”-signaal, om niet mee te doen aan het doorgeven en verkopen van je data, en het “Volg me niet”-signaal om aan bedrijven aan te geven dat je niet gevolgd wil worden. Als ze je keuze niet respecteren, dan zal Privacy Badger leren om ze te blokkeren, ongeacht of ze adverteerders, volgers of iets anders zijn.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Sluiten", + "description": "" + }, + "import_user_data": { + "message": "Importeer gebruikersgegevens", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "voldoet aan Niet-volgen-beleid", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Help", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "toegestaan", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Privacy is een teamsport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Het zou voor u niet nodig moeten zijn om hier iets aan te passen.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "alle", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Annuleren", + "description": "" + }, + "tooltip_block": { + "message": "Schuif de balk naar links om een domein te blokkeren", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Verzend de “Global Privacy Control” en “Volg me niet” signalen naar websites", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Schakel het naar Google verzenden van webadressen die je bezoekt uit. Hierdoor worden ook suggesties voor vergelijkbare pagina's als een pagina niet kan worden gevonden uitgeschakeld.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "‘Hyperlink auditing’ blokkeren", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "ingesteld door gebruiker", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is op de volgende websitess uitgeschakeld. Dit betekent dat Privacy Badger niets zal blokkeren op één van de websites in deze lijst, en dat het ook niet het “Volg me niet”- of “Global Privacy Control”-signaal zal verzenden.

Als je vermoedt dat Privacy Badger het laden van een bepaalde webpagina verstoort, of als je een bepaalde website wil toestaan om je data door te geven of verkopen, dan kun je de domeinnaam van die webpagina invullen in het invoerveld hieronder en op de knop \"Domein toevoegen\" klikken.

Als je het tabblad met die webpagina al open en geselecteerd hebt kun jet als alternatief op de Privacy Badger-knop klikken de de werkbalk van je webbrowser en vervolgens op de knop ‘Uitschakelen’ klikken.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potentiele $LINK_START$volgers$LINK_END$ geblokkeerd", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Geen $LINK_START$volgers$LINK_END$ geblokkeerd", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Ee is geen bron van een derde partij op deze webpagina aanwezig. Hoera voor privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Een project van de Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Domein toevoegen", + "description": "" + }, + "tooltip_allow": { + "message": "Schuif de balk naar rechts om een domein toe te staan", + "description": "" + }, + "popup_disable_for_site": { + "message": "Privacy Badger uitschakelen op deze website", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klik hier om dit domein toe te laten", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger zal NOOIT uw surfgedrag delen, tenzij u hiervoor kiest.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger heeft tot nog toe besloten om $COUNT$ potentiële $TRACKER_LINK_START$volgerdomeinen$TRACKER_LINK_END$ te blokkeren", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger heeft nog geen volgerdomeinen gedetecteerd. Blijf browsen!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger begint met blokkeren zodra het dezelfde volger op drie verschillende websites ziet. Drie slag en ze zijn uit!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Op status filteren:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Omschrijf de fout in het kort.", + "description": "" + }, + "remove_button": { + "message": "Verwijder geselecteerde", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Wanneer u Privacy Badger gebruikt vecht u met de Electronic Frontier Foundation en miljoenen andere gebruikers in de strijd voor privacy. Wij zijn een organisatie zonder winstoogmerk die vecht voor uw online rechten. Bedankt voor het deelnemen!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Om domeinen uit te sluiten plaatst u een \"-\" voor uw zoekterm. \".co -.com\" geeft bijvoorbeeld .co- en .co.uk-domeinen weer, maar sluit .com-domeinen uit.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Als u vermoedt dat een webpagina niet meer werkt vanwege Privacy Badger (een video speelt bijvoorbeeld niet), dan kunt u op de knop 'Privacy Badger uitschakelen op deze website' klikken.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Privacybeleid", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Omschrijving", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Uw Badger heeft nog niet bepaald of deze domeinen geblokkeerd moeten worden", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Geef domeinen weer waarvan uw Badger nog niet heeft bepaald of ze geblokkeerd moeten worden:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "De onderstaande domeinen lijken u niet te volgen", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Instellingen", + "description": "" + }, + "share_button_title_facebook": { + "message": "Op Facebook delen", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger leert automatisch onzichtbare volgers te blokkeren.", + "description": "" + }, + "report_fail": { + "message": "Oeps. Er is iets misgegaan.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger heeft deze $BUTTON$-knop vervangen", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger heeft deze $WIDGET$-widget vervangen", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Eenmalig toestaan", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Altijd toestaan op deze website", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Synchroniseren met de cloud:
  • Vereist Firefox/Chrome Sync
  • Uploaden overschrijft bestaande gegevens van Privacy Badger in de cloud.
  • Downloaden combineert de lijsten van websites waar Privacy Badger is uitgeschakeld.
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Uploaden", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Uitgeschakelde websites exporteren naar de cloud", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Uitgeschakelde websites importeren vanuit de cloud", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Cloudgegevens succesvol geïmporteerd.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Cloudgegevens konden niet worden gedownload.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Cloudgegevens succesvol geüpload.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Cloudgegevens konden niet worden geüpload.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Geen cloudgegevens om te downloaden", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Vertel uw kennissen over Privacy Badger", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Delen", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger heeft $COUNT$ potentiële volgers geblokkeerd op $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) is een browserextensie die automatisch leert om onzichtbare volgers te blokkeren. Privacy Badger is gemaakt door de Electronic Frontier Foundation, een organisatie zonder winstoogmerk die vecht voor uw online rechten.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Kopiëren naar klembord", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Gekopieerd", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Er valt niets te doen op deze pagina", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger werkt niet op speciale pagina's zoals deze. Surf ergens anders heen om het daar te proberen.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger is voor deze website uitgeschakeld", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widgets vervangen", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Wanneer socialemedia-knoppen en andere potentieel nuttige widgets worden geblokkeerd, dan kan Privacy Badger ze vervangen door klikken-om-te-activeren-plaatsvervangers.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json new file mode 100644 index 0000000..c64dfac --- /dev/null +++ b/src/_locales/pl/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Zablokowany $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Nieprawidłowy plik JSON.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Czy na pewno chcesz usunąć tę domenę z Privacy Badgera?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Nie szpieguje $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Obecnie Privacy Badger sprawdza tylko czy strony trzecie używają ciasteczek, pamięci podręcznej HTML5 lub odcisku palca canvas, aby śledzić Twoją historię przeglądania. Niektóre z tych domen mogą śledzić metodami, których Privacy Badger nie potrafi wykryć.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Sprawdź czy domeny stron trzecich są zgodne z polityką o nieszpiegowaniu EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Wprowadź poprawną domenę lub URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Darowizna na EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Wspomóż nas poprzez dotacje bądź zaoferuj wsparcie dla naszych narzędzi", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Nie bloker reklam, jestem inny", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Dzięki! Zajmiemy się sprawą.", + "description": "" + }, + "dnt_tooltip": { + "message": "Ta domena obiecuje Ci nie szpiegować.", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Zablokowanie tej domeny może spowodować, że strony internetowe przestaną działać poprawnie", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Kliknij, aby Privacy Badger zdecydował za Ciebie jak obchodzić się z tą domeną", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "dalej", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Prosimy poinformować nas o następującym błędzie:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Zarządzaj danymi", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Zgłoś problem", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "np. www.domena.com, *.domena.net, domena.pl", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Kliknij tutaj, aby uniemożliwić tej domenie ustawiać ciasteczka", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "zablokowane", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Zapobiegnij wyciekowi lokalnego IP przez WebRTC", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger automatycznie uczy się blokować niewidoczne elementy śledzące. Poświęć minutę, aby dowiedzieć się jak.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Co się zepsuło?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Szpiegujące domeny", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Udostępnij na Twitterze", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Więcej informacji o tym jak Privacy Badger chroni Twoją prywatność", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Pobierz", + "description": "" + }, + "import": { + "message": "Import", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Nie zastępuj następujących widżetów:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Zastępuj widżety", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Wyświetla domeny, które chyba Cię nie szpiegują", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Zgłoś problem", + "description": "" + }, + "badger_status_allow": { + "message": "Odblokowany $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Czym jest Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Szukaj domen:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Ucz się blokować nowe elementy śledzące na podstawie Twojego surfowania", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Włączenie nauki na podstawie Twojej aktywności sieciowej może uczynić Cię bardziej identyfikowalnym dla witryn internetowych", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Ucz się w trybie prywatnym", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Włączenie nauki w trybie prywatnym może pozostawić ślady Twojego przeglądania prywatnego na komputerze. Domyślnie Privacy Badger będzie blokował już znane elementy śledzące w oknach prywatnych, ale nie będzie uczył się na temat nowych. Możesz zmienić tę opcję, jeżeli dużo serfujesz w trybie prywatnym.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Wyświetl liczbę elementów śledzących", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Czym jest element śledzący?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Nie zapomnij kliknąć „Czy Privacy Badger zepsuł tę stronę?”. Szanujemy Twoją prywatność, więc nie wysyłamy raportów automatycznie.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Ustawienia Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Następujące informacje zostaną automatycznie wysłane do EFF: obecnie odwiedzana strona, wersja przeglądarki, wersja Privacy Badgera i stan wszystkich suwaków na tej stronie.", + "description": "" + }, + "whitelisted_domains": { + "message": "Nieblokowane witryny", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Włącz Privacy Badger na tej witrynie", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtruj wg rodzaju:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Pomyślnie zaimportowano ustawienia i listę elementów śledzących!", + "description": "" + }, + "export_user_data": { + "message": "Eksport danych użytkownika", + "description": "" + }, + "manage_data_intro": { + "message": "Import danych użytkownika:\n
    \n
  • nadpisze ogólne ustawienia
  • \n
  • połączy listy wykluczanych domen
  • \n
  • połączy informacje o znalezionych elementach śledzących
  • \n
  • nadpisze ustawienia suwaka
  • \n
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Reset", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Reset szpiegujących domen", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Reset szpiegujących domen spowoduje:\n\n • wymazanie wszystkich danych o elementach śledzących, o których Privacy Badger nauczył się podczas Twojego serfowania\n • zastąpienie listy szpiegujących domen najnowszą listą początkową (przeczytaj www.eff.org/badger-pretraining aby dowiedzieć się więcej)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Usuń wszystko", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Usuń wszystkie szpiegujące domeny", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Usunięcie wszystkich szpiegujących domen spowoduje:\n\n • usunięcie wszystkiego, co Privacy Badger wie o elementach śledzących\n • że Privacy Badger nie będzie blokował czegokolwiek zanim ponownie nie wyuczy się na podstawie Twojego przeglądania", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Jesteś obecnie ochroniony przez Privacy Badgera.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Aby dowiedzieć się więcej o tym jak działa Privacy Badger, kliknij poniżej po krótki przewodnik.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC może ujawnić Twój lokalny adres IP. Zauważ, że może to zmniejszyć wydajność aplikacji do konferencji sieciowych, np. Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Ogólne ustawienia", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Prywatność", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Zaawansowane", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Wprowadzenie", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Kliknij tutaj, aby całkowicie zablokować tę domenę", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "wersja $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Zablokowano ciasteczka z $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "częściowo zablokowane", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Tak, rozumiem, ale proszę wyświetlić mi listę szpiegujących domen.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Dziękujemy za zainstalowanie Privacy Badgera!", + "description": "" + }, + "import_select_file": { + "message": "Wybierz plik do zaimportowania.", + "description": "" + }, + "report_broken_site": { + "message": "Czy Privacy Badger zepsuł tę stronę? Zgłoś to nam!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Wycentruj suwak, aby zablokować ciasteczka", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Wyłapuje sprytne elementy śledzące", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Zamknij", + "description": "" + }, + "import_user_data": { + "message": "Import danych użytkownika", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "zgodne z DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Pomoc", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "odblokowane", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Prywatność to sport zespołowy!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Nie powinieneś mieć potrzeby zmieniać czegokolwiek tutaj.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "wszystkie", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Anuluj", + "description": "" + }, + "tooltip_block": { + "message": "Przesuń suwak w lewo, aby zablokować domenę", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Wyłącz wysyłanie adresów stron internetowych do Google. Opcja ta wyłącza sugestie podobnych stron wyświetlanych kiedy żądana strona nie została znaleziona.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Wyłącz sprawdzanie odnośników", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "ustawione przez użytkownika", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "Zablokowanych potencjalnych $LINK_START$elementów śledzących$LINK_END$: $COUNT$", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Brak zablokowanych $LINK_START$elementów śledzących$LINK_END$", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Brak zasobów stron trzecich na tej stronie. Niech żyje prywatność!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Projekt Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Dodaj domenę", + "description": "" + }, + "tooltip_allow": { + "message": "Przesuń suwak w prawo, aby odblokować domenę", + "description": "" + }, + "popup_disable_for_site": { + "message": "Wyłącz Privacy Badgera na tej witrynie", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Kliknij tutaj, aby odblokować tę domenę", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger NIGDY prześle dane dotyczące Twojej aktywności w Sieci, o ile sam o tym nie zdecydujesz.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger nie wykrył jakichkolwiek szpiegujących domen do tej pory. Serfuj śmiało!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger blokuje element śledzący po zauważeniu go na trzech różnych witrynach. Trzy uderzenia i koniec!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtruj wg stanu:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Zwięźle opisz problem poniżej.", + "description": "" + }, + "remove_button": { + "message": "Usuń zaznaczone", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Podczas korzystania z Privacy Badgera stajesz się członkiem Electronic Frontier Foundation wraz z milionami użytkowników walczącymi o prywatność. Jesteśmy organizacją non-profit walczącą o Twoje prawa w Sieci. Dziękujemy za dołączenie do nas!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Aby wykluczyć domeny, poprzedź wyszukiwaną frazę znakiem „-”. Przykład: „.co -.com” wskaże domeny .co i .co.uk, ale nie .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Jeżeli Twoim zdaniem Privacy Badger zepsuł jakąś stronę (np. filmik się nie odtwarza), możesz kliknąć przycisk „wyłącz”, aby wyłączyć dodatek na tej witrynie.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Polityka prywatności", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Opis", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Twój Badger jeszcze nie zdecydował, czy te domeny należy blokować", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Wyświetl domeny, co do których Privacy Badger nie zdecydował, czy powinny być blokowane:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Poniższe domeny chyba Cię nie szpiegują", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Ustawienia", + "description": "" + }, + "share_button_title_facebook": { + "message": "Udostępnij na Facebooku", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger automatycznie uczy się blokować niewidoczne elementy śledzące.", + "description": "" + }, + "report_fail": { + "message": "O nie, coś się schrzaniło.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger zastąpił ten przycisk $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger zastąpił ten widżet $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Odblokuj jednorazowo", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Zawsze odblokuj na tej witrynie", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Synchronizacja w chmurze:\n
    \n
  • wymaga usługi Firefox/Chrome Sync
  • \n
  • wysyłanie nadpisuje istniejące dane na serwerze
  • \n
  • pobranie łączy listy stron nieblokowanych przez Privacy Badgera
  • \n
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Wyślij", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Eksport nieblokowanych stron na serwer", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Import nieblokowanych stron z serwera", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Pomyślnie zaimportowano dane z serwera.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Nie udało się pobrać danych z serwera.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Pomyślnie wysłano dane na serwer.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Nie udało się wysłać danych na serwer.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Brak danych na serwerze do pobrania.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Poinformuj znajomych", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Podziel się", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger zablokował $COUNT$ potencjalnych elementów śledzących na $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) jest rozszerzeniem przeglądarkowym, które automatycznie uczy się blokować niewidzialne elementy śledzące. Privacy Badger jest dziełem Electronic Frontier Foundation – organizacji non-profit walczącej o Twoje prawa w Sieci.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Skopiuj do schowka", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Skopiowano", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nic do roboty na tej stronie", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger nie działa na specjalnych stronach jak ta. Spróbuj otworzyć inną stronę.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger jest wyłączony na tej witrynie", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Zastępowanie widżetów", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Podczas blokowania przycisków mediów społecznościowych i innych potencjalnie użytecznych widżetów (filmów, dźwięków, komentarzy), Privacy Badger może zastępować je przyciskami (które nie ładują się automatycznie).", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json new file mode 100644 index 0000000..1367310 --- /dev/null +++ b/src/_locales/pt_BR/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ bloqueado", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Arquivo JSON inválido.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Tem certeza de que deseja remover esse domínio do Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Nenhum rastreamento em $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Atualmente, o Privacy Badger apenas verifica se terceiros estão usando cookies, armazenamento local em HTML5, ou canvas fingerprinting para rastrear sua navegação. Alguns desses domínios podem estar usando métodos de rastreamento que o Privacy Badger não consegue detectar.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Verificar se os domínios de terceiros estão em conformidade com a política de Não Rastrear da EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Por favor, adicione uma URL ou um domínio válido.", + "description": "" + }, + "donate_to_eff": { + "message": "Doar para EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Ajude-nos doando e compartilhando seu apoio para nossas ferramentas", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Não sou um bloqueador de anúncios, sou diferente", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Obrigado! Nós chegaremos ao fundo disso.", + "description": "" + }, + "dnt_tooltip": { + "message": "Este domínio prometeu não rastreá-lo", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bloquear este domínio é conhecido por quebrar sites", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Clique para retornar o controle deste domínio para o Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "próxima seção", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Por favor, conte-nos sobre o seguinte erro:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gerenciar dados", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Relatar um erro", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "ex. www.dominio.com, *.dominio.net, dominio.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Clique aqui para bloquear este domínio de usar cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Impedir que o WebRTC vaze o endereço de IP local", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "O Privacy Badger aprende automaticamente a bloquear rastreadores invisíveis. Tire um minuto para saber como.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "O que há de errado?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Domínios de rastreamento", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Compartilhar no Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Saiba como o Privacy Badger protege sua privacidade", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Baixar", + "description": "" + }, + "import": { + "message": "Importar", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Não substituir os seguintes widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Habilitar substituição de widgets", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Mostrar domínios que parecem não estar rastreando você", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Enviar erro", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ permitido", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "O que é Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Procurar domínios:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Aprender em janelas Privadas/Anônimas", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Ativar o aprendizado em janelas Privadas/Anônimas pode deixar rastros do seu histórico de navegação privada em seu computador. Por padrão, o Privacy Badger irá bloquear rastreadores já conhecidos em janelas Privadas/Anônimas, mas não aprenderá sobre novos rastreadores. É possível que deseje habilitar esta opção se grande parte de sua navegação ocorrer em janelas Privadas/Anônimas.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Mostrar contagem de rastreadores", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "O que é um rastreador?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Por favor, não esqueça de clicar em \"O Privacy Badger quebrou este site\". Nós respeitamos sua privacidade já que não enviamos relatórios automáticos.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Opções do Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Sites desativados", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Ativar o Privacy Badger para este site", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrar por tipo:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Lista de rastreadores e configurações atualizadas com sucesso!", + "description": "" + }, + "export_user_data": { + "message": "Exportar dados de usuário", + "description": "" + }, + "manage_data_intro": { + "message": "Importar dados do usuário:
  • Substitui as configurações gerais
  • Combina listas de sites desativados
  • Combina informações sobre os rastreadores que o Privacy Badger detectou
  • Substitui personalizações do controle deslizante
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Resetar", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Resetar domínios de rastreamento", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Resetar os domínios de rastreamento irá:\n\n • Deletar todos os dados sobre rastreadores que o Privacy Badger aprendeu com sua navegação\n • Restaurar a lista de domínios de rastreamento para a última lista pré-criada (visite www.eff.org/badger-pretraining para saber mais)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Remover tudo", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Remover todos os domínios de rastreamento", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Remover todos os domínios de rastreamento irá:\n\n • Deletar tudo que o Privacy Badger sabe sobre os rastreadores\n • Fazer com que o Privacy Badger não bloqueie nada até que tenha a chance de reaprender a partir de sua navegação", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Agora você está protegido pelo Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Para saber como o Privacy Badger funciona, clique abaixo para um tutorial rápido.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "O WebRTC pode vazar seu endereço de IP local. Tenha em mente que ativar esta opção pode reduzir o desempenho em aplicações de conferência Web como Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Configurações gerais", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Saber como funciona", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Clique aqui para bloquear totalmente este domínio", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versão $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookies bloqueados de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "parcialmente bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Compreendo; por favor, mostre-me a lista de domínios de rastreamento.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Obrigado por instalar o Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Por favor, selecione um arquivo para importar.", + "description": "" + }, + "report_broken_site": { + "message": "O Privacy Badger quebrou este site? Deixe-nos saber!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centralize o controle deslizante para bloquear cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Detecta rastreadores ocultos", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Fechar", + "description": "" + }, + "import_user_data": { + "message": "Importar dados de usuário", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "Compatível com DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Ajuda", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permitido", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "A privacidade é um esporte de equipe!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Você não precisa modificar nada aqui.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "todos", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Cancelar", + "description": "" + }, + "tooltip_block": { + "message": "Mova o controle deslizante para a esquerda para bloquear um domínio", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "controlado pelo usuário", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Um projeto da Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Adicionar domínio", + "description": "" + }, + "tooltip_allow": { + "message": "Mova o controle deslizante para a direita para permitir um domínio", + "description": "" + }, + "popup_disable_for_site": { + "message": "Desabilitar o Privacy Badger para este site", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Clique aqui para permitir este domínio", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "O Privacy Badger NUNCA compartilhará dados sobre sua navegação, a menos que você escolha compartilhá-los.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "O Privacy Badger ainda não detectou nenhum domínio de rastreamento. Continue navegando.", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "O Privacy Badger começa a bloquear uma vez que vê o mesmo rastreador em três sites diferentes. Três strikes e está fora!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrar por status:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Descreva brevemente o erro abaixo.", + "description": "" + }, + "remove_button": { + "message": "Remover selecionado", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Quando você usa o Privacy Badger, você se junta à Electronic Frontier Foundation e outros milhões de usuários na luta pela privacidade. Somos uma organização sem fins lucrativos que luta pelos seus direitos on-line. Obrigado por se juntar a nós.", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Para excluir domínios, preceda seu termo de busca com \"-\". Por exemplo, \".co -.com\" mostrará domínios .co e .co.uk, mas não domínios .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Se você acha que o Privacy Badger está quebrando uma página (por exemplo, um vídeo não reproduz), você pode clicar no botão \"Desabilitar\" para desativar o Privacy Badger para esse site.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Política de Privacidade", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Descrição", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Seu Badger ainda não decidiu se esses domínios devem ser bloqueados", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Mostrar domínios que seu Badger ainda não decidiu se deve bloquear:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Os domínios abaixo não parecem estar rastreando você", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opções", + "description": "" + }, + "share_button_title_facebook": { + "message": "Compartilhar no Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "O Privacy Badger aprende automaticamente a bloquear rastreadores invisíveis.", + "description": "" + }, + "report_fail": { + "message": "Oops. Algo deu errado.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "O Privacy Badger substituiu este botão $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "O Privacy Badger substituiu esse $WIDGET$ widget", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permitir uma vez", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Sempre permitir neste site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Sincronização em nuvem:
  • Requer Firefox/Chrome Sync
  • O upload sobrescreve quaisquer dados existentes do Privacy Badger na nuvem
  • O download combina as listas de sites onde o Privacy Badger está desativado
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Upload", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exportar sites desativados para a nuvem", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importar sites desativados da nuvem", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Os dados em nuvem foram importados com sucesso.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Não foi possível baixar os dados da nuvem.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Os dados foram enviados com sucesso para a nuvem.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Não foi possível enviar os dados para a nuvem.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Não há dados em nuvem para download.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Diga aos seus amigos", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Compartilhar", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "O Privacy Badger (www.eff.org/privacybadger) é uma extensão de navegador que aprende automaticamente a bloquear rastreadores invisíveis. O Privacy Badger é feito pela Electronic Frontier Foundation, uma organização sem fins lucrativos que luta pelos seus direitos online.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copiar para área de transferência", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copiado", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nada a fazer nesta página", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "O Privacy Badger não funciona em páginas especiais como esta. Tente navegar em outro lugar.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "O Privacy Badger está desabilitado neste site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Substituição de widgets", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Quando bloquear botões de redes sociais e outros widgets potencialmente úteis (de vídeo, áudio, comentários), o Privacy Badger pode substitui-los por espaços reservados do tipo clique-para-ativar.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json new file mode 100644 index 0000000..fd321a0 --- /dev/null +++ b/src/_locales/pt_PT/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "$DOMAIN$ bloqueado", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Ficheiro JSON inválido.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Tem certeza de que deseja remover esse domínio do Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Nenhum rastreamento em $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Atualmente, o Privacy Badger apenas verifica se terceiros estão a usar cookies, armazenamento local em HTML5, ou canvas fingerprinting para rastrear a sua navegação. Alguns desses domínios podem estar a usar métodos de rastreamento que o Privacy Badger não consegue detetar.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Verificar se os domínios de terceiros estão em conformidade com a política de Não Rastrear da EFF", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Por favor, adicione um URL ou um domínio válido.", + "description": "" + }, + "donate_to_eff": { + "message": "Fazer um donativo à EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Ajude-nos com um donativo e partilhando o seu apoio às nossas ferramentas", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Não sou um bloqueador de anúncios, sou diferente", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Obrigado! Nós iremos verificar o problema.", + "description": "" + }, + "dnt_tooltip": { + "message": "Este domínio prometeu não rastreá-lo", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bloqueando este domínio é conhecido por quebrar os sítios da Internet", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Clicar para devolver o controlo deste domínio ao Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "próxima secção", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Por favor, reporte-nos o seguinte erro:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Gerir Dados", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Reportar um Erro", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "por ex. www.dominio.com, *.dominio.net, dominio.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Clique aqui para impedir que este domínio use cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Impedir que o WebRTC mostre o endereço de IP local", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "O Privacy Badger aprende automaticamente a bloquear rastreadores invisíveis. Tire um minuto para saber como.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "O que há de errado?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Domínios de Rastreamento", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Partilhar no Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Saiba como o Privacy Badger protege a sua privacidade", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Descarregar", + "description": "" + }, + "import": { + "message": "Importar", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Não substituir os seguintes widgets:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Permitir a substituição do widget", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Mostrar domínios que não parecem estar a rastreá-lo", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Enviar erro", + "description": "" + }, + "badger_status_allow": { + "message": "$DOMAIN$ permitido", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "O que é o Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Procurar domínios:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Aprender em janelas Privadas/Anónimas", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Ativar o aprendizado em janelas Privadas/Anónimas/Incógnito pode deixar rastros do seu histórico de navegação privada no seu computador. Por padrão, o Privacy Badger irá bloquear rastreadores já conhecidos em janelas Privadas/Anónimas/Incógnito, mas não aprenderá sobre novos rastreadores. Pode querer ativar esta opção caso utilize muito o modo de navegação em janelas Privadas/Anónimas/Incógnito.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Mostrar número de rastreadores", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "O que é um rastreador?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Por favor não esqueça de clicar em \"O Privacy Badger estragou este site? Diga-nos!\" se quiser ajudar-nos. Nós respeitamos a sua privacidade por isso os relatórios de problemas não são enviados automaticamente.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Opções do Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Sites desativados", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Ativar o Privacy Badger para este site", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrar por tipo:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Lista de rastreadores e configurações atualizadas com sucesso!", + "description": "" + }, + "export_user_data": { + "message": "Exportar dados de utilizador", + "description": "" + }, + "manage_data_intro": { + "message": "Importar dados do utilizador:
  • Substitui as configurações gerais
  • Combina as listas de sites desativados
  • Combina informações sobre os rastreadores que o Privacy Badger detetou
  • Substitui personalizações do controlo deslizante
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Limpar", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Limpar domínios de rastreamento", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Limpar os domínios de rastreamento irá:\n\n • Eliminar todos os dados sobre rastreadores que o Privacy Badger aprendeu com sua navegação\n • Restaurar a lista de domínios de rastreamento para a última lista pré-criada (visite www.eff.org/badger-pretraining para saber mais)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Remover tudo", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Remover todos os domínios de rastreamento", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Remover todos os domínios de rastreamento irá:\n\n • Eliminar tudo que o Privacy Badger sabe sobre os rastreadores\n • Fazer com que o Privacy Badger não bloqueie nada até que tenha a hipótese de reaprender a partir da sua navegação", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Agora está protegido pelo Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Para saber como o Privacy Badger funciona, clique abaixo para um tutorial rápido.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "O WebRTC pode revelar o seu endereço de IP local. Tenha em mente que se ativar esta opção pode reduzir o desempenho em aplicações de conferência Web como o Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Configurações Gerais", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Saber como funciona", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Clique aqui para bloquear totalmente este domínio", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versão $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Cookies bloqueados de $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "parcialmente bloqueado", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Compreendo, mesmo assim quero ver a lista de domínios de rastreamento.", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Obrigado por instalar o Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Por favor, selecione um ficheiro para importar.", + "description": "" + }, + "report_broken_site": { + "message": "O Privacy Badger estragou este site? Diga-nos!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centralize o controlo deslizante para bloquear cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Deteta rastreadores ocultos", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Fechar", + "description": "" + }, + "import_user_data": { + "message": "Importar dados de utilizador", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "Compatível com DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Ajuda", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "permitido", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "A privacidade é um desporto de equipa!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Não deve precisar de alterar nada aqui.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "todos", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Cancelar", + "description": "" + }, + "tooltip_block": { + "message": "Mova o controlo deslizante para a esquerda para bloquear um domínio", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "controlado pelo utilizador", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Um projeto da Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Adicionar domínio", + "description": "" + }, + "tooltip_allow": { + "message": "Mova o controlo deslizante para a direita para permitir um domínio", + "description": "" + }, + "popup_disable_for_site": { + "message": "Desativar o Privacy Badger para este site", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Clique aqui para permitir este domínio", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "O Privacy Badger NUNCA partilhará dados sobre a sua navegação, a não ser que escolha partilhá-los.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "O Privacy Badger ainda não detetou nenhum domínio de rastreamento. Continue a navegar.", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "O Privacy Badger começa a bloquear após detetar o mesmo rastreador em três sites diferentes. Três golpes e está fora!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrar por estado:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Descreva brevemente o erro abaixo.", + "description": "" + }, + "remove_button": { + "message": "Remover selecionado", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Quando usa o Privacy Badger, está a junta-se à Electronic Frontier Foundation e a outros milhões de utilizadores na luta pela privacidade. Somos uma organização sem fins lucrativos que luta pelos seus direitos na Internet. Obrigado por se juntar a nós.", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Para excluir domínios, preceda o seu termo de busca com \"-\". Por exemplo, \".co -.com\" mostrará domínios .co e .co.uk, mas não domínios .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Se acha que o Privacy Badger está a estragar uma página (por exemplo, não consegue ver um vídeo), pode clicar no botão \"Desativar\" para desativar o Privacy Badger para esse site.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Política de privacidade", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Descrição", + "description": "" + }, + "not_yet_blocked_header": { + "message": "O seu Badger ainda não decidiu se estes domínios devem ser bloqueados", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Mostrar domínios que o seu Badger ainda não se decidiu bloquear:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Os domínios abaixo não parecem estar a rastreá-lo", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Opções", + "description": "" + }, + "share_button_title_facebook": { + "message": "Partilhar no Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "O Privacy Badger aprende automaticamente a bloquear rastreadores invisíveis.", + "description": "" + }, + "report_fail": { + "message": "Ups. Algo correu mal.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "O Privacy Badger substituiu este botão $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "O Privacy Badger substituiu este widget $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Permitir esta vez", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Permitir sempre neste site", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Sincronização na nuvem:
  • Requer o Firefox/Chrome Sync
  • O envio substitui quaisquer dados existentes do Privacy Badger na nuvem
  • O descarregamento combina as listas de sites onde o Privacy Badger está desativado
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Enviar", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exportar sites desativados para a nuvem", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importar sites desativados da nuvem", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Os dados na nuvem foram importados com sucesso.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Não foi possível descarregar os dados na nuvem.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Os dados foram enviados com sucesso para a nuvem.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Não foi possível enviar os dados para a nuvem.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Não há dados na nuvem para descarregar.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Diga aos seus amigos", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Partilhar", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "O Privacy Badger (www.eff.org/privacybadger) é uma extensão de navegador que aprende automaticamente a bloquear rastreadores invisíveis. O Privacy Badger é feito pela Electronic Frontier Foundation, uma organização sem fins lucrativos que luta pelos seus direitos na Internet.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Copiar para área de transferência", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Copiado", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Nada a fazer nesta página", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "O Privacy Badger não funciona em páginas especiais como esta. Tente navegar noutro lugar.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "O Privacy Badger está desactivado neste site", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Substituição de Widgets", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Ao bloquear botões sociais e outros widgets possivelmente úteis (para vídeo, áudio, comentários, etc.), o Privacy Badger pode substituí-los por marcadores de lugar que clicam para ativar.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json new file mode 100644 index 0000000..4e38f63 --- /dev/null +++ b/src/_locales/ru/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Заблокирован $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Неверный файл JSON.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Вы уверены, что хотите удалить этот домен из Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Нет отслеживающей активности на $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "На данный момент Privacy Badger проверяет только использование сторонних файлов cookie, локального хранилища HTML5 или метода canvas fingerprinting для отслеживания вашей сетевой активности. Некоторые домены могут использовать методы отслеживания, которые Privacy Badger не может обнаружить.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Проверять, соблюдают ли сторонние домены политику EFF «Do Not Track»", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Пожалуйста, добавьте действительный домен или URL.", + "description": "" + }, + "donate_to_eff": { + "message": "Пожертвовать EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Помогите нам пожертвованиями и вашей поддержкой наших инструментов", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Не блокировщик рекламы, я другой", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Спасибо! Мы внимательно изучим эту проблему.", + "description": "" + }, + "dnt_tooltip": { + "message": "Этот домен обещает не отслеживать вас", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Блокирование этого домена вызывает неполадки на веб-сайтах", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Щелкните, чтобы вернуть этот домен под контроль Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "следующий раздел", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Пожалуйста, сообщите нам о возникшей проблеме:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Управление данными", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Сообщить об ошибке", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "например: www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Щелкните здесь, чтобы заблокировать создание файлов cookie с этого домена", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "заблокированные", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Предотвращать утечку локального IP-адреса через WebRTC", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger автоматически учится блокировать невидимые трекеры. Уделите минуту вашего времени, чтобы увидеть как.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Что случилось?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Домены с трекерами", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Поделиться в Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Узнайте, как Privacy Badger защищает вашу приватность", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Cкачать", + "description": "" + }, + "import": { + "message": "Импортировать", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Не заменят следующих виджетов:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Включить замену виджетов", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Отображать домены у которых отслеживающая активность не обнаружена", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Отправить сообщение об ошибке", + "description": "" + }, + "badger_status_allow": { + "message": "Разрешен $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Что такое Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Поиск доменов:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Обучение блокировки новых трекеров по мере вашего пользования Интернетом", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Включение обучения может помочь веб-сайтам идентифицировать вас", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Обучение в приватных/инкогнито окнах", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Включенное обучение в приватных/инкогнито окнах может оставить следы из приватной истории браузера на вашем компьютере. По умолчанию Privacy Badger блокирует уже известные ему трекеры в приватных/инкогнито окнах, но не обучается поиску новых трекеров. Вы можете захотеть включить эту опцию, если часто используете приватные/инкогнито окна.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger по умолчанию больше не будет обучаться по мере вашего пользования Интернетом.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Щелкните ниже, чтобы узнать больше.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Узнайте, как Privacy Badger развивается", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Отображать счетчик трекеров", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Что такое трекер?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Пожалуйста, не забывайте нажимать на кнопку 'Сообщить о неполадках на сайте'. Мы уважаем вашу приватность, поэтому не отправляем отчеты автоматически.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Настройки Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Это действие автоматически отправит в EFF следующую информацию: адрес страници, на которой вы находитесь в данный момент, версию вашего браузера, версию Privacy Badger и состояние всех переключателей на этой страницe.", + "description": "" + }, + "whitelisted_domains": { + "message": "Отключенные сайты", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Включить Privacy Badger на этом сайте", + "description": "" + }, + "options_domain_type_filter": { + "message": "Фильтр по типу:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Список трекеров и настройки успешно обновлены!", + "description": "" + }, + "export_user_data": { + "message": "Экспорт пользовательских данных", + "description": "" + }, + "manage_data_intro": { + "message": "Импорт пользовательских данных:
  • Перезапишет общие настройки
  • Объединит списки отключенных сайтов
  • Объединит информацию о том, какие трекеры Privacy Badger встретил
  • Перезапишет настройки переключателей
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Сбросить", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Сбросить домены с трекерами", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Сброс доменов с трекерами:\n\n • удалит все данные о трекерах, полученные Privacy Badger в процессе вашего пользования Интернетом\n • восстановит список доменов с трекерами до последней версии перед началом обучения (для получения более подробной информации посетите www.eff.org/badger-pretraining)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Удалить все", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Удалить все домены с трекерами", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Удаление всех доменов с трекерами:\n\n • удалит все трекеры, известные Privacy Badger\n • приведет к тому, что Privacy Badger не будет ничего блокировать до включения режима обучения во время пользования Интернетом", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Теперь вы под защитой Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Щелкните ниже, чтобы узнать, как работает Privacy Badger.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC может раскрыть ваш локальный IP-адрес. Примечание: включение данной опции может снизить производительность в приложениях для конференций, например Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Общие настройки", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Приватность", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Дополнительные", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Пройти тур", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Щелкните здесь, чтобы заблокировать этот домен полностью", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "версия $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Заблокированы файлы cookie от $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "частично заблокированные", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Понятно; пожалуйста, покажите список доменов с трекерами", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Спасибо вам за то, что установили Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Пожалуйста, выберите файл для импорта.", + "description": "" + }, + "report_broken_site": { + "message": "Сообщить о неполадках на сайте", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Передвиньте переключатель в центр, чтобы заблокировать файлы cookie", + "description": "" + }, + "intro_learns": { + "message": "Обучается автоматически", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Вместо составления списков блокировки, Privacy Badger автоматически обнаруживает трекеры на основе их поведения.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Ловит скользкие трекеры", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Невидимое отслеживание осуществляется многими способами; реклама — лишь видимая вершина айсберга. Privacy Badger отправляет сигнал Global Privacy Control, чтобы отказаться от разпростровления и продажи ваших данных, и отправляет сигнал Do Not Track компаниям, говоря им не отслеживать вас. Если они игнорируют ваши желания, Privacy Badger научится блокировать их вне зависимости от того, рекламные они трекеры или нет.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Закрыть", + "description": "" + }, + "import_user_data": { + "message": "Импорт пользовательских данных", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-зависимые", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Помощь", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "разрешенные", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Приватность — это командная работа!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Вам не придется здесь ничего менять.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "все", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Отмена", + "description": "" + }, + "tooltip_block": { + "message": "Передвиньте переключатель влево, чтобы заблокировать домен", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Отправлять сайтам сигналы «Global Privacy Control» и «Do Not Track»", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Отключить отправление адресов посещаемых веб-страниц в Google (это отключит предложение вариантов когда страница не найдена)", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Отключить аудит гиперссылок", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "измененные пользователем", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger отключен для данных сайтов. Это означает, что Privacy Badger не будет ничего блокировать на сайтах, находящихся в данном списке. Privacy Badger также не будет отправлять этим сайтам сигналы Do Not Track и Global Privacy Control.

Если вы считаете, что Privacy Badger вызывает неполадки на странице, или вы хотите позволить какой-то сайте разпростровлять или продавать ваши данные, вы можете напечатать домен данной страницы в поле ниже и нажать кнопку «Добавить домен».

Или же, если у вас открыта вкладка со страницей, вы можете выбрать Privacy Badger на панели инструментов и затем нажать кнопку «Отключить». ", + "description": "" + }, + "popup_instructions": { + "message": "Заблокировано $COUNT$ потенциальных $LINK_START$трекеров$LINK_END$", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "$LINK_START$Трекеров$LINK_END$ заблокированных нет", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "На этой странице нет сторонних веб-ресурсов. Приватность соблюдена.", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Проект Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Добавить домен", + "description": "" + }, + "tooltip_allow": { + "message": "Передвиньте переключатель вправо, чтобы разблокировать домен", + "description": "" + }, + "popup_disable_for_site": { + "message": "Отключить Privacy Badger на этом сайте", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Щелкните здесь, чтобы разблокировать этот домен", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger НИКОГДА не будет делиться данными о вашей активности в Интернете, пока вы сами того не захотите.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger решил заблокировать $COUNT$ потенциальных $TRACKER_LINK_START$доменов с трекерами$TRACKER_LINK_END$ на данный момент", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger не обнаружил ни одного домена с трекерами. Продолжайте просмотр Интернета.", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger начинает блокировать трекер после того, как обнаруживает его на трёх разных веб-сайтах. Три удара — и все!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Фильтр по статусу:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Введите короткое описание ошибки.", + "description": "" + }, + "remove_button": { + "message": "Удалить выбранные элементы", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Когда вы используете Privacy Badger, вы присоединяетесь к Electronic Frontier Foundation и миллионам других пользователей в борьбе за приватность. Мы — некоммерческая организация, борющаяся на ваши права в Интернете. Спасибо, что присоединились к нам!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Для исключения доменов, добавьте «-» перед поисковым запросом. Например, «.co -.com» выведет .co и .co.uk, но не домены .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Если вы думаете, что Privacy Badger портит веб-страницу (например, не воспроизводится видео), вы можете нажать кнопку 'Отключить', чтобы выключить Privacy Badger для этого сайта.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Политика конфиденциальности", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Описание", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Ваш Badger еще не решил, нужно ли заблокировать этих домен", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Отображать домены, которые ваш Badger еще не решил заблокировать:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "У приведенных ниже доменов отслеживающая активность не обнаружена", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Настройки", + "description": "" + }, + "share_button_title_facebook": { + "message": "Поделиться в Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger автоматически учится блокировать невидимые трекеры.", + "description": "" + }, + "report_fail": { + "message": "Ой, что-то пошло не так.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger заменил кнопку $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger заменил виджет $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Разрешить однократно", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Всегда разрешать на этом сайте", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Облачная синхронизация:

  • Требуется Firefox/Chrome Sync
  • При загрузке все находящиеся в облаке данные Privacy Badger перезаписываются
  • При скачивании списки сайтов с отключенным Privacy Badger объединяются
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Загрузить", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Экспорт отключенных сайтов в облако", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Импорт отключенных сайтов из облака", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Данные успешно импортированы из облака.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Данные не могут быть загружены из облака.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Данные успешно загружены в облако.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Данные не могут быть загружены в облако.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "В облаке нет данных для загрузки.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Расскажите друзьям", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Поделиться", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger заблокировал $COUNT$ потенциальных трекеров на $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) — это расширение для браузера, которое автоматически учится блокировать невидимые трекеры. Privacy Badger разработан некоммерческой организацией Electronic Frontier Foundation, которая борется на ваши права в Интернете.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Скопировать в буфер обмена", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Скопировано", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Нечего делать на этой странице", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger не работает на специальных страницах, как эта. Попробуйте где-нибудь еще.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger отключен на этом сайте", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Замена виджетов", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "При блокирование кнопок социальных сетей и других потенциально полезных виджетов (видео, аудио, комментарии), Privacy Badger можеt заменить их специальными элементами.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/sv/messages.json b/src/_locales/sv/messages.json new file mode 100644 index 0000000..69befb5 --- /dev/null +++ b/src/_locales/sv/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Blockerade $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Ogiltig JSON-fil.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Är du säker på att du vill ta bort den här domänen från Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Ingen spårare för $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "För närvarande kontrollerar Privacy Badger endast om tredjeparter använder kakor, HTML5-lagring eller canvas fingeravtryck för att spåra din surfning. Vissa av domänerna kan använda spårningsmetoder som Privacy Badger inte kan upptäcka.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Kontrollera om tredjepartsdomäner rättar sig efter EFF:s Spåra inte policy", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Lägg till en giltig domän eller webbadress.", + "description": "" + }, + "donate_to_eff": { + "message": "Donera till EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Hjälp oss genom att donera och dela ditt stöd till våra verktyg", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Inte en annonsblockerare, jag är annorlunda", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Tack! Vi kommer att gå till botten med det.", + "description": "" + }, + "dnt_tooltip": { + "message": "Denna domän lovar att inte spåra dig", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Blockering av denna domän är känt att bryta webbplatser", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Klicka för att återställa kontrollen över denna domän till Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "nästa avsnitt", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Berätta för oss om följande fel:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Hantera data", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Påpeka ett fel", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "t.ex. www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Klicka här för att blockera den här domänen från att ställa in cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "blockerad", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Förhindra WebRTC från att läcka din lokala IP-adress", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger lär sig automatiskt att blockera osynliga spårare. Ta en minut för att se hur.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Vad är fel?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Spårningsdomäner", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Dela på Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Lär dig hur Privacy Badger skyddar din integritet", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Hämta", + "description": "" + }, + "import": { + "message": "Importera", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Ersätt inte följande gränssnittskomponenter:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Aktivera gränssnittskomponentsersättning", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Visa domäner som inte verkar spåra dig", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Skicka fel", + "description": "" + }, + "badger_status_allow": { + "message": "Tillät $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Vad är Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Sök domäner:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Inlärning i privata-/inkognitofönster", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Aktivering av inlärning i privata-/inkognitofönster kan lämna spår av din privata surfhistorik på din dator. Som standard kommer Privacy Badger att blockera spårare som den redan känner till i privata-/inkognitofönster, men den kommer inte att lära sig om nya spårare. Du kan vilja aktivera den här inställningen om du ofta använder privata-/inkognitofönster när du surfar.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Visa räkningen av spårare", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Vad är en spårare?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Glöm inte att klicka på \"Bröt Privacy Badger denna webbplats\". Vi respekterar din integritet så vi skickar inte automatiska rapporter.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger-inställningar", + "description": "" + }, + "report_terms": { + "message": "Detta skickar automatiskt följande information till EFF: sidan du för närvarande besöker, din webbläsarversion, versionen av Privacy Badger och lägen för alla skjutreglagen för den här sidan.", + "description": "" + }, + "whitelisted_domains": { + "message": "Inaktiverade webbplatser", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Aktivera Privacy Badger för denna webbplats", + "description": "" + }, + "options_domain_type_filter": { + "message": "Filtrera efter typ:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Listan över spårare och inställningarna uppdaterades!", + "description": "" + }, + "export_user_data": { + "message": "Exportera användardata", + "description": "" + }, + "manage_data_intro": { + "message": "Importera användardata:
  • Skriver över allmänna inställningar
  • Kombinerar listor över inaktiva webbplatser
  • Kombinerar information om vilka spårare Privacy Badger har sett
  • Skriver över skjutreglage-anpassningar
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Återställ", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Återställ spårningsdomäner", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Återställa spårningsdomäner kommer att:\n\n • Ta bort all data om spårare som Privacy Badger har lärt dig från din surfning\n • Återställ spårningsdomänlistan till den senaste förutbildade listan (besök www.eff.org/badger-pretraining för mer information)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Ta bort alla", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Ta bort alla spårningsdomäner", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Ta bort alla spårningsdomäner kommer att:\n\n • Ta bort allt Privacy Badger känner till om spårare\n • Göra att Privacy Badger inte blockera någonting förrän den har fått en chans att återlära av din surfning", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Du skyddas nu av Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "För att lära dig hur Privacy Badger fungerar, klicka nedan för en snabb handledning.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC kan läcka din lokala IP-adress. Observera att aktivering av den här inställningen kan försämra prestanda för webbkonferensprogram som Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Allmänna inställningar", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Ta turen", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Klicka här för att helt blockera den här domänen", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "version $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Blockerade kakor från $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "delvis blockerad", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Jag förstår; visa mig spårningsdomänlistan ändå", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Tack för att du installerat Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Vänligen välj en fil att importera.", + "description": "" + }, + "report_broken_site": { + "message": "Bröt Privacy Badger denna webbplats? Låt oss veta!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Centrera skjutreglaget för att blockera kakor", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Fångar lömska spårare", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Stäng", + "description": "" + }, + "import_user_data": { + "message": "Importera användardata", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-kompatibel", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Hjälp", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "tillåten", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Integritet är en lagsport!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Du ska inte behöva ändra någonting här.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "alla", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Avbryt", + "description": "" + }, + "tooltip_block": { + "message": "Flytta skjutreglaget till vänster för att blockera en domän", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "användarstyrd", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "Det finns inga resurser från tredje part på den här sidan. Hurra för privatliv!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Ett projekt av Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Lägg till domän", + "description": "" + }, + "tooltip_allow": { + "message": "Flytta skjutreglaget till höger för att tillåta en domän", + "description": "" + }, + "popup_disable_for_site": { + "message": "Inaktivera Privacy Badger för denna webbplats", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Klicka här för att registrera dig", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger kommer ALDRIG att dela data om din surfning om du inte väljer att dela den.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger har inte detekterat några spårningsdomäner ännu. Fortsätt surfa!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger börjar blockera när den ser samma spårare på tre olika webbplatser. Tre strike och den är ute!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Filtrera efter status:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Beskriv kortfattat felet nedan.", + "description": "" + }, + "remove_button": { + "message": "Ta bort valda", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "När du använder Privacy Badger, går du med i Electronic Frontier Foundation och miljontals andra användare i kampen för integritet. Vi är en ideell organisation som kämpar för dina rättigheter på nätet. Tack för att du blev en av oss!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "För att utesluta domäner, börja ditt sökord med \"-\". Till exempel kommer \".co -.com\" för att visa .co och .co.uk men inte .com domäner.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Om du tror att Privacy Badger bryter en sida (till exempel en video spelar inte) kan du klicka på knappen \"Inaktivera\" för att stänga av Privacy Badger för den webbplatsen.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Sekretesspolicy", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Beskrivning", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Din Badger har ännu inte beslutat om dessa domäner ska blockeras", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Visa domäner som din Badger inte har beslutat att blockera ännu:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Domänerna nedan verkar inte spåra dig", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Inställningar", + "description": "" + }, + "share_button_title_facebook": { + "message": "Dela på Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger lär sig automatiskt att blockera osynliga spårare.", + "description": "" + }, + "report_fail": { + "message": "Hoppsan. Något gick snett.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger har ersatt den här $BUTTON$-knappen", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger har ersatt den här $WIDGET$-gränssnittskomponenten", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Tillåt en gång", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Tillåt alltid på den här webbplatsen", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Molnsynkronisering:
  • Kräver Firefox/Chrome Sync
  • Sändningen skriver över alla befintliga Privacy Badger-data i molnet
  • Hämtning kombinerar listorna över webbplatser där din Badger är inaktiverad
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Skicka", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Exportera inaktiverade webbplatser till molnet", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Importera inaktiverade webbplatser från molnet", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Molndata importerades.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Molndata kunde inte hämtas.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Molndata skickades.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Molndata kunde inte skickas.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Inga molndata att hämta.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Berätta för dina vänner", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Dela", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) är ett webbläsartillägg som automatiskt lär sig att blockera osynliga spårare. Privacy Badger är gjord av Electronic Frontier Foundation, en ideell organisation som kämpar för dina rättigheter på nätet.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Kopiera till urklipp", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopierad", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Inget att göra på den här sidan", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger fungerar inte på särskilda sidor som den här. Prova att surfa någon annanstans.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger är inaktiverad på denna webbplats", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Gränssnittskomponentsersättning", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Vid blockering av sociala knappar och andra potentiellt användbara gränssnittskomponenter (video, ljud, kommentarer) kan Privacy Badger ersätta med klick-för-att-aktivera platshållare.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json new file mode 100644 index 0000000..876576d --- /dev/null +++ b/src/_locales/tr/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Engellendi $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Geçersiz JSON dosyası.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Bu adresi Privacy Badger'dan kaldırmak istediğinize emin misiniz?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Takip yok $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "Şu an Privacy Badger sadece 3. partilerin çerez, yerel HTML5 depolaması, veya tuval parmak izi kullanarak taramanızı takip edip etmediğini kontrol ediyor. Bazı adresler Privacy Badger tarafından algılanmayan yöntemler kullanıyor olabilir.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Üçüncü parti adreslerin EFF'nin Do Not Track poliçesine uyup uymadığını kontrol et", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Lütfen geçerli bir adres veya URL girin.", + "description": "" + }, + "donate_to_eff": { + "message": "EFF'ye bağış yap", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Bağışta bulunarak ve araçlarımıza desteğinizi paylaşarak bize yardım edin", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Ben bir reklam önleyici değilim, farklıyım", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Teşekkürler! Bunu araştıracağız.", + "description": "" + }, + "dnt_tooltip": { + "message": "Bu adres sizi takip etmeme sözü veriyor.", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Bu domainin engellenmesinin websiteleri bozduğu biliniyor", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Bu domainin kontrolünü Privacy Badger'a bırakmak için tıklayın", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "sonraki bölüm", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Lütfen bize şu hata hakkında bilgi verin:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Veriyi Düzenle", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Hata Rapor Et", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "örn. www.adres.com, *.adres.net, adres.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Bu adresin çerez kullanmasını engellemek için buraya tıkla", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "engellenmiş", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "WebRTC'nin yerel IP adresini açığa çıkarmasını engelle", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger görünmez takipçileri engellemeyi otomatik olarak öğrenir. Nasıl olduğunu görmek için bir dakika ayırın.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Sorun Nedir?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Takip Eden Adresler", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Twitter'da Paylaş", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Privacy Badger'ın gizliliğinizi nasıl koruduğunu öğrenin", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "İndir", + "description": "" + }, + "import": { + "message": "İçeri aktar", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Şu widgetları değiştirme:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Widget değiştirmesini aç", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Sizi izlemiyor gibi görünen adresleri göster", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Hata Gönder", + "description": "" + }, + "badger_status_allow": { + "message": "Şuna izin verildi: $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Privacy Badger nedir?", + "description": "" + }, + "options_domain_search": { + "message": "Adresleri ara:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Özel/Gizli pencerelerde öğren", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Özel/gizli pencerelerde öğrenmeyi etkinleştirmek bilgisayarınızdaki özel arama geçmişinize dair izler bırakabilir. Varsayılan olarak, Privacy Badger halihazırda haberdar olduğu takipçileri Özel/Gizli pencerelerde engeller, ancak yeni takipçiler hakkında bilgi edinmez. Eğer gezintinizin büyük bölümü Özel/Gizli pencerelerde oluyorsa bunu etkinleştirmek isteyebilirsiniz.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Takipçi sayısını göster", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Takipçi nedir?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Lütfen 'Privacy Badger bu siteyi bozdu mu' butonuna tıklamayı unutmayın. Gizliliğinize önem veriyoruz ve bu yüzden otomatik raporlar göndermiyoruz.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger Seçenekleri", + "description": "" + }, + "report_terms": { + "message": "This will automatically send the following information to EFF: the page you're currently visiting, your browser version, the version of Privacy Badger, and the state of all of the sliders on this page.", + "description": "" + }, + "whitelisted_domains": { + "message": "Engellenmiş Siteler", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Bu Site İçin Privacy Badger'ı Etkinleştir", + "description": "" + }, + "options_domain_type_filter": { + "message": "Türe göre filtrele:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Takipçi listesi ve ayarlar başarıyla değiştirildi!", + "description": "" + }, + "export_user_data": { + "message": "Kullanıcı verisini dışa aktar", + "description": "" + }, + "manage_data_intro": { + "message": "Kullanıcı verisini içe aktarmak:
  • Genel ayarları değiştirir
  • Engellenmiş sitelerin listesini birleştirir
  • Privacy Badger'ın takipçiler hakkındaki bilgilerini birleştirir
  • Kaydırıcı ayarlarını değiştirir
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Sıfırla", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Takip eden adresleri sıfırla", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Takip eden adresleri sıfırlamak:\n\n • Privacy Badger'ın gezinmeniz sırasında elde ettiği verileri silecek\n • Takip eden adres listesini en son önceden-eğitimli listeye geri döndürecek (daha fazlasını öğrenmek için www.eff.org/badger-pretraining adresini ziyaret edin)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Hepsini kaldır", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Takip eden adreslerin hepsini kaldır", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Takip eden adreslerin hepsini kaldırmak:\n\n • Privacy Badger'ın takipçilerle ilgili bildiği her şeyi silecek\n • Privacy Badger gezinmeniz sırasında tekrar birşeyler öğrenene dek hiçbir şeyi engellemeyecek", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Şu an Privacy Badger tarafından korunuyorsunuz.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Privacy Badger'ın nasıl çalıştığını öğrenmek için aşağıdaki kısa öğreticiye tıklayabilirsiniz.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC yerel IP adresinizi açığa çıkarabilir. Bu seçeneğin etkinleştirilmesinin Google Hangouts gibi web konferans araçlarında performansı düşürebileceğini göz önünde bulundurun.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Genel Ayarlar", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Privacy", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Advanced", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Tura çık", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Bu adresi tamamen engellemek için tıklayın", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "versiyon $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Şuradan çerezler engellendi: $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "kısmen engellenmiş", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Anladım; yine de lütfen bana takip eden adreslerin listesini göster", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Privacy Badger'ı yüklediğiniz için teşekkürler!", + "description": "" + }, + "import_select_file": { + "message": "İçeri aktarmak için bir dosya seçin.", + "description": "" + }, + "report_broken_site": { + "message": "Privacy Badger bu siteyi bozdu mu? Bizi bilgilendirin!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Çerezleri engellemek için kaydırıcıyı ortalayın", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Sinsi takipçileri yakalar", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Kapat", + "description": "" + }, + "import_user_data": { + "message": "Kullanıcı verisini içe aktar", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT uyumlu", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Yardım", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "izin verilmiş", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Gizlilik bir takım sporudur!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Buradaki hiçbir şeyi düzenlemeniz gerekmez.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "hepsi", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "İptal", + "description": "" + }, + "tooltip_block": { + "message": "Bir adresi engellemek için kaydırıcıyı sola kaydırın", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Disable sending web addresses you visit to Google. This disables suggestions for similar pages when a page can't be found.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Disable hyperlink auditing", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "kullanıcı kontrolünde", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "There are no third party resources on this page. Hooray for privacy!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Bir Electronic Frontier Foundation projesi", + "description": "" + }, + "add_domain_button": { + "message": "Adres Ekle", + "description": "" + }, + "tooltip_allow": { + "message": "Bir adrese izin vermek için kaydırıcıyı sağa kaydırın", + "description": "" + }, + "popup_disable_for_site": { + "message": "Bu Site İçin Privacy Badger'ı Devre Dışı Bırak", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Bu adrese izin vermek için tıklayın", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger siz istemediğiniz sürece gezintiniz hakkında ASLA veri paylaşmaz.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger hiçbir takipçi adres algılamadı. Gezinmeye devam!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger, bir takipçiyi üç farklı websitesinde gördükten sonra engellemeye başlar.", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Duruma göre filtrele:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Hatayı aşağıda kısaca özetleyin.", + "description": "" + }, + "remove_button": { + "message": "Seçilenleri kaldır", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Privacy Badger kullandığınızda Electronic Frontier Foundation'a ve gizlilik için savaşan milyonlarca diğer kullanıcıya katılmış olursunuz. Biz çevrimiçi haklarınız için savaşan, kar amacı gütmeyen bir kuruluşuz. Bize katıldığınız için teşekkür ederiz!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Adresleri dışlamak için, arama metninizin başına \"-\" getirin. Örneğin, \".co -.com\" size .co ve .co.uk adreslerini gösterir ancak .com göstermez.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Eğer Privacy Badger'ın bir sayfayı bozduğunu düşünüyorsanız (örneğin başlatılamayan bir video), 'Devre Dışı Bırak' butonuna tıklayarak Privacy Badger'ı o site için kapatabilirsiniz.", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Gizlilik Politikası", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Açıklama", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Badger'ınız henüz bu adreslerin engellenmesi gerekip gerekmediğine karar vermemiş", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Badger'ınızın henüz engellemeye karar vermediği adresleri göster:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Aşağıdaki adresler sizi takip etmiyor gibi görünüyor", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Ayarlar", + "description": "" + }, + "share_button_title_facebook": { + "message": "Facebook'ta Paylaş", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger görünmez takipçileri engellemeyi otomatik olarak öğrenir.", + "description": "" + }, + "report_fail": { + "message": "Tüh. Birşeyler ters gitti.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger bu $BUTTON$ butonunu değiştirdi", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger bu $WIDGET$ widgetı değiştirdi", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Bir kerelik izin ver", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Bu sitede her zaman izin ver", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Bulut senkronizasyonu:
  • Firefox/Chrome Sync gerekir
  • Buluta yapılan yükleme, buluttaki Privacy Badger verisinin üstüne yazılır
  • İndirme işlemi Badger'ınızın engellediği sitelerin listelerini birleştirir
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Buluta yükle", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Engellenmiş siteleri buluta aktar", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Engellenmiş siteleri buluttan içe aktar", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Buluttaki veri başarıyla yüklendi.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Buluttaki veri indirilemedi.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Veri başarıyla buluta yüklendi.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Veri, buluta yüklenemedi.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "İndirilecek bulut verisi yok.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Arkadaşlarınızla paylaşın", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Paylaş", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger), görünmez takipçileri otomatik olarak engellemeyi öğrenen bir tarayıcı eklentisidir. Privacy Badger, çevrimiçi haklarınız için savaşan, kar amacı gütmeyen bir kuruluş olan Electronic Frontier Foundation tarafından yapılmıştır.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Panoya kopyala", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Kopyalandı", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Bu sayfada yapılacak bir şey yok", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger bu gibi özel sayfalarda çalışmaz. Başka bir yerde gezinmeyi deneyin.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger bu sitede devre dışı bırakıldı", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Widget Değiştirme", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "Sosyal butonları ve diğer potansiyel olarak yararlı (video, ses, yorum) widgetlarını engellerken, Privacy Badger onları tıkla-çalıştır yer tutucularla değiştirebilir.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/uk/messages.json b/src/_locales/uk/messages.json new file mode 100644 index 0000000..7262120 --- /dev/null +++ b/src/_locales/uk/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "Заблоковано $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "Неправильний файл JSON.", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "Ви справді хочете вилучити цей домен з Privacy Badger?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "Немає стеження для $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "В даний момент Privacy Badger лише перевіряє, чи сторонні елементи не використовують куки, локальне сховище HTML5, або відбиток canvas для стеження за вашим переглядом. Деякі з цих доменів можуть використовувати способи стеження, які Privacy Badger не в змозі виявити.", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "Перевіряти, чи сторонні домени підтримують політику EFF щодо відмови від стеження", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "Будь ласка, додайте дійсний домен чи URL-адресу.", + "description": "" + }, + "donate_to_eff": { + "message": "Зробити внесок для EFF", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "Допоможіть нам, зробивши внесок і виявивши свою підтримку наших засобів", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "Дещо інше, ніж звичайні засоби для блокування реклами", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "Дякуємо! Ми доберемося до причини виникнення проблеми.", + "description": "" + }, + "dnt_tooltip": { + "message": "Цей домен обіцяє не стежити за вами", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "Блокування цього домену пошкоджує вебсайти", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "Натисніть для повернення контролю над цим доменом до Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "наступний розділ", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "Будь ласка, розкажіть нам про наступну помилку:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "Керувати даними", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "Звіт про помилку", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "наприклад, www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "Натисніть тут, щоб заблокувати встановлення куків з цього домена", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "заблоковані", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "Не дозволяти WebRTC виявляти локальну IP-адресу", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger автоматично навчається блокувати невидимі елементи стеження. Витратьте хвилинку, щоб поглянути як.", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "Що не так?", + "description": "" + }, + "options_domain_list_tab": { + "message": "Домени стеження", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "Поширити у Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "Дізнайтеся, як Privacy Badger захищає вашу приватність", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "Завантажити", + "description": "" + }, + "import": { + "message": "Імпорт", + "description": "" + }, + "options_hide_social_widgets": { + "message": "Не замінювати такі віджети:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "Увімкнути заміну віджетів", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "Показувати домени, що не стежать за вами", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "Повідомити про помилку", + "description": "" + }, + "badger_status_allow": { + "message": "Дозволено $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Що таке Privacy Badger?", + "description": "" + }, + "options_domain_search": { + "message": "Пошук доменів:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Навчитися блокувати нові елементи стеження під час перегляду", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Увімкнення навчання може дозволити вебсайтам легше ідентифікувати вас", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "Навчання у приватних/анонімних вікнах", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "Увімкнення навчання у приватних/анонімних вікнах може залишати сліди історії перегляду на комп'ютері. Типово, Privacy Badger буде блокувати відомі йому елементи стеження в приватних/анонімних вікнах, але не буде вивчати нові. Ймовірно, ви захочете увімкнути цю функцію, якщо багато часу проводите у приватному/анонімному перегляді.", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger відтепер типово не навчатиметься під час перегляду.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Натисніть внизу, щоб дізнатися більше.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Дізнатися, як розвивається Privacy Badger", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "Показувати лічильник стеження", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "Що таке стеження?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "Будь ласка, не забудьте натиснути на \"Privacy Badger пошкодив цей сайт? Повідомте нас!\". Ми поважаємо вашу приватність, і тому не надсилаємо автоматичні звіти.", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Налаштування Privacy Badger", + "description": "" + }, + "report_terms": { + "message": "Ця дія призведе до автоматичного надсилання такої інформації до EFF: відвідувана сторінка, версія браузера, версія Privacy Badger, а також положення всіх перемикачів для цієї сторінки.", + "description": "" + }, + "whitelisted_domains": { + "message": "Вимкнені сайти", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "Увімкнути Privacy Badger для цього сайту", + "description": "" + }, + "options_domain_type_filter": { + "message": "Фільтр за типом:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "Список елементів стеження й налаштування успішно оновлено!", + "description": "" + }, + "export_user_data": { + "message": "Експорт користувацьких даних", + "description": "" + }, + "manage_data_intro": { + "message": "Імпорт даних користувача:
  • Перезаписуються загальні налаштування
  • Об'єднуються списки вимкнених сайтів
  • Об'єднується інформація про виявлені елементи стеження Privacy Badger
  • Перезаписуються налаштування перемикачів
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "Відновити", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "Відновити домени стеження", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "Відновлення доменів стеження спричинить:\n\n • Вилучення всіх даних про елементи стеження, які Privacy Badger виявив за час користування браузером\n • Відновлення списку доменів стеження до останньої стандартної версії (для докладних відомостей відвідайте www.eff.org/badger-pretraining)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "Вилучити все", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "Вилучити всі домени стеження", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "Вилучення всіх доменів стеження спричинить:\n\n • Вилучення всіх даних, відомих Privacy Badger про стеження\n • Privacy Badger не буде блокувати нічого, доки не виявить стеження під час роботи браузера", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Тепер вас захищає Privacy Badger.", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "Щоб дізнатися, як працює Privacy Badger, натисніть внизу для швидкого ознайомлення.", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC може виявляти вашу локальну IP-адресу. Зауважте, що ця опція може спричинити погіршення швидкодії певних інструментів для веб-конференцій, таких як Google Hangouts.", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "Загальні налаштування", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "Приватність", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "Розширені", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "Переглянути знайомство", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "Натисніть тут, щоб повністю заблокувати цей домен", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "версія $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "Заблоковано куки з $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "частково заблоковані", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "Я розумію. Будь ласка, все одно покажіть мені перелік доменів стеження", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "Дякуємо за встановлення Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "Оберіть файл для імпорту.", + "description": "" + }, + "report_broken_site": { + "message": "Privacy Badger пошкодив цей сайт? Повідомте нас!", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "Встановіть перемикач посередині, щоб дозволити куки", + "description": "" + }, + "intro_learns": { + "message": "Навчається автоматично", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Замість використання списків блокування, Privacy Badger автоматично виявляє елементи стеження на основі їх поведінки.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "Перехоплює підступне стеження", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "Закрити", + "description": "" + }, + "import_user_data": { + "message": "Імпорт користувацьких даних", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT-сумісні", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "Допомога", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "дозволені", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "Приватність - це командна гра!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "Вам не слід щось тут змінювати.", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "всі", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "Скасувати", + "description": "" + }, + "tooltip_block": { + "message": "Змініть положення перемикача вліво, щоб заблокувати домен", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "Вимкнути надсилання відвідуваних веб адрес в Google. Ця дія вимикає пропозиції для схожих сторінок, коли сторінку не вдається знайти.", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "Вимкнути аудит гіперпосилань", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "контрольовані користувачем", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "Заблоковано $COUNT$ потенційних $LINK_START$елементів стеження$LINK_END$", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "Немає заблокованих $LINK_START$елементів стеження$LINK_END$", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "На цій сторінці немає сторонніх ресурсів. Приватність на найвищому рівні!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "Проект Electronic Frontier Foundation", + "description": "" + }, + "add_domain_button": { + "message": "Додати домен", + "description": "" + }, + "tooltip_allow": { + "message": "Змініть положення перемикача вправо, щоб дозволити домен", + "description": "" + }, + "popup_disable_for_site": { + "message": "Вимкнути Privacy Badger для цього сайту", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "Натисніть тут, щоб дозволити цей домен", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger НІКОЛИ нікому не передає ваші дані доки ви самі не захочете зробите це.", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger наразі вирішив заблокувати $COUNT$ потенційних $TRACKER_LINK_START$доменів стеження$TRACKER_LINK_END$", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger досі не виявив жодного домену стеження. Продовжуйте перегляд!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger починає блокування, як тільки він бачить, що один і той самий елемент стеження з'являється на трьох різних вебсайтах. Три попадання і він заблокований!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "Фільтр за статусом:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "Коротко опишіть помилку.", + "description": "" + }, + "remove_button": { + "message": "Вилучити обрані", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "Використовуючи Privacy Badger, ви долучаєтесь до спільноти Electronic Frontier Foundation разом з мільйонами інших користувачів, які відстоюють приватність. Ми є некомерційною організацією, яка відстоює ваші права онлайн. Дякуємо, що приєдналися до нас!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "Щоб виключити домени, поставте на початку свого пошукового запиту \"-\". Наприклад, \".co -.com\" буде показувати домени .co та .co.uk але не .com.", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "Якщо ви вважаєте, що Privacy Badger пошкодив сторінку (наприклад, не відтворюється відео), ви можете вимкнути його на цій сторінці, натиснувши \"Вимкнути Privacy Badger для цього сайту\".", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "Політика приватності", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "Опис", + "description": "" + }, + "not_yet_blocked_header": { + "message": "Badger ще не вирішив, чи слід блокувати ці домени", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "Показати домени, які Badger ще не вирішив блокувати:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "Домени, що не стежать за вами", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "Налаштування", + "description": "" + }, + "share_button_title_facebook": { + "message": "Поширити на Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger автоматично навчається блокувати невидимі елементи стеження.", + "description": "" + }, + "report_fail": { + "message": "Ой. Щось пішло не так.", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger змінив цю кнопку $BUTTON$", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger замінив цей віджет $WIDGET$", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "Дозволити один раз", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "Завжди дозволяти на цьому сайті", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "Синхронізація:
  • Необхідний обліковий запис Firefox/Chrome
  • Вивантаження перезаписує наявні дані в хмарному сховищі
  • Завантаження об'єднує списки сайтів, на яких Privacy Badger вимкнений
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "Вивантажити", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "Експорт вимкнених сайтів у хмарне сховище", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "Імпорт вимкнених сайтів з хмарного сховища", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "Дані успішно імпортовано з хмарного сховища.", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "Не вдалося завантажити дані з хмарного сховища.", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "Дані успішно вивантажено в хмарне сховище.", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "Не вдалося вивантажити дані в хмарне сховище.", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "Хмарне сховище не містить даних для завантаження.", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "Розповісти друзям", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "Поширити", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger заблокував $COUNT$ потенційних елементів стеження на $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) - це розширення для браузера, що автоматично навчається блокувати невидимі елементи стеження. Privacy Badger розроблено некомерційною організацією Electronic Frontier Foundation, яка відстоює ваші права онлайн.", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "Копіювати в буфер обміну", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "Скопійовано", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "Немає чого робити на цій сторінці", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger не працює на таких сторінках, як ця. Спробуйте переглянути інші сторінки.", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger вимкнений на цьому сайті", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "Заміна віджетів", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "При блокуванні кнопок соціальних мереж та інших потенційно корисних віджетів (відео, аудіо, коментарі), Privacy Badger може замінювати їх спеціальними елементами з можливістю вибіркової активації.", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json new file mode 100644 index 0000000..d216921 --- /dev/null +++ b/src/_locales/zh_CN/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "已屏蔽 $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "无效的 JSON 文件。", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "确定要从隐私獾中移除这个域名吗?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "$DOMAIN$ 没有追踪", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "隐私獾只检查第三方域名是否在使用 Cookies、HTML5 本地存储和 canvas 指纹来追踪你的浏览记录。 有些域名可能使用了隐私獾无法检测的追踪方式。", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "检查第三方域名是否遵守电子前哨基金会的“请勿追踪”政策", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "请添加一个有效的域名或者 URL。", + "description": "" + }, + "donate_to_eff": { + "message": "向电子前哨基金会捐款", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "捐款并分享对我们工具的支持来帮助我们", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "不是广告拦截器,我不一样", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "谢谢!我们会调查这个问题。", + "description": "" + }, + "dnt_tooltip": { + "message": "这个域名承诺不会追踪你", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "已知屏蔽此域名会破坏网站", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "点击让隐私獾重新控制此域名", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "下一节", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "请告诉我们以下的错误信息:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "管理数据", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "报告错误", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "例如 www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "点击这里屏蔽此域名的 Cookies", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "已屏蔽", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "阻止 WebRTC 泄露本地 IP 地址", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "隐私獾会自动学习去屏蔽不可见的追踪器。看看这是如何做到的吧。", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "发生了什么问题?", + "description": "" + }, + "options_domain_list_tab": { + "message": "追踪域名", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "分享到 Twitter", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "了解隐私獾如何保护你的隐私", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "下载", + "description": "" + }, + "import": { + "message": "导入", + "description": "" + }, + "options_hide_social_widgets": { + "message": "不要替换以下小部件:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "开启小部件替换", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "显示看起来没有追踪你的域名", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "报告错误", + "description": "" + }, + "badger_status_allow": { + "message": "允许 $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "什么是隐私獾?", + "description": "" + }, + "options_domain_search": { + "message": "搜索域名:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "Learn to block new trackers from your browsing", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "Enabling learning may make you more identifiable to websites", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "在隐私/无痕模式下学习", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "启用“在隐私/无痕模式学习”后,你的隐私浏览历史可能会在电脑中留下痕迹。默认设置下,隐私獾会在隐私/无痕模式时屏蔽已知的追踪器,但不会学习新的追踪器。如果你平时经常使用隐私/无痕模式的话,你可能想要启用这个选项。", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "Privacy Badger will no longer learn from your browsing by default.", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "Click below to learn more.", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "Learn how Privacy Badger is changing", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "显示追踪器数量", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "什么是追踪器?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "请不要忘记点击“报告隐私獾导致的显示异常的网站”。我们尊重您的隐私,因此我们不自动发送报告。", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "隐私獾设置", + "description": "" + }, + "report_terms": { + "message": "这将会向电子前哨基金会发送这些信息:你当前正在访问的页面、浏览器版本、隐私獾版本以及本页面所有滑块的状态。", + "description": "" + }, + "whitelisted_domains": { + "message": "已禁用的域名", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "在当前的网站上启用隐私獾", + "description": "" + }, + "options_domain_type_filter": { + "message": "按类型过滤:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "成功更新追踪器列表与设置!", + "description": "" + }, + "export_user_data": { + "message": "导出用户数据", + "description": "" + }, + "manage_data_intro": { + "message": "导入用户数据将会:
  • 覆盖通用设置
  • 与已禁用站点列表合并
  • 与隐私獾探测到的追踪器信息合并
  • 覆盖自定义滑块设置
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "重置", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "重置追踪域名列表", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "重置追踪域名将会:\n\n• 删除所有隐私獾从您浏览中学习到的数据\n• 将追踪域名列表重置为最新的预训练列表(访问 www.eff.org/badger-pretraining 以了解更多)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "移除所有", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "移除所有追踪域名", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "移除所有追踪域名将会:\n\n• 删除所有隐私獾对追踪器的了解\n• 使隐私獾在有机会重新从您的浏览中学习前不屏蔽任何东西", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "你现在已经被隐私獾保护了。", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "要了解隐私獾是如何工作的,点击这里来访问快速教程。", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC 可能泄露您的本地 IP 地址。请注意,开启这个功能可能降低网络会议软件(如谷歌环聊)的性能。", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "通用设置", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "隐私", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "高级", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "了解一下", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "点击这里以完全屏蔽此域名", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "版本 $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "屏蔽此网站的 cookies $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "部分被屏蔽", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "我明白;无论如何,请显示追踪域名列表", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "感谢你安装隐私獾!", + "description": "" + }, + "import_select_file": { + "message": "请选择一个你要导入的文件。", + "description": "" + }, + "report_broken_site": { + "message": "报告隐私獾导致的显示异常的网站", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "将滑块移至中间来屏蔽 cookies", + "description": "" + }, + "intro_learns": { + "message": "Learns automatically", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Instead of keeping lists of what to block, Privacy Badger automatically discovers trackers based on their behavior.", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "发现鬼鬼祟祟的追踪器", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "Invisible tracking happens in all sorts of ways; ads are just the visible tip of the iceberg. Privacy Badger sends the Global Privacy Control signal, to opt you out of data sharing and selling, and the Do Not Track signal to tell companies not to track you. If they ignore your wishes, Privacy Badger will learn to block them—whether they are advertisers or trackers of other kinds.", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "关闭", + "description": "" + }, + "import_user_data": { + "message": "导入用户数据", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "DNT(请勿追踪) 兼容", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "帮助", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "已允许", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "保护隐私人人有责!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "你应该无需更改这里的任何东西。", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "全部", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "取消", + "description": "" + }, + "tooltip_block": { + "message": "将滑块移至左边以屏蔽一个域名", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "Send websites the \"Global Privacy Control\" and \"Do Not Track\" signals", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "禁止向谷歌发送你访问的网址。如果此项开启,在找不到要访问的网页时将不会显示有关类似网页的建议。", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "禁用超链接审计", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "用户控制", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger is disabled on the following sites. This means that Privacy Badger will not block anything when you visit the sites listed here, and it will not send the Do Not Track or Global Privacy Control signals.

If you think Privacy Badger is breaking a page, or you would like to allow a particular site to share or sell your data, you can type that page's domain in the box below and click the \"Add domain\" button.

Alternatively, when you already have the page's tab selected, you can just click on Privacy Badger's button in the browser toolbar and then click the \"Disable\" button.

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ potential $LINK_START$trackers$LINK_END$ blocked", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "No $LINK_START$trackers$LINK_END$ blocked", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "本页面上没有第三方资源。隐私万岁!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "一个电子前哨基金会的项目", + "description": "" + }, + "add_domain_button": { + "message": "添加域名", + "description": "" + }, + "tooltip_allow": { + "message": "将滑块移至右边来允许一个域名", + "description": "" + }, + "popup_disable_for_site": { + "message": "在当前的网站上禁用隐私獾", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "点击这里以允许这个域名", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "除非你主动分享,否则隐私獾永远都不会上传你的浏览记录。", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "Privacy Badger has decided to block $COUNT$ potential $TRACKER_LINK_START$tracking domains$TRACKER_LINK_END$ so far", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "隐私獾还没有检测到任何追踪域名。继续浏览吧!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "隐私獾", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "隐私獾会在三个网站发现同一个追踪器后开始屏蔽。三振出局!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "按状态过滤:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "在下面简要描述发生的错误。", + "description": "" + }, + "remove_button": { + "message": "删除所选", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "当您使用隐私獾,您就和电子前哨基金会和成千上万的其它用户一道共同保卫隐私。我们是为您在线权利奋斗的非营利性组织。感谢您加入我们!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "在搜索关键词前加入“-”来排除域名。例如,“.co -.com”将会显示 .co 和 .co.uk,但不显示.com域名。", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "如果您认为隐私獾使得网站显示异常(例如无法播放视频),您可以点击“禁用”按钮来在此网站关闭隐私獾。", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "隐私政策", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "描述", + "description": "" + }, + "not_yet_blocked_header": { + "message": "隐私獾尚未决定是否屏蔽这些域名", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "显示隐私獾尚未决定的域名:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "以下域名看起来不在追踪你", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "选项", + "description": "" + }, + "share_button_title_facebook": { + "message": "分享到 Facebook", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "隐私獾会自动学习去阻止不可见的追踪器。", + "description": "" + }, + "report_fail": { + "message": "哎呀。出错了。", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "隐私獾已经替换了这个 $BUTTON$ 按钮", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "隐私獾已经替换了这个$WIDGET$小工具", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "允许一次", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "总是在该网站允许", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "云端同步:
  • 需要火狐或 Chrome 同步
  • 上传将覆盖任何云端已有的隐私獾数据
  • 下载内容将与您将隐私獾禁用的站点结合
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "上传", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "导出已禁用的域名到云端", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "从云端导入禁用域名", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "成功导入云端数据。", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "无法下载云端数据。", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "成功上传数据到云端。", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "无法上传数据到云端。", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "无云端数据可供下载。", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "告诉您的朋友", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "分享", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger blocked $COUNT$ potential trackers on $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "隐私獾(www.eff.org/privacybadger)是一款浏览器扩展,它能够自动学习去屏蔽不可见的追踪器。隐私獾由一家为您在线权利而战的非营利组织——电子前哨基金会创造。", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "复制到剪贴板", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "已复制", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "对这个页面无事可做", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "隐私獾不在特殊页面工作——比如这一个。试着浏览一下别的网页。", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "隐私獾在此站点被禁用", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "小部件替换", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "当屏蔽社交媒体按钮和其他可能有用的小部件(如音视频和评论区)时,隐私獾可以将他们替换成“点击以启用”的占位部件。", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json new file mode 100644 index 0000000..717851d --- /dev/null +++ b/src/_locales/zh_TW/messages.json @@ -0,0 +1,677 @@ +{ + "badger_status_block": { + "message": "封鎖 $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a red slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "invalid_json": { + "message": "無效的 JSON 檔案。", + "description": "" + }, + "options_remove_origin_confirm": { + "message": "您確定要從 Privacy Badger 移除此網域?", + "description": "Confirmation shown when you click to remove a domain from Privacy Badger's tracking domains list on the options page." + }, + "badger_status_noaction": { + "message": "沒有追蹤 $DOMAIN$", + "description": "Tooltip shown when you hover over a non-tracking domain name with a green slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "non_tracker_tip": { + "message": "目前 Privacy Badger 只檢查透過第三方 cookie、HTML5 Local Storage、Canvas 指紋來追蹤您瀏覽網頁的情況。有些網域可能使用了 Privacy Badger 無法偵測的追蹤方式。", + "description": "" + }, + "options_dnt_policy_setting": { + "message": "檢查第三方網域是否遵守EFF 的 Do Not Track 政策", + "description": "Checkbox label on the general settings page" + }, + "invalid_domain": { + "message": "請新增有效的網域或 URL。", + "description": "" + }, + "donate_to_eff": { + "message": "捐款給 EFF 電子前鋒基金會", + "description": "Button shown in the popup and on the intro page." + }, + "intro_donate_subheading": { + "message": "透過捐款與分享對我們的工具的支援來協助我們", + "description": "Shown below the Donate button on the intro page." + }, + "intro_not_an_adblocker": { + "message": "不是廣告阻擋器,我不一樣", + "description": "Intro page paragraph heading." + }, + "report_success": { + "message": "謝謝!我們將會調查這個問題。", + "description": "" + }, + "dnt_tooltip": { + "message": "此網域承諾不會追蹤您", + "description": "Tooltip shown when you hover over a DNT-compliant domain name in the list of domains in the popup or under the Tracking Domains tab on the options page." + }, + "breakage_warning_tooltip": { + "message": "已知封鎖此網域會破壞網站", + "description": "Tooltip for a warning icon that appears when move a domain slider to 'red' (block) for a domain that was automatically set to 'yellow' (block cookies)." + }, + "feed_the_badger_title": { + "message": "點擊以將此網域的控制權還給 Privacy Badger", + "description": "Tooltip shown when you hover over an undo arrow that appears when you move a domain slider away from its automatic setting." + }, + "next_section": { + "message": "下一區", + "description": "Image alt. text on a couple of \"scroll down\" arrow buttons on the intro page." + }, + "extension_error_text": { + "message": "請告訴我們關於下列錯誤的訊息:", + "description": "Shown in the popup when there is a problem with the user's Privacy Badger extension that we want to encourage the user to tell us about." + }, + "data_settings": { + "message": "管理資料", + "description": "This is an options page tab heading." + }, + "report_title": { + "message": "回報錯誤", + "description": "" + }, + "whitelist_form_domain_input_placeholder": { + "message": "範例:www.domain.com, *.domain.net, domain.org", + "description": "Placeholder text for the Add domain input under the Disabled Sites tab on the options page." + }, + "domain_slider_cookieblock_tooltip": { + "message": "在此點按以從設定 cookies 阻擋此網域", + "description": "Tooltip shown when you hover over the center part of a slider shown for each domain in the domain list." + }, + "options_domain_filter_block": { + "message": "已阻擋", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "options_webrtc_setting": { + "message": "防止 WebRTC 洩漏本機 IP 地址", + "description": "Checkbox label on the general settings page" + }, + "intro_welcome": { + "message": "Privacy Badger 會自動學習並阻擋不可見的追蹤器。花一分鐘來看看它怎麼運作的。", + "description": "Intro page welcome paragraph." + }, + "error_input": { + "message": "有什麼問題?", + "description": "" + }, + "options_domain_list_tab": { + "message": "追蹤網域", + "description": "This is an options page tab heading." + }, + "share_button_title_twitter": { + "message": "在 Twitter 上分享", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "first_run_text": { + "message": "瞭解 Privacy Badger 如何保護您的隱私", + "description": "Part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "download": { + "message": "下載", + "description": "" + }, + "import": { + "message": "匯入", + "description": "" + }, + "options_hide_social_widgets": { + "message": "不要取代下列的小工具:", + "description": "Multiple selection box on the widget replacement tab" + }, + "options_social_widgets_checkbox": { + "message": "啟用小工具取代", + "description": "Checkbox label on the widget replacement tab" + }, + "options_show_nontracking_domains_checkbox": { + "message": "顯示似乎未在追蹤您的網域", + "description": "Checkbox label on the general settings page. Should match wording used in the 'non_tracker' message." + }, + "report_button": { + "message": "送出錯誤", + "description": "" + }, + "badger_status_allow": { + "message": "允許 $DOMAIN$", + "description": "Tooltip shown when you hover over a tracking but still allowed (green slider) domain name in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "privacy_badger_what_is": { + "message": "Privacy Badger 是什麼?", + "description": "" + }, + "options_domain_search": { + "message": "搜尋網域:", + "description": "Label for a text input box on the Tracking Domains options page tab." + }, + "options_learn_setting": { + "message": "了解如何透過您的瀏覽封鎖新的追蹤器", + "description": "Checkbox label on the general settings page" + }, + "local_learning_warning": { + "message": "啟用學習可能會讓您更容易被網站識別", + "description": "Tooltip on the general settings page" + }, + "options_incognito_setting": { + "message": "在隱私/無痕視窗中學習", + "description": "Checkbox label on the general settings page" + }, + "options_incognito_warning": { + "message": "在隱私/無痕視窗中啟用學習可能會導致隱私瀏覽紀錄留在您的電腦上。預設情況下,Privacy Badger 會在隱私/無痕視窗中阻擋任何已知的追蹤器,但是不會學習任何新的追蹤器。您可能會想要在您的瀏覽大部份都在隱私/無痕視窗中度過時啟用此選項。", + "description": "Tooltip on the general settings page" + }, + "learning_prompt_text1": { + "message": "預設情況下,Privacy Badger 將不會再從您的瀏覽中學習。", + "description": "First part of a prompt to visit the blog." + }, + "learning_prompt_text2": { + "message": "點擊下方以取得更多資訊。", + "description": "Second part of a prompt to visit the blog." + }, + "learning_prompt_button": { + "message": "了解 Privacy Badger 如何變更", + "description": "Button text, part of a prompt to visit the blog." + }, + "show_counter_checkbox": { + "message": "顯示追蹤器數量", + "description": "Checkbox label on the general settings page" + }, + "what_is_a_tracker": { + "message": "什麼是追蹤器?", + "description": "Tooltip that comes up when you hover over the 'tracking domains' link under the Tracking Domains tab on the options page." + }, + "intro_report_button": { + "message": "請不要忘記點按「回報 Privacy Badger 導致顯示異常的網站」。我們尊重您的隱私,所以我們不會自動傳送回報。", + "description": "Intro page paragraph. The quoted message ('Did Privacy Badger break this site') should match the first part of the translation for the 'report_broken_site' message." + }, + "options_title": { + "message": "Privacy Badger 設定", + "description": "" + }, + "report_terms": { + "message": "將會自動回報下列資訊給 EFF 電子前鋒基金會:您目前造訪的頁面、瀏覽器版本、Privacy Badger 版本,以及此頁面所有滾動條的狀態。", + "description": "" + }, + "whitelisted_domains": { + "message": "停用的網站", + "description": "This is an options page tab heading." + }, + "popup_enable_for_site": { + "message": "在目前網站開啟 Privacy Badger", + "description": "" + }, + "options_domain_type_filter": { + "message": "以類型過濾:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "import_successful": { + "message": "追蹤器清單和設定更新成功!", + "description": "" + }, + "export_user_data": { + "message": "匯出使用者資料", + "description": "" + }, + "manage_data_intro": { + "message": "正在匯入使用者資料:
  • 覆寫一般設定
  • 結合停用的網站清單
  • 結合 Privacy Badger 已經看過哪些追蹤器的資訊
  • 覆寫滑桿自訂
", + "description": "A brief explanation of what happens when you import Badger user data. Shown above the import/export user data buttons under the Manage Data options page tab." + }, + "reset": { + "message": "重設", + "description": "Options page button, under the Manage Data tab" + }, + "reset_data": { + "message": "重設追蹤網域", + "description": "Caption above reset button" + }, + "reset_data_confirm": { + "message": "重設追蹤網域將會:\n\n • 刪除所有 Privacy Badger 已從您的瀏覽中學習到的追蹤器\n • 將追蹤網域復原為最新的預訓練清單(請見 www.eff.org/badger-pretraining 以取得更多資訊)", + "description": "Pop-up triggered when the reset_data button is clicked" + }, + "remove_all": { + "message": "移除全部", + "description": "Options page button, under the Manage Data tab" + }, + "remove_all_data": { + "message": "移除所有追蹤網域", + "description": "Caption above remove_all button" + }, + "remove_all_data_confirm": { + "message": "移除所有追蹤網域將會:\n\n • 刪除 Privacy Badger 知道的所有關於追蹤器的東西\n • 造成 Privacy Badger 在有機會重新自您的瀏覽中學習前無法阻擋任何東西", + "description": "Pop-up triggered when the remove_all_data button is clicked" + }, + "intro_text1": { + "message": "Privacy Badger 正在保護您。", + "description": "First part of a reminder to visit the intro page. Shown in popup until the user clicks on the reminder link or browses through the intro page." + }, + "intro_text2": { + "message": "若要了解 Privacy Badger 的運作原理,請點擊下方進行快速教學。", + "description": "Second part of a reminder to visit the intro page" + }, + "options_webrtc_warning": { + "message": "WebRTC 可能會洩漏您的 IP 地址。注意:開啟此選項可能會造成 Google Hangouts 等網路會議應用程式的效能變差。", + "description": "Tooltip on the general settings page" + }, + "options_general_settings": { + "message": "一般設定", + "description": "This is an options page tab heading." + }, + "options_privacy_settings": { + "message": "隱私", + "description": "Subheading on the general settings options page." + }, + "options_advanced_settings": { + "message": "進階", + "description": "Subheading on the general settings options page." + }, + "intro_next_button": { + "message": "看看教學", + "description": "Intro page welcome button." + }, + "domain_slider_block_tooltip": { + "message": "點按此處以完全阻擋此網域", + "description": "Tooltip shown when you hover over the leftmost part of a slider shown for each domain in the domain list." + }, + "version": { + "message": "版本 $VERSION_STRING$", + "description": "Shows Privacy Badger's version in the popup. For example, \"version 2018.8.1\".", + "placeholders": { + "version_string": { + "content": "$1", + "example": "2018.8.1" + } + } + }, + "badger_status_cookieblock": { + "message": "封鎖此網站的 cookie $DOMAIN$", + "description": "Tooltip shown when you hover over a domain name with a yellow slider in the list of domains in the popup or under the Tracking Domains tab on the options page.", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "options_domain_filter_cookieblock": { + "message": "部份阻擋", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "show_tracking_domains_acknowledgement": { + "message": "我了解;無論如何都顯示追蹤網域清單給我", + "description": "Acknowledgement shown next to the checkbox required to reveal the tracking domains list on the options page." + }, + "firstRun_title": { + "message": "感謝您安裝 Privacy Badger!", + "description": "" + }, + "import_select_file": { + "message": "請選擇要匯入的檔案", + "description": "" + }, + "report_broken_site": { + "message": "回報 Privacy Badger 導致顯示異常的網站", + "description": "Button in the popup." + }, + "tooltip_cookieblock": { + "message": "將滾動條滑到中間封鎖該網域的 cookie", + "description": "" + }, + "intro_learns": { + "message": "自動學習", + "description": "Intro page paragraph heading" + }, + "intro_learns_paragraph": { + "message": "Privacy Badger 不會保留要封鎖的東西的清單,而是以追蹤器的行為當作基礎,自動探索要封鎖的追蹤器。", + "description": "Intro page paragraph" + }, + "intro_beyond_ads": { + "message": "捕捉鬼鬼祟祟的追蹤器", + "description": "Intro page paragraph heading." + }, + "intro_beyond_ads_paragraph": { + "message": "不可見的追蹤會以各種方式發生;廣告只是可見的冰山一角。Privacy Badger 傳送全域隱私控制訊號,來讓您退出資料分享與販售,以及 「Do Not Track」訊號來告訴公司不要追蹤您。如果他們忽略了您的請求,Privacy Badger 將會學習封鎖它們,不論它們是廣告還是其他類型的追蹤器都一樣。", + "description": "Intro page paragraph." + }, + "report_close": { + "message": "關閉", + "description": "" + }, + "import_user_data": { + "message": "匯入使用者資料", + "description": "" + }, + "options_domain_filter_dnt": { + "message": "相容於 DNT", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "popup_help_button": { + "message": "說明", + "description": "Tooltip that comes up when you hover over the question mark button in the upper right corner of the popup." + }, + "options_domain_filter_allow": { + "message": "允許", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "intro_donate_heading": { + "message": "隱私是一場團隊比賽!", + "description": "Part of the 'donate' section on the intro page." + }, + "show_tracking_domains_message": { + "message": "您應該不需要修改這裡的任何東西。", + "description": "Shown above the acknowledgement checkbox required to reveal the tracking domains list on the options page. This is the second paragraph; the first paragraph is the message under the \"intro_not_an_adblocker_paragraph\" key." + }, + "options_domain_filter_all": { + "message": "全部", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "report_cancel": { + "message": "取消", + "description": "" + }, + "tooltip_block": { + "message": "將滾動條滑到左邊封鎖該網域", + "description": "" + }, + "options_enable_dnt_checkbox": { + "message": "傳送「全域隱私控制」訊號與「Do Not Track」訊號給網頁", + "description": "Checkbox label for enabling/disabling the Sec-GPC and DNT signals, found on the general settings page" + }, + "options_disable_google_nav_error_service": { + "message": "停用將您造訪的網址傳送給 Google 的功能。這會在找不到網頁時停用相似頁面的建議。", + "description": "Checkbox label found on the general settings page" + }, + "options_disable_hyperlink_auditing": { + "message": "停用超連結審核", + "description": "Checkbox label found on the general settings page" + }, + "options_domain_filter_user": { + "message": "使用者控制", + "description": "Dropdown control setting on the Tracking Domains options page tab." + }, + "disabled_for_these_domains": { + "message": "

Privacy Badger 已在下列的網站中停用。這代表了 Privacy Badger 將不會在您造訪在這裡列出來的網站時阻擋任何東西,其也將不會傳送「Do Not Track」或全域隱私控制訊號。

若您覺得 Privacy Badger 把頁面弄壞了,或您希望與特定的網站分享或販售您的資料,那麼您可以透過在下方的輸入框中輸入網域並點按「新增網域」按鈕來新增網域。

或者是當您已經選取了網頁的分頁,您也可以點選在瀏覽器工具列中的 Privacy Badger 按鈕並點選「停用」按鈕。

", + "description": "" + }, + "popup_instructions": { + "message": "$COUNT$ 個潛在的 $LINK_START$追蹤器$LINK_END$ 已封鎖", + "description": "Popup message shown when at least one tracker was blocked.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "link_start": { + "content": "$2", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_instructions_no_trackers": { + "message": "無 $LINK_START$追蹤器$LINK_END$ 被封鎖", + "description": "Text shown in the popup when there are no trackers on the page.", + "placeholders": { + "link_start": { + "content": "$1", + "example": "" + }, + "link_end": { + "content": "" + } + } + }, + "popup_blocked": { + "message": "此頁面中沒有第三方資源。為隱私歡呼!", + "description": "Text shown in the popup when showing non-tracking domains is enabled, and there are no third-party domains on the page." + }, + "intro_by_eff": { + "message": "EFF 電子前鋒基金會的專案", + "description": "" + }, + "add_domain_button": { + "message": "新增網域", + "description": "" + }, + "tooltip_allow": { + "message": "將滾動條滑到右邊允許該網域", + "description": "" + }, + "popup_disable_for_site": { + "message": "在目前網站停用 Privacy Badger", + "description": "Button in the popup." + }, + "domain_slider_allow_tooltip": { + "message": "點按此處以允許此網域", + "description": "Tooltip shown when you hover over the rightmost part of a slider shown for each domain in the domain list." + }, + "intro_privacy_note": { + "message": "Privacy Badger 在您選擇分享關於您的瀏覽資料前,將永遠不會分享它們。", + "description": "Intro page paragraph." + }, + "options_domain_list_trackers": { + "message": "到目前為止,Privacy Badger 已決定封鎖 $COUNT$ 個潛在的 $TRACKER_LINK_START$追蹤網域$TRACKER_LINK_END$", + "description": "Shown on the Tracking Domains tab on the options page after Privacy Badger learned to block one or more domains", + "placeholders": { + "count": { + "content": "$1", + "example": "900" + }, + "tracker_link_start": { + "content": "$2", + "example": "" + }, + "tracker_link_end": { + "content": "" + } + } + }, + "options_domain_list_no_trackers": { + "message": "Privacy Badger 未偵測到任何追蹤網域。繼續瀏覽!", + "description": "Shown on the Tracking Domains tab on the options page if all tracking domains have been removed." + }, + "name": { + "message": "Privacy Badger", + "description": "" + }, + "intro_not_an_adblocker_paragraph": { + "message": "Privacy Badger 將會在三個不同的網頁上發現同一個追蹤器時開始阻擋該追蹤器。三振出局!", + "description": "Intro page paragraph." + }, + "options_domain_status_filter": { + "message": "以狀態過濾:", + "description": "Label for a dropdown control on the Tracking Domains options page tab." + }, + "report_text": { + "message": "在下面簡要描述發生的錯誤。", + "description": "" + }, + "remove_button": { + "message": "刪除所選", + "description": "This is the label for the 'Remove selected' buttons." + }, + "intro_donate1": { + "message": "當您使用 Privacy Badger,您就會加入電子前鋒基金會 (EFF)與其他數百萬個使用者一同為隱私而戰。我們是一個為您的線上權利而戰的非營利組織。感謝您加入我們!", + "description": "Part of the 'donate' section on the intro page." + }, + "options_domain_search_tooltip": { + "message": "要排除網域,請在您的搜尋字詞前加入\"-\"。舉例來說,\".co -.com\"將會顯示 .co 與 .co.uk 但不會有 .com 網域。", + "description": "Tooltip for an \"information\" icon next to the domain search input on the Tracking Domains options page tab." + }, + "intro_disable_button": { + "message": "若您覺得 Privacy Badger 破壞了某個頁面(舉例來說,影片無法播放之類的),您可以點按「停用」按鈕來將 Privacy Badger 在該網站上關閉。", + "description": "Intro page paragraph. The quoted string ('Disable') should match the verb used for the 'popup_disable_for_site' message." + }, + "intro_link_policy": { + "message": "隱私權政策", + "description": "Shown at the bottom of the intro page, links to the EFF software and technology projects privacy policy." + }, + "report_input_label": { + "message": "描述", + "description": "" + }, + "not_yet_blocked_header": { + "message": "您的 Badger 尚未決定這些網域是否應該要封鎖", + "description": "Popup domain list header text; separates blocked from haven't-yet-seen-enough-to-block potential trackers." + }, + "options_show_not_yet_blocked": { + "message": "顯示您的 Badger 尚未決定是否要封鎖的網域:", + "description": "Label for a checkbox on the Tracking Domains options page tab. Should match wording used in the 'not_yet_blocked_header' message." + }, + "non_tracker": { + "message": "以下網域看起來都沒有在追蹤您", + "description": "Header text; separates tracking from non-tracking domains in the popup." + }, + "popup_options_button": { + "message": "選項", + "description": "" + }, + "share_button_title_facebook": { + "message": "在 Facebook 上分享", + "description": "Text that comes up when you hover over the social sharing buttons on the intro page." + }, + "description": { + "message": "Privacy Badger 會自動學習並阻擋不可見的追蹤器。", + "description": "" + }, + "report_fail": { + "message": "哎呀。出錯了。", + "description": "" + }, + "social_tooltip_pb_has_replaced": { + "message": "Privacy Badger 已經取代了 $BUTTON$ 按鈕", + "description": "Tooltip shown over a replaced social button. For example, \"Privacy Badger has replaced this Facebook Like button\". See also the widget_placeholder_pb_has_replaced message.", + "placeholders": { + "button": { + "content": "$1", + "example": "Facebook Like" + } + } + }, + "widget_placeholder_pb_has_replaced": { + "message": "Privacy Badger 已經取代了 $WIDGET$ 小工具", + "description": "Text shown inside a replaced widget's placeholder. For example, \"Privacy Badger has replaced this Google reCAPTCHA widget\". See also the social_tooltip_pb_has_replaced message.", + "placeholders": { + "widget": { + "content": "$1", + "example": "Google reCAPTCHA" + } + } + }, + "allow_once": { + "message": "允許一次", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking it will allow the third-party widget to load this one time only." + }, + "allow_on_site": { + "message": "此網站上一律允許", + "description": "Button in the placeholder shown in place of certain third-party (video, audio, commenting) widgets. Clicking this button will always allow the widget to load on this particular site." + }, + "sync_intro": { + "message": "雲端同步:
  • 需要 Firefox/Chrome 同步
  • 上傳會覆寫任何在雲端中既有的 Privacy Badger 資料
  • 下載會結合您的 Privacy Badger 停用的網站清單
", + "description": "A brief explanation of how syncing works. Shown above the upload/download cloud data buttons under the Manage Data options page tab." + }, + "upload": { + "message": "上傳", + "description": "Button label for uploading data to the cloud on Manage Data options page tab." + }, + "upload_cloud": { + "message": "匯出停用的網站到雲端", + "description": "Button title for uploading data to the cloud on Manage Data options page tab." + }, + "download_cloud": { + "message": "從雲端匯入停用的網站", + "description": "Button title for downloading data from the cloud on Manage Data options page tab." + }, + "download_cloud_success": { + "message": "雲端資料匯入成功。", + "description": "Message displayed to the user after successfully merging cloud data." + }, + "download_cloud_failure": { + "message": "雲端資料無法下載。", + "description": "Message displayed to the user after failing to download cloud data." + }, + "upload_cloud_success": { + "message": "雲端資料上傳成功。", + "description": "Message displayed to the user after successfully uploading local data." + }, + "upload_cloud_failure": { + "message": "雲端資料無法上傳。", + "description": "Message displayed to the user after failing to upload local data." + }, + "download_cloud_no_data": { + "message": "沒有雲端資料可供下載。", + "description": "'Error' message when there is on cloud data to download." + }, + "share_title": { + "message": "告訴你的朋友", + "description": "Title of the share overlay." + }, + "popup_share_button": { + "message": "分享", + "description": "Tooltip that comes up when you hover over the share button in the upper right corner of the popup." + }, + "share_tracker_header": { + "message": "Privacy Badger 封鎖了 $COUNT$ 潛在的追蹤器於 $DOMAIN$:", + "description": "Header above the list of tracking domains in the share message.", + "placeholders": { + "count": { + "content": "$1", + "example": "15" + }, + "domain": { + "content": "$2", + "example": "example.com" + } + } + }, + "share_base_message": { + "message": "Privacy Badger (www.eff.org/privacybadger) 是一個會自動學習阻擋不可見追蹤器的瀏覽器附加元件。Privacy Badger 由電子前鋒基金會製作,它是一個為您的線上權利戰鬥的非營利組織。", + "description": "The base message that is always included in the share message." + }, + "copy_button_initial": { + "message": "複製到剪貼簿", + "description": "Initial text of the copy button on the share overlay." + }, + "copy_button_copied": { + "message": "已複製", + "description": "On-click text of the copy button on the share overlay." + }, + "popup_special_page_header": { + "message": "在此頁面上沒有事情可做", + "description": "Heading for popup_special_page_paragraph" + }, + "popup_special_page_paragraph": { + "message": "Privacy Badger 在像這類的特殊頁面上無法運作。試著瀏覽其他的頁面看看。", + "description": "Shown in the popup for special browser pages such as the New Tab page and 'about:' pages." + }, + "popup_disabled_site_header": { + "message": "Privacy Badger 已對此網站停用", + "description": "Shown in the popup on disabled sites." + }, + "options_widget_replacement_tab": { + "message": "小工具取代", + "description": "Options page tab heading" + }, + "options_widget_replacement_desc": { + "message": "當阻擋社群媒體按鈕與其他可能有用(影片、音訊、留言)的小工具時,Privacy Badger 可以使用點擊啟用的按鈕來取代它們。", + "description": "Introduction to the Widget Replacement tab on the options page." + } +} \ No newline at end of file diff --git a/src/data/dnt-policies.json b/src/data/dnt-policies.json new file mode 100644 index 0000000..6e7ed13 --- /dev/null +++ b/src/data/dnt-policies.json @@ -0,0 +1,9 @@ +{ + "Preliminary DNT Policy": "41ae62ddfee360fe1e0e7dbae0f35b2dc06212eb", + "Discussion Draft DNT Policy v0.1": "96297930e450cb795004ae5b1fcc88290a2fe982", + "Discussion Draft v0.2 in progress feb 2015": "76d89351d48f10c633fd1b5273587913f0851367", + "DNT Policy v1.0": "a18e8dba6848d3fc241b03b88291cb75a3cfec3b", + "DNT Policy v1.0 no-trailing-space": "5b8972a0e8df8236bb28061ddc462767d4366218", + "DNT Policy v1.0 dos-line-endings": "c09f71363bb29d0250a1f5524eef36f9ab07669b", + "DNT Policy v1.0 no-eof-newline": "7861462d500fbb6ccb74c614782f4937377bec76" +} diff --git a/src/data/dnt-policy.txt b/src/data/dnt-policy.txt new file mode 100644 index 0000000..ad946d1 --- /dev/null +++ b/src/data/dnt-policy.txt @@ -0,0 +1,218 @@ +Do Not Track Compliance Policy + +Version 1.0 + +This domain complies with user opt-outs from tracking via the "Do Not Track" +or "DNT" header [http://www.w3.org/TR/tracking-dnt/]. This file will always +be posted via HTTPS at https://example-domain.com/.well-known/dnt-policy.txt +to indicate this fact. + +SCOPE + +This policy document allows an operator of a Fully Qualified Domain Name +("domain") to declare that it respects Do Not Track as a meaningful privacy +opt-out of tracking, so that privacy-protecting software can better determine +whether to block or anonymize communications with this domain. This policy is +intended first and foremost to be posted on domains that publish ads, widgets, +images, scripts and other third-party embedded hypertext (for instance on +widgets.example.com), but it can be posted on any domain, including those users +visit directly (such as www.example.com). The policy may be applied to some +domains used by a company, site, or service, and not to others. Do Not Track +may be sent by any client that uses the HTTP protocol, including websites, +mobile apps, and smart devices like TVs. Do Not Track also works with all +protocols able to read HTTP headers, including SPDY. + +NOTE: This policy contains both Requirements and Exceptions. Where possible +terms are defined in the text, but a few additional definitions are included +at the end. + +REQUIREMENTS + +When this domain receives Web requests from a user who enables DNT by actively +choosing an opt-out setting in their browser or by installing software that is +primarily designed to protect privacy ("DNT User"), we will take the following +measures with respect to those users' data, subject to the Exceptions, also +listed below: + +1. END USER IDENTIFIERS: + + a. If a DNT User has logged in to our service, all user identifiers, such as + unique or nearly unique cookies, "supercookies" and fingerprints are + discarded as soon as the HTTP(S) response is issued. + + Data structures which associate user identifiers with accounts may be + employed to recognize logged in users per Exception 4 below, but may not + be associated with records of the user's activities unless otherwise + excepted. + + b. If a DNT User is not logged in to our service, we will take steps to ensure + that no user identifiers are transmitted to us at all. + +2. LOG RETENTION: + + a. Logs with DNT Users' identifiers removed (but including IP addresses and + User Agent strings) may be retained for a period of 10 days or less, + unless an Exception (below) applies. This period of time balances privacy + concerns with the need to ensure that log processing systems have time to + operate; that operations engineers have time to monitor and fix technical + and performance problems; and that security and data aggregation systems + have time to operate. + + b. These logs will not be used for any other purposes. + +3. OTHER DOMAINS: + + a. If this domain transfers identifiable user data about DNT Users to + contractors, affiliates or other parties, or embeds from or posts data to + other domains, we will either: + + b. ensure that the operators of those domains abide by this policy overall + by posting it at /.well-known/dnt-policy.txt via HTTPS on the domains in + question, + + OR + + ensure that the recipient's policies and practices require the recipient + to respect the policy for our DNT Users' data. + + OR + + obtain a contractual commitment from the recipient to respect this policy + for our DNT Users' data. + + NOTE: if an “Other Domain” does not receive identifiable user information + from the domain because such information has been removed, because the + Other Domain does not log that information, or for some other reason, these + requirements do not apply. + + c. "Identifiable" means any records which are not Anonymized or otherwise + covered by the Exceptions below. + +4. PERIODIC REASSERTION OF COMPLIANCE: + + At least once every 12 months, we will take reasonable steps commensurate + with the size of our organization and the nature of our service to confirm + our ongoing compliance with this document, and we will publicly reassert our + compliance. + +5. USER NOTIFICATION: + + a. If we are required by law to retain or disclose user identifiers, we will + attempt to provide the users with notice (unless we are prohibited or it + would be futile) that a request for their information has been made in + order to give the users an opportunity to object to the retention or + disclosure. + + b. We will attempt to provide this notice by email, if the users have given + us an email address, and by postal mail if the users have provided a + postal address. + + c. If the users do not challenge the disclosure request, we may be legally + required to turn over their information. + + d. We may delay notice if we, in good faith, believe that an emergency + involving danger of death or serious physical injury to any person + requires disclosure without delay of information relating to the + emergency. + +EXCEPTIONS + +Data from DNT Users collected by this domain may be logged or retained only in +the following specific situations: + +1. CONSENT / "OPT BACK IN" + + a. DNT Users are opting out from tracking across the Web. It is possible + that for some feature or functionality, we will need to ask a DNT User to + "opt back in" to be tracked by us across the entire Web. + + b. If we do that, we will take reasonable steps to verify that the users who + select this option have genuinely intended to opt back in to tracking. + One way to do this is by performing scientifically reasonable user + studies with a representative sample of our users, but smaller + organizations can satisfy this requirement by other means. + + c. Where we believe that we have opt back in consent, our server will + send a tracking value status header "Tk: C" as described in section 6.2 + of the W3C Tracking Preference Expression draft: + + http://www.w3.org/TR/tracking-dnt/#tracking-status-value + +2. TRANSACTIONS + + If a DNT User actively and knowingly enters a transaction with our + services (for instance, clicking on a clearly-labeled advertisement, + posting content to a widget, or purchasing an item), we will retain + necessary data for as long as required to perform the transaction. This + may for example include keeping auditing information for clicks on + advertising links; keeping a copy of posted content and the name of the + posting user; keeping server-side session IDs to recognize logged in + users; or keeping a copy of the physical address to which a purchased + item will be shipped. By their nature, some transactions will require data + to be retained indefinitely. + +3. TECHNICAL AND SECURITY LOGGING: + + a. If, during the processing of the initial request (for unique identifiers) + or during the subsequent 10 days (for IP addresses and User Agent strings), + we obtain specific information that causes our employees or systems to + believe that a request is, or is likely to be, part of a security attack, + spam submission, or fraudulent transaction, then logs of those requests + are not subject to this policy. + + b. If we encounter technical problems with our site, then, in rare + circumstances, we may retain logs for longer than 10 days, if that is + necessary to diagnose and fix those problems, but this practice will not be + routinized and we will strive to delete such logs as soon as possible. + +4. AGGREGATION: + + a. We may retain and share anonymized datasets, such as aggregate records of + readership patterns; statistical models of user behavior; graphs of system + variables; data structures to count active users on monthly or yearly + bases; database tables mapping authentication cookies to logged in + accounts; non-unique data structures constructed within browsers for tasks + such as ad frequency capping or conversion tracking; or logs with truncated + and/or encrypted IP addresses and simplified User Agent strings. + + b. "Anonymized" means we have conducted risk mitigation to ensure + that the dataset, plus any additional information that is in our + possession or likely to be available to us, does not allow the + reconstruction of reading habits, online or offline activity of groups of + fewer than 5000 individuals or devices. + + c. If we generate anonymized datasets under this exception we will publicly + document our anonymization methods in sufficient detail to allow outside + experts to evaluate the effectiveness of those methods. + +5. ERRORS: + +From time to time, there may be errors by which user data is temporarily +logged or retained in violation of this policy. If such errors are +inadvertent, rare, and made in good faith, they do not constitute a breach +of this policy. We will delete such data as soon as practicable after we +become aware of any error and take steps to ensure that it is deleted by any +third-party who may have had access to the data. + +ADDITIONAL DEFINITIONS + +"Fully Qualified Domain Name" means a domain name that addresses a computer +connected to the Internet. For instance, example1.com; www.example1.com; +ads.example1.com; and widgets.example2.com are all distinct FQDNs. + +"Supercookie" means any technology other than an HTTP Cookie which can be used +by a server to associate identifiers with the clients that visit it. Examples +of supercookies include Flash LSO cookies, DOM storage, HTML5 storage, or +tricks to store information in caches or etags. + +"Risk mitigation" means an engineering process that evaluates the possibility +and likelihood of various adverse outcomes, considers the available methods of +making those adverse outcomes less likely, and deploys sufficient mitigations +to bring the probability and harm from adverse outcomes below an acceptable +threshold. + +"Reading habits" includes amongst other things lists of visited DNS names, if +those domains pertain to specific topics or activities, but records of visited +DNS names are not reading habits if those domain names serve content of a very +diverse and general nature, thereby revealing minimal information about the +opinions, interests or activities of the user. diff --git a/src/data/schema.json b/src/data/schema.json new file mode 100644 index 0000000..b265b61 --- /dev/null +++ b/src/data/schema.json @@ -0,0 +1,48 @@ +{ + "type": "object", + "properties": { + "checkForDNTPolicy": { + "title": "Check if third-parties comply with EFF's DNT policy", + "description": "If set to false then do not query third-party domains for declared compliance with EFF's Do Not Track policy.", + "type": "boolean" + }, + "disabledSites": { + "title": "Disabled sites", + "description": "List of site domains where Privacy Badger is disabled.", + "type": "array", + "items": { + "type": "string" + } + }, + "learnLocally": { + "title": "Learn to block new trackers from your browsing", + "description": "Enabling learning may make you more identifiable to websites. Please see https://www.eff.org/badger-evolution for more information.", + "type": "boolean" + }, + "learnInIncognito": { + "title": "Learn in Private/Incognito windows", + "description": "Enabling learning in Private/Incognito windows may leave traces of your private browsing history on your computer. By default, Privacy Badger will block trackers it already knows about in Private/Incognito windows, but it won't learn about new trackers. You might want to enable this option if a lot of your browsing happens in Private/Incognito windows.", + "type": "boolean" + }, + "sendDNTSignal": { + "title": "Send websites the Do Not Track signal", + "description": "Toggles sending the DNT header and setting navigator.doNotTrack on websites.", + "type": "boolean" + }, + "showCounter": { + "title": "Show count of blocked items", + "description": "Toggles showing the counter over Privacy Badger's button in the browser toolbar.", + "type": "boolean" + }, + "showIntroPage": { + "title": "Show intro page", + "description": "If set to false then do not open the new user intro page upon install.", + "type": "boolean" + }, + "socialWidgetReplacementEnabled": { + "title": "Replace social widgets", + "description": "Toggles social widget replacement.", + "type": "boolean" + } + } +} diff --git a/src/data/seed.json b/src/data/seed.json new file mode 100644 index 0000000..42fc36f --- /dev/null +++ b/src/data/seed.json @@ -0,0 +1,19505 @@ +{ + "action_map": { + "008-jlc-434.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602149702509 + }, + "017-dvc-111.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602160757426 + }, + "01net.com": { + "heuristicAction": "allow" + }, + "067-umd-991.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602330684483 + }, + "0914.global.ssl.fastly.net": { + "heuristicAction": "allow" + }, + "100008946.collect.igodigital.com": { + "heuristicAction": "", + "nextUpdateTime": 1601989505746 + }, + "1001.netrk.net": { + "heuristicAction": "allow" + }, + "10014956.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602015754030 + }, + "10088969.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601907792167 + }, + "100widgets.com": { + "heuristicAction": "allow" + }, + "10176687.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602024707132 + }, + "10190460.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602052259567 + }, + "10192984.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602166739691 + }, + "10214854.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602197720890 + }, + "10233691.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602052712508 + }, + "10259902.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602059721131 + }, + "10270662.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602346686015 + }, + "107-fms-070.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602124849160 + }, + "10870841.collect.igodigital.com": { + "heuristicAction": "", + "nextUpdateTime": 1602076836260 + }, + "10hui.es": { + "heuristicAction": "allow" + }, + "110.93.143.144": { + "heuristicAction": "allow" + }, + "11183.com.cn": { + "heuristicAction": "allow" + }, + "11186.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602250469591 + }, + "112.2o7.net": { + "heuristicAction": "cookieblock" + }, + "120askimages.com": { + "heuristicAction": "allow" + }, + "122.2o7.net": { + "heuristicAction": "cookieblock" + }, + "123apps.com": { + "heuristicAction": "allow" + }, + "126.net": { + "heuristicAction": "allow" + }, + "1361549.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602355502897 + }, + "140cc.v.fwmrm.net": { + "heuristicAction": "cookieblock" + }, + "14108.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602275317686 + }, + "163.com": { + "heuristicAction": "allow" + }, + "172-qer-842.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602301651252 + }, + "17620.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602385615672 + }, + "178-uxe-734.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602250689044 + }, + "180-pay-466.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601903596238 + }, + "1dmp.io": { + "heuristicAction": "block" + }, + "20726339p.rfihub.com": { + "heuristicAction": "", + "nextUpdateTime": 1602380586214 + }, + "20790133p.rfihub.com": { + "heuristicAction": "", + "nextUpdateTime": 1602268247489 + }, + "20824283p.rfihub.com": { + "heuristicAction": "", + "nextUpdateTime": 1602013061513 + }, + "2315.oadz.com": { + "heuristicAction": "allow" + }, + "247-inc.net": { + "heuristicAction": "block" + }, + "24smi.net": { + "heuristicAction": "allow" + }, + "26434.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601975541289 + }, + "2988354.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601882902532 + }, + "2checkout.com": { + "heuristicAction": "allow" + }, + "2o7.net": { + "heuristicAction": "block" + }, + "2t23.net": { + "heuristicAction": "allow" + }, + "3071236.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602224215187 + }, + "315-ftt-121.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602374155829 + }, + "316-gsv-089.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602152384258 + }, + "320-chp-056.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602398839433 + }, + "3281045.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602293457750 + }, + "329-zem-341.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602214859996 + }, + "33across.com": { + "heuristicAction": "block" + }, + "3573159.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602124529455 + }, + "358-ejs-102.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602040460457 + }, + "360-xjz-500.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601912496651 + }, + "360.cn": { + "heuristicAction": "block" + }, + "360yield.com": { + "heuristicAction": "block" + }, + "3668425.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601950532846 + }, + "367-mrv-360.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602149618905 + }, + "3810813.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602235841060 + }, + "3864313.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602087650625 + }, + "3conline.com": { + "heuristicAction": "block" + }, + "3ds.com": { + "heuristicAction": "allow" + }, + "3gl.net": { + "heuristicAction": "block" + }, + "3lift.com": { + "heuristicAction": "block" + }, + "406-iur-638.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601980754875 + }, + "40nuggets.com": { + "heuristicAction": "allow" + }, + "4234560.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601975178749 + }, + "4248738.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601893149252 + }, + "4338867.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602114796555 + }, + "4389858.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602149801047 + }, + "4394967.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602187406773 + }, + "4480363.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602019710952 + }, + "4599337.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602288870993 + }, + "4765202.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602026229016 + }, + "4934753.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602058653506 + }, + "4968275.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602249574231 + }, + "4dex.io": { + "heuristicAction": "block" + }, + "4paradigm.com": { + "heuristicAction": "allow" + }, + "4pda.to": { + "heuristicAction": "allow" + }, + "4strokemedia.com": { + "heuristicAction": "allow" + }, + "50bang.org": { + "heuristicAction": "block" + }, + "51.la": { + "heuristicAction": "block" + }, + "5165113.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601918619303 + }, + "5219529.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602269417704 + }, + "5322751.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601940717356 + }, + "53kf.com": { + "heuristicAction": "allow" + }, + "5490350.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602020056441 + }, + "5617400.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602230121505 + }, + "564-vfr-008.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602119698899 + }, + "58.com": { + "heuristicAction": "allow" + }, + "58.com.cn": { + "heuristicAction": "allow" + }, + "5865816.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602253920458 + }, + "58cdn.com.cn": { + "heuristicAction": "allow" + }, + "58che.com": { + "heuristicAction": "allow" + }, + "6019066.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602139271771 + }, + "6027462.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602152296091 + }, + "6034097.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602333530601 + }, + "6097260.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602034555469 + }, + "6231350.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602319648057 + }, + "6254122.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602137743743 + }, + "6266241.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602021900067 + }, + "638-hhz-510.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602324515078 + }, + "6417561.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601985457352 + }, + "650-kge-239.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602084388732 + }, + "653-smc-783.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601979896861 + }, + "6564653.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602044654233 + }, + "66356256.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601899997191 + }, + "66357621.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601884660235 + }, + "66357691.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602156123863 + }, + "66357711.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602222197777 + }, + "6812680.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602250693884 + }, + "6noy.net": { + "heuristicAction": "allow" + }, + "6sc.co": { + "heuristicAction": "block" + }, + "706-yia-261.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602295888522 + }, + "71360.com": { + "heuristicAction": "allow" + }, + "715-yzo-232.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602283385759 + }, + "7217216.collect.igodigital.com": { + "heuristicAction": "", + "nextUpdateTime": 1601882948730 + }, + "7324166.collect.igodigital.com": { + "heuristicAction": "", + "nextUpdateTime": 1602209477442 + }, + "745-buq-779.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602351977279 + }, + "75536.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1602116595842 + }, + "768-oqw-145.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602381617080 + }, + "7eer.net": { + "heuristicAction": "block" + }, + "7gra.us": { + "heuristicAction": "allow" + }, + "7nwhwds3ex7vjw54abqzb2u3nxyqh6543r2tktmbcada04fd8200f860sac.d.aa.online-metrix.net": { + "heuristicAction": "", + "nextUpdateTime": 1601906736341 + }, + "7xbid.com": { + "heuristicAction": "allow" + }, + "8034948.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602349213523 + }, + "805-kok-719.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602060502665 + }, + "8133010.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601967837951 + }, + "81956.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601935447862 + }, + "8324482.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602249390225 + }, + "8371571.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602272284955 + }, + "8379289.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601993766721 + }, + "8463383.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601893919453 + }, + "8464365.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601918124761 + }, + "8496125.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602352685872 + }, + "850-zwr-066.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602361665675 + }, + "855-qah-699.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602292968596 + }, + "8555493.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602297374703 + }, + "8666708.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601988700694 + }, + "867-pkr-571.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602364740987 + }, + "8704383.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602163924057 + }, + "8832015.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602233311813 + }, + "88721.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601981538168 + }, + "893-qif-790.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601961058405 + }, + "896-pbj-036.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602262838874 + }, + "8v4lqg.net": { + "heuristicAction": "allow" + }, + "9.global.siteimproveanalytics.io": { + "heuristicAction": "", + "nextUpdateTime": 1601948736260 + }, + "9200540.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602153371559 + }, + "9277599.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602247449028 + }, + "942-mym-356.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1601936104157 + }, + "9446450.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602002577445 + }, + "9499947.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602302965497 + }, + "9535906.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601880023391 + }, + "9591937.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602275502932 + }, + "9774013.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602101126331 + }, + "9786142.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602099310665 + }, + "983-kvh-814.mktoresp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602350102119 + }, + "9838407.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602348228862 + }, + "9920620.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602000601439 + }, + "9949476.fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602351250829 + }, + "a-mo.net": { + "heuristicAction": "block" + }, + "a.adroll.com": { + "heuristicAction": "", + "nextUpdateTime": 1602332774637 + }, + "a.centrum.cz": { + "heuristicAction": "allow" + }, + "a.exdynsrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1601882457106 + }, + "a.o333o.com": { + "heuristicAction": "allow" + }, + "a.pgtb.me": { + "heuristicAction": "allow" + }, + "a.pub.network": { + "heuristicAction": "", + "nextUpdateTime": 1602275227626 + }, + "a.quora.com": { + "heuristicAction": "", + "nextUpdateTime": 1602377293204 + }, + "a.realsrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1602229106916 + }, + "a.teads.tv": { + "heuristicAction": "", + "nextUpdateTime": 1602232486838 + }, + "a.wishabi.com": { + "heuristicAction": "cookieblock" + }, + "a2.adform.net": { + "heuristicAction": "", + "nextUpdateTime": 1601928954271 + }, + "aa.agkn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602048297215 + }, + "aafp.net": { + "heuristicAction": "allow" + }, + "aamcf.aamsitecertifier.com": { + "heuristicAction": "", + "nextUpdateTime": 1601880349664 + }, + "aamcftag.aamsitecertifier.com": { + "heuristicAction": "", + "nextUpdateTime": 1602116239808 + }, + "aamsitecertifier.com": { + "heuristicAction": "block" + }, + "aan.com": { + "heuristicAction": "allow" + }, + "aasaam.com": { + "heuristicAction": "block" + }, + "aau-search-web-prod.azurewebsites.net": { + "heuristicAction": "allow" + }, + "aau-search-webservice-v1-prod.azurewebsites.net": { + "heuristicAction": "allow" + }, + "aax-eu.amazon-adsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602303655288 + }, + "aax-fe.amazon-adsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602244910440 + }, + "aaxads.com": { + "heuristicAction": "block" + }, + "about.co.kr": { + "heuristicAction": "allow" + }, + "abtasty.com": { + "heuristicAction": "allow" + }, + "abtshield.com": { + "heuristicAction": "allow" + }, + "acast.cloud": { + "heuristicAction": "allow" + }, + "acast.com": { + "heuristicAction": "allow" + }, + "accesstrade.net": { + "heuristicAction": "allow" + }, + "accorhotels.com": { + "heuristicAction": "allow" + }, + "accorhotels.ws": { + "heuristicAction": "allow" + }, + "account.berush.com": { + "heuristicAction": "allow" + }, + "accounts.google.com": { + "heuristicAction": "cookieblock" + }, + "accu-web-raine.azurewebsites.net": { + "heuristicAction": "allow" + }, + "acdn.adnxs.com": { + "heuristicAction": "", + "nextUpdateTime": 1602136078728 + }, + "ace-sync.toast.com": { + "heuristicAction": "", + "nextUpdateTime": 1602166272069 + }, + "acint.net": { + "heuristicAction": "allow" + }, + "acpm.fr": { + "heuristicAction": "block" + }, + "acquia.com": { + "heuristicAction": "block" + }, + "acstat.com": { + "heuristicAction": "allow" + }, + "action.media6degrees.com": { + "heuristicAction": "", + "nextUpdateTime": 1602231039734 + }, + "actionnetwork.org": { + "heuristicAction": "allow" + }, + "activecalendar.com": { + "heuristicAction": "allow" + }, + "activehosted.com": { + "heuristicAction": "block" + }, + "activetrail.com": { + "heuristicAction": "allow" + }, + "acuityplatform.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602241789938 + }, + "acyzh.com": { + "heuristicAction": "allow" + }, + "ad-cdn.technoratimedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1601889638410 + }, + "ad-lancers.jp": { + "heuristicAction": "allow" + }, + "ad-plus.cn": { + "heuristicAction": "allow" + }, + "ad-score.com": { + "heuristicAction": "block" + }, + "ad-srv.net": { + "heuristicAction": "allow" + }, + "ad-stir.com": { + "heuristicAction": "block" + }, + "ad-survey.com": { + "heuristicAction": "allow" + }, + "ad-track.jp": { + "heuristicAction": "allow" + }, + "ad.crwdcntrl.net": { + "heuristicAction": "", + "nextUpdateTime": 1601976893526 + }, + "ad.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602154976198 + }, + "ad.gt": { + "heuristicAction": "block" + }, + "ad.lkqd.net": { + "heuristicAction": "", + "nextUpdateTime": 1601982456143 + }, + "ad.org.vn": { + "heuristicAction": "allow" + }, + "ad1x.com": { + "heuristicAction": "allow" + }, + "adalliance.io": { + "heuristicAction": "block" + }, + "adalyser.com": { + "heuristicAction": "block" + }, + "adaptiveads.com": { + "heuristicAction": "allow" + }, + "adaraanalytics.com": { + "heuristicAction": "allow" + }, + "adbinead.com": { + "heuristicAction": "allow" + }, + "adbox.lv": { + "heuristicAction": "allow" + }, + "adcampo.com": { + "heuristicAction": "allow" + }, + "adda247.in": { + "heuristicAction": "allow" + }, + "addevent.com": { + "heuristicAction": "allow" + }, + "addthis.com": { + "heuristicAction": "block" + }, + "adentifi.com": { + "heuristicAction": "block" + }, + "adform.net": { + "heuristicAction": "block" + }, + "adfox.ru": { + "heuristicAction": "block" + }, + "adgeek.net": { + "heuristicAction": "allow" + }, + "adhaven.com": { + "heuristicAction": "allow" + }, + "adhigh.net": { + "heuristicAction": "block" + }, + "adinc.kr": { + "heuristicAction": "allow" + }, + "adingo.jp": { + "heuristicAction": "allow" + }, + "adition.com": { + "heuristicAction": "block" + }, + "adjetter.com": { + "heuristicAction": "allow" + }, + "adkernel.com": { + "heuristicAction": "block" + }, + "adlmerge.com": { + "heuristicAction": "allow" + }, + "adm.fwmrm.net": { + "heuristicAction": "cookieblock" + }, + "adman.gr": { + "heuristicAction": "block" + }, + "admaster.com.cn": { + "heuristicAction": "allow" + }, + "admatic.com.tr": { + "heuristicAction": "allow" + }, + "admatrix.jp": { + "heuristicAction": "allow" + }, + "admedia.com": { + "heuristicAction": "allow" + }, + "admedo.com": { + "heuristicAction": "block" + }, + "admetrica.ru": { + "heuristicAction": "block" + }, + "admicro.vn": { + "heuristicAction": "block" + }, + "admission.net": { + "heuristicAction": "allow" + }, + "admithub.com": { + "heuristicAction": "allow" + }, + "admixer.net": { + "heuristicAction": "block" + }, + "admost.com": { + "heuristicAction": "block" + }, + "adnuntius.com": { + "heuristicAction": "block" + }, + "adnxs.com": { + "heuristicAction": "block" + }, + "adnz.co": { + "heuristicAction": "allow" + }, + "adobe.com": { + "heuristicAction": "block" + }, + "adobecqms.net": { + "heuristicAction": "allow" + }, + "adocean.pl": { + "heuristicAction": "block" + }, + "adop.cc": { + "heuristicAction": "block" + }, + "adotmob.com": { + "heuristicAction": "block" + }, + "adpnut.com": { + "heuristicAction": "allow" + }, + "adpushup.com": { + "heuristicAction": "block" + }, + "adpxl.co": { + "heuristicAction": "allow" + }, + "adrecover.com": { + "heuristicAction": "allow" + }, + "adriver.ru": { + "heuristicAction": "block" + }, + "adroll.com": { + "heuristicAction": "block" + }, + "adrta.com": { + "heuristicAction": "block" + }, + "ads.exoclick.com": { + "heuristicAction": "", + "nextUpdateTime": 1602011200868 + }, + "ads.exosrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1602157893909 + }, + "ads.pubmatic.com": { + "heuristicAction": "", + "nextUpdateTime": 1602024130584 + }, + "ads.realsrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1602271837180 + }, + "ads.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602316976938 + }, + "ads.undertone.com": { + "heuristicAction": "", + "nextUpdateTime": 1602014150970 + }, + "ads.yieldmo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602138201841 + }, + "adsafeprotected.com": { + "heuristicAction": "allow" + }, + "adscale.de": { + "heuristicAction": "block" + }, + "adschoom.com": { + "heuristicAction": "allow" + }, + "adscience.nl": { + "heuristicAction": "allow" + }, + "adsco.re": { + "heuristicAction": "allow" + }, + "adserver-us.adtech.advertising.com": { + "heuristicAction": "", + "nextUpdateTime": 1602059968709 + }, + "adserver.mk": { + "heuristicAction": "allow" + }, + "adservice.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1602096281580 + }, + "adservices.brandcdn.com": { + "heuristicAction": "allow" + }, + "adsfactor.net": { + "heuristicAction": "allow" + }, + "adskeeper.co.uk": { + "heuristicAction": "block" + }, + "adskeeper.com": { + "heuristicAction": "allow" + }, + "adsniper.ru": { + "heuristicAction": "allow" + }, + "adspsp.com": { + "heuristicAction": "allow" + }, + "adsrv.io": { + "heuristicAction": "allow" + }, + "adsrvr.org": { + "heuristicAction": "block" + }, + "adswizz.com": { + "heuristicAction": "block" + }, + "adsymptotic.com": { + "heuristicAction": "block" + }, + "adtarget.com.tr": { + "heuristicAction": "block" + }, + "adtdp.com": { + "heuristicAction": "block" + }, + "adtelli.com": { + "heuristicAction": "allow" + }, + "adtelligent.com": { + "heuristicAction": "block" + }, + "adtimaserver.vn": { + "heuristicAction": "block" + }, + "adtlgc.com": { + "heuristicAction": "allow" + }, + "adtng.com": { + "heuristicAction": "block" + }, + "adtodate.net": { + "heuristicAction": "allow" + }, + "adtrue.com": { + "heuristicAction": "block" + }, + "adup-tech.com": { + "heuristicAction": "allow" + }, + "advanced-web-analytics.com": { + "heuristicAction": "allow" + }, + "advangelists.com": { + "heuristicAction": "block" + }, + "advertising.com": { + "heuristicAction": "block" + }, + "advertserve.com": { + "heuristicAction": "allow" + }, + "advg.jp": { + "heuristicAction": "block" + }, + "advividnetwork.com": { + "heuristicAction": "block" + }, + "advsnx.net": { + "heuristicAction": "allow" + }, + "adweb.co.kr": { + "heuristicAction": "allow" + }, + "adwstats.com": { + "heuristicAction": "allow" + }, + "adx.adform.net": { + "heuristicAction": "", + "nextUpdateTime": 1602260040187 + }, + "adxadserv.com": { + "heuristicAction": "allow" + }, + "adxvip.com": { + "heuristicAction": "allow" + }, + "adyen.com": { + "heuristicAction": "allow" + }, + "adzerk.net": { + "heuristicAction": "block" + }, + "aegis.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602044921410 + }, + "aetn.com": { + "heuristicAction": "allow" + }, + "aetnd.com": { + "heuristicAction": "allow" + }, + "af-110.com": { + "heuristicAction": "allow" + }, + "af-web-cms-0-prod.azurewebsites.net": { + "heuristicAction": "allow" + }, + "affec.tv": { + "heuristicAction": "allow" + }, + "affirm.com": { + "heuristicAction": "cookieblock" + }, + "afftrack.pro": { + "heuristicAction": "allow" + }, + "aftonbladet.se": { + "heuristicAction": "allow" + }, + "agenziaentrate.it": { + "heuristicAction": "allow" + }, + "agilemeasure.com": { + "heuristicAction": "allow" + }, + "agilone.com": { + "heuristicAction": "allow" + }, + "agkn.com": { + "heuristicAction": "block" + }, + "agoda.net": { + "heuristicAction": "allow" + }, + "agora.pl": { + "heuristicAction": "allow" + }, + "ahighapi.com": { + "heuristicAction": "allow" + }, + "aidata.io": { + "heuristicAction": "block" + }, + "aihelp.net": { + "heuristicAction": "allow" + }, + "aimediagroup.com": { + "heuristicAction": "block" + }, + "aio.media": { + "heuristicAction": "allow" + }, + "aiproxies.com": { + "heuristicAction": "block" + }, + "airpr.com": { + "heuristicAction": "block" + }, + "aismo.ru": { + "heuristicAction": "allow" + }, + "aj1015.online": { + "heuristicAction": "allow" + }, + "aj1431.online": { + "heuristicAction": "allow" + }, + "aj2031.online": { + "heuristicAction": "allow" + }, + "aj2208.online": { + "heuristicAction": "allow" + }, + "ajax.googleapis.com": { + "heuristicAction": "cookieblock" + }, + "akamaihd.net": { + "heuristicAction": "cookieblock" + }, + "akamaized.net": { + "heuristicAction": "cookieblock" + }, + "akstat.io": { + "heuristicAction": "allow" + }, + "alb.reddit.com": { + "heuristicAction": "cookieblock" + }, + "albacross.com": { + "heuristicAction": "block" + }, + "alcmpn.com": { + "heuristicAction": "block" + }, + "alexametrics.com": { + "heuristicAction": "block" + }, + "alfasense.com": { + "heuristicAction": "block" + }, + "aliapp.org": { + "heuristicAction": "allow" + }, + "alibaba.com": { + "heuristicAction": "block" + }, + "alicdn.com": { + "heuristicAction": "cookieblock" + }, + "aliexpress.com": { + "heuristicAction": "allow" + }, + "alifafdlnjeruif.com": { + "heuristicAction": "allow" + }, + "alipay.com": { + "heuristicAction": "allow" + }, + "aliyun.com": { + "heuristicAction": "block" + }, + "aliyuncs.com": { + "heuristicAction": "allow" + }, + "all-cod.com": { + "heuristicAction": "allow" + }, + "allure.com": { + "heuristicAction": "block" + }, + "almamedia.fi": { + "heuristicAction": "allow" + }, + "alocdn.com": { + "heuristicAction": "block" + }, + "alphonso.tv": { + "heuristicAction": "allow" + }, + "alsa.org": { + "heuristicAction": "allow" + }, + "alwasela.com": { + "heuristicAction": "allow" + }, + "am15.net": { + "heuristicAction": "allow" + }, + "amap.com": { + "heuristicAction": "block" + }, + "amazon-adsystem.com": { + "heuristicAction": "block" + }, + "amazon.com": { + "heuristicAction": "cookieblock" + }, + "amazonaws.com": { + "heuristicAction": "allow" + }, + "amazoncustomerservice.d2.sc.omtrdc.net": { + "heuristicAction": "cookieblock" + }, + "amazonwebservices.d2.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602353927309 + }, + "amazonwebservicesinc.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601904603488 + }, + "amcdn.vn": { + "heuristicAction": "block", + "nextUpdateTime": 1602189818063 + }, + "ameba.jp": { + "heuristicAction": "allow" + }, + "amnet.tw": { + "heuristicAction": "allow" + }, + "amplify.outbrain.com": { + "heuristicAction": "", + "nextUpdateTime": 1602163387484 + }, + "amplifypixel.outbrain.com": { + "heuristicAction": "", + "nextUpdateTime": 1602336500276 + }, + "amunx.de": { + "heuristicAction": "allow" + }, + "an.facebook.com": { + "heuristicAction": "", + "nextUpdateTime": 1602383201434 + }, + "an.yandex.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602217661472 + }, + "analytics-egain.com": { + "heuristicAction": "block" + }, + "analytics-sm.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602273074367 + }, + "analytics.aasaam.com": { + "heuristicAction": "", + "nextUpdateTime": 1602229451869 + }, + "analytics.contentexchange.me": { + "heuristicAction": "block" + }, + "analytics.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1602050172332 + }, + "analytics.prod.jpp.cnyes.cool": { + "heuristicAction": "allow" + }, + "analytics.vodgc.net": { + "heuristicAction": "allow" + }, + "anandabazar.com": { + "heuristicAction": "allow" + }, + "and.co.uk": { + "heuristicAction": "allow" + }, + "andertoons.com": { + "heuristicAction": "allow" + }, + "aniview.com": { + "heuristicAction": "block" + }, + "anm.co.uk": { + "heuristicAction": "allow" + }, + "anquan.org": { + "heuristicAction": "block" + }, + "ansira.com": { + "heuristicAction": "allow" + }, + "answerscloud.com": { + "heuristicAction": "allow" + }, + "anura.io": { + "heuristicAction": "allow" + }, + "anvato.net": { + "heuristicAction": "cookieblock" + }, + "anyclip.com": { + "heuristicAction": "allow" + }, + "anz.com": { + "heuristicAction": "allow" + }, + "ap.lijit.com": { + "heuristicAction": "", + "nextUpdateTime": 1601949385805 + }, + "aparat.com": { + "heuristicAction": "block" + }, + "apeartalb.site": { + "heuristicAction": "allow" + }, + "apester.com": { + "heuristicAction": "block" + }, + "apex.go.sonobi.com": { + "heuristicAction": "", + "nextUpdateTime": 1601985122364 + }, + "api-maps.yandex.ru": { + "heuristicAction": "cookieblock" + }, + "api.adsymptotic.com": { + "heuristicAction": "", + "nextUpdateTime": 1601902177122 + }, + "api.aws.parking.godaddy.com": { + "heuristicAction": "", + "nextUpdateTime": 1602110820606 + }, + "api.clerk.io": { + "heuristicAction": "allow" + }, + "api.company-target.com": { + "heuristicAction": "", + "nextUpdateTime": 1602116268703 + }, + "api.connecto.io": { + "heuristicAction": "allow" + }, + "api.flocktory.com": { + "heuristicAction": "", + "nextUpdateTime": 1602334865404 + }, + "api.growingio.com": { + "heuristicAction": "", + "nextUpdateTime": 1602134271770 + }, + "api.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "api.ipgeolocation.io": { + "heuristicAction": "allow" + }, + "api.livechatinc.com": { + "heuristicAction": "cookieblock" + }, + "api.look.360.cn": { + "heuristicAction": "", + "nextUpdateTime": 1602249379189 + }, + "api.map.baidu.com": { + "heuristicAction": "cookieblock" + }, + "api.nanigans.com": { + "heuristicAction": "allow" + }, + "api.parking.godaddy.com": { + "heuristicAction": "", + "nextUpdateTime": 1602389760124 + }, + "api.parsely.com": { + "heuristicAction": "", + "nextUpdateTime": 1602263472144 + }, + "api.popin.cc": { + "heuristicAction": "", + "nextUpdateTime": 1602358565468 + }, + "api.rec-engine.com": { + "heuristicAction": "allow" + }, + "api.rlcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1601933549471 + }, + "api.soundcloud.com": { + "heuristicAction": "cookieblock" + }, + "api.tw.weibo.com": { + "heuristicAction": "", + "nextUpdateTime": 1601971482641 + }, + "api.viafoura.co": { + "heuristicAction": "", + "nextUpdateTime": 1602039952667 + }, + "api3847.d41.co": { + "heuristicAction": "", + "nextUpdateTime": 1601942740723 + }, + "api4773.d41.co": { + "heuristicAction": "", + "nextUpdateTime": 1602104337602 + }, + "apihotels.net": { + "heuristicAction": "allow" + }, + "apis.google.com": { + "heuristicAction": "cookieblock" + }, + "apollo.miniclip.com": { + "heuristicAction": "allow" + }, + "app-script.monsido.com": { + "heuristicAction": "", + "nextUpdateTime": 1601909505904 + }, + "app-us1.com": { + "heuristicAction": "block" + }, + "app.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "app.link": { + "heuristicAction": "block", + "nextUpdateTime": 1602015382068 + }, + "app.usercentrics.eu": { + "heuristicAction": "", + "nextUpdateTime": 1602016595116 + }, + "apparmor.com": { + "heuristicAction": "block" + }, + "appconsent.io": { + "heuristicAction": "block" + }, + "appdynamics.com": { + "heuristicAction": "block" + }, + "appier.net": { + "heuristicAction": "block" + }, + "apple.com": { + "heuristicAction": "cookieblock" + }, + "appmifile.com": { + "heuristicAction": "allow" + }, + "apps.elfsight.com": { + "heuristicAction": "allow" + }, + "appsflyer.com": { + "heuristicAction": "block" + }, + "apvdr.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601949486273 + }, + "aqyzmedia.yunaq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602266570665 + }, + "aralego.com": { + "heuristicAction": "block" + }, + "arc.io": { + "heuristicAction": "allow" + }, + "architecturaldigest.com": { + "heuristicAction": "block" + }, + "ard.de": { + "heuristicAction": "allow" + }, + "arrivalist.com": { + "heuristicAction": "allow" + }, + "arte.tv": { + "heuristicAction": "allow" + }, + "artipbox.net": { + "heuristicAction": "allow" + }, + "aruba.it": { + "heuristicAction": "allow" + }, + "as-sec.casalemedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1602276547266 + }, + "as.com": { + "heuristicAction": "allow" + }, + "asadcdn.com": { + "heuristicAction": "block" + }, + "asapp.com": { + "heuristicAction": "block" + }, + "ascap.com": { + "heuristicAction": "allow" + }, + "ascendeum-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602318370598 + }, + "ascpqnj-oam.global.ssl.fastly.net": { + "heuristicAction": "allow" + }, + "asia.creativecdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1601955971649 + }, + "asianmedia.com": { + "heuristicAction": "allow" + }, + "ask.com": { + "heuristicAction": "allow" + }, + "askvamygov-ui.azurewebsites.net": { + "heuristicAction": "allow" + }, + "aso1.net": { + "heuristicAction": "block" + }, + "aspencore.com": { + "heuristicAction": "allow" + }, + "assets.bounceexchange.com": { + "heuristicAction": "", + "nextUpdateTime": 1601882616948 + }, + "assets.maerskline.com": { + "heuristicAction": "allow" + }, + "assets.pinterest.com": { + "heuristicAction": "", + "nextUpdateTime": 1601935852342 + }, + "assets.revcontent.com": { + "heuristicAction": "", + "nextUpdateTime": 1602268569676 + }, + "associates-amazon.com": { + "heuristicAction": "block" + }, + "asteannunci.it": { + "heuristicAction": "allow" + }, + "async-px-eu.dynamicyield.com": { + "heuristicAction": "", + "nextUpdateTime": 1601883862412 + }, + "async-px.dynamicyield.com": { + "heuristicAction": "", + "nextUpdateTime": 1602203445235 + }, + "atdmt.com": { + "heuristicAction": "block" + }, + "atgsvcs.com": { + "heuristicAction": "block" + }, + "ati-host.net": { + "heuristicAction": "block" + }, + "atlas.atsptp.com": { + "heuristicAction": "allow" + }, + "atlassian.net": { + "heuristicAction": "allow" + }, + "atp.io": { + "heuristicAction": "block" + }, + "ats.rlcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602125519491 + }, + "atsptp.com": { + "heuristicAction": "allow" + }, + "att.com": { + "heuristicAction": "allow" + }, + "attentivemobile.com": { + "heuristicAction": "block" + }, + "attservicesinc.tt.omtrdc.net": { + "heuristicAction": "cookieblock" + }, + "au.tags.newscgp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602049014872 + }, + "au11-tracker.inside-graph.com": { + "heuristicAction": "", + "nextUpdateTime": 1602184235101 + }, + "audex.userreport.com": { + "heuristicAction": "", + "nextUpdateTime": 1602262150404 + }, + "audiencerun.com": { + "heuristicAction": "allow" + }, + "audioboom.com": { + "heuristicAction": "allow" + }, + "audioburst.com": { + "heuristicAction": "allow" + }, + "aufp.io": { + "heuristicAction": "allow" + }, + "auone.jp": { + "heuristicAction": "allow" + }, + "auth.adobe.com": { + "heuristicAction": "cookieblock" + }, + "auth0.com": { + "heuristicAction": "cookieblock" + }, + "authorize.net": { + "heuristicAction": "allow" + }, + "autoimg.cn": { + "heuristicAction": "allow" + }, + "autonom8.com": { + "heuristicAction": "allow" + }, + "autopilothq.com": { + "heuristicAction": "block" + }, + "avangate.com": { + "heuristicAction": "allow" + }, + "avantisvideo.com": { + "heuristicAction": "block" + }, + "avd.innity.com": { + "heuristicAction": "", + "nextUpdateTime": 1602065557805 + }, + "avmws.com": { + "heuristicAction": "block" + }, + "aweber.com": { + "heuristicAction": "allow" + }, + "axisbank.co.in": { + "heuristicAction": "allow" + }, + "ayads.co": { + "heuristicAction": "block" + }, + "ayc0zsm69431gfebd.xyz": { + "heuristicAction": "block" + }, + "ayo.co.id": { + "heuristicAction": "allow" + }, + "azet.sk": { + "heuristicAction": "allow" + }, + "azureedge.net": { + "heuristicAction": "cookieblock" + }, + "azurefd.net": { + "heuristicAction": "allow" + }, + "b-code.liadm.com": { + "heuristicAction": "", + "nextUpdateTime": 1602339921290 + }, + "b.ws.sessioncam.com": { + "heuristicAction": "", + "nextUpdateTime": 1602234050802 + }, + "b0e8.com": { + "heuristicAction": "block" + }, + "b1img.com": { + "heuristicAction": "allow" + }, + "b1sync.zemanta.com": { + "heuristicAction": "", + "nextUpdateTime": 1602158714232 + }, + "b2c.insticator.com": { + "heuristicAction": "", + "nextUpdateTime": 1602187927759 + }, + "b92.yahoo.co.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602315244317 + }, + "b97.yahoo.co.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602020393717 + }, + "b9i7.net": { + "heuristicAction": "allow" + }, + "bablic.com": { + "heuristicAction": "block" + }, + "baidu.com": { + "heuristicAction": "block" + }, + "baidustatic.com": { + "heuristicAction": "allow" + }, + "baikalize.com": { + "heuristicAction": "allow" + }, + "baixing.net": { + "heuristicAction": "allow" + }, + "baiying.cn": { + "heuristicAction": "allow" + }, + "bam-x.com": { + "heuristicAction": "block" + }, + "bam.eu01.nr-data.net": { + "heuristicAction": "", + "nextUpdateTime": 1601889093359 + }, + "bam.nr-data.net": { + "heuristicAction": "", + "nextUpdateTime": 1602152131553 + }, + "bancogalicia.com.ar": { + "heuristicAction": "allow" + }, + "banggood.com": { + "heuristicAction": "allow" + }, + "barchart.com": { + "heuristicAction": "allow" + }, + "barilliance.net": { + "heuristicAction": "allow" + }, + "bashirian.biz": { + "heuristicAction": "allow" + }, + "basspro.com": { + "heuristicAction": "allow" + }, + "bat.bing.com": { + "heuristicAction": "", + "nextUpdateTime": 1602387663629 + }, + "bayan.ir": { + "heuristicAction": "allow" + }, + "baynote.net": { + "heuristicAction": "block" + }, + "bazaarvoice.com": { + "heuristicAction": "cookieblock" + }, + "bbelements.com": { + "heuristicAction": "allow" + }, + "bbg.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602309051055 + }, + "bcicdn.com": { + "heuristicAction": "allow" + }, + "bcn.cat": { + "heuristicAction": "allow" + }, + "bd4travel.com": { + "heuristicAction": "allow" + }, + "bdash-cloud.com": { + "heuristicAction": "allow" + }, + "bdg-analytics.appspot.com": { + "heuristicAction": "cookieblock" + }, + "bdimg.share.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602145458005 + }, + "beacon.riskified.com": { + "heuristicAction": "", + "nextUpdateTime": 1601996068641 + }, + "bebi.com": { + "heuristicAction": "block" + }, + "become.co.jp": { + "heuristicAction": "allow" + }, + "beian.gov.cn": { + "heuristicAction": "allow" + }, + "benchmarkemail.com": { + "heuristicAction": "allow" + }, + "berush.com": { + "heuristicAction": "allow" + }, + "bestyang.cn": { + "heuristicAction": "allow" + }, + "betgorebysson.club": { + "heuristicAction": "block" + }, + "betweendigital.com": { + "heuristicAction": "block" + }, + "bf-tools.net": { + "heuristicAction": "allow" + }, + "bfmio.com": { + "heuristicAction": "block" + }, + "bh.contextweb.com": { + "heuristicAction": "", + "nextUpdateTime": 1602151063649 + }, + "bhphotovideo.com": { + "heuristicAction": "allow" + }, + "bibox360.com": { + "heuristicAction": "allow" + }, + "bid.contextweb.com": { + "heuristicAction": "", + "nextUpdateTime": 1602005816713 + }, + "bid.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602267094770 + }, + "bidder.criteo.com": { + "heuristicAction": "", + "nextUpdateTime": 1601956754101 + }, + "bidgear.com": { + "heuristicAction": "block" + }, + "bidr.io": { + "heuristicAction": "block" + }, + "bidstreamserver.com": { + "heuristicAction": "allow" + }, + "bidswitch.net": { + "heuristicAction": "block" + }, + "bidvertiser.com": { + "heuristicAction": "allow" + }, + "bigmining.com": { + "heuristicAction": "block" + }, + "bigo.tv": { + "heuristicAction": "allow" + }, + "bing.com": { + "heuristicAction": "block" + }, + "binstats.com": { + "heuristicAction": "allow" + }, + "bitdefender.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602165974974 + }, + "bitdefender.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601989445163 + }, + "bithumb.com": { + "heuristicAction": "allow" + }, + "bitninja.io": { + "heuristicAction": "block" + }, + "bitrix.info": { + "heuristicAction": "block", + "nextUpdateTime": 1602045878490 + }, + "bizbuysell.com": { + "heuristicAction": "allow" + }, + "bizfly.vn": { + "heuristicAction": "allow" + }, + "bizible.com": { + "heuristicAction": "block" + }, + "bizibly.com": { + "heuristicAction": "block" + }, + "bizographics.com": { + "heuristicAction": "block" + }, + "bizrate.com": { + "heuristicAction": "cookieblock" + }, + "bizspring.co.kr": { + "heuristicAction": "allow" + }, + "bizspring.net": { + "heuristicAction": "allow" + }, + "bjcathay.com": { + "heuristicAction": "allow" + }, + "blisspointmedia.com": { + "heuristicAction": "allow" + }, + "blogsky.com": { + "heuristicAction": "allow" + }, + "bluecava.com": { + "heuristicAction": "allow" + }, + "blueconic.net": { + "heuristicAction": "block" + }, + "bluekai.com": { + "heuristicAction": "block" + }, + "bm.adentifi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602184160391 + }, + "bmwofnorthamericallc.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601878977610 + }, + "bn-web.com": { + "heuristicAction": "allow" + }, + "bnidx.com": { + "heuristicAction": "allow" + }, + "bnpparibas.fr": { + "heuristicAction": "allow" + }, + "bob.dmpxs.com": { + "heuristicAction": "", + "nextUpdateTime": 1602299324826 + }, + "bold.adman.gr": { + "heuristicAction": "", + "nextUpdateTime": 1602152587390 + }, + "boldchat.com": { + "heuristicAction": "cookieblock" + }, + "bonappetit.com": { + "heuristicAction": "block" + }, + "bongacams.com": { + "heuristicAction": "allow" + }, + "bonnier-subscriptions.com": { + "heuristicAction": "allow" + }, + "booking.com": { + "heuristicAction": "allow" + }, + "books.google.com": { + "heuristicAction": "cookieblock" + }, + "boostingads.com": { + "heuristicAction": "allow" + }, + "boot.pubstack.io": { + "heuristicAction": "", + "nextUpdateTime": 1602259547561 + }, + "bounceexchange.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602370139470 + }, + "bouncex.net": { + "heuristicAction": "allow" + }, + "boxx.ai": { + "heuristicAction": "allow" + }, + "brand-display.com": { + "heuristicAction": "allow" + }, + "brandcdn.com": { + "heuristicAction": "allow" + }, + "brandonsun.com": { + "heuristicAction": "allow" + }, + "brdmin.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602327375504 + }, + "breaktime.com.tw": { + "heuristicAction": "allow" + }, + "brightcove.com": { + "heuristicAction": "cookieblock" + }, + "brightedge.com": { + "heuristicAction": "allow" + }, + "broadstreetads.com": { + "heuristicAction": "block" + }, + "brsrvr.com": { + "heuristicAction": "block" + }, + "bs.serving-sys.com": { + "heuristicAction": "", + "nextUpdateTime": 1601965040769 + }, + "btlr.sharethrough.com": { + "heuristicAction": "", + "nextUpdateTime": 1601945188066 + }, + "bttrack.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602206723567 + }, + "btttag.com": { + "heuristicAction": "block" + }, + "buckridge.link": { + "heuristicAction": "allow" + }, + "bugsnag.com": { + "heuristicAction": "allow" + }, + "bullionyield.com": { + "heuristicAction": "allow" + }, + "bumlam.com": { + "heuristicAction": "allow" + }, + "burly.io": { + "heuristicAction": "allow" + }, + "businessclick.com": { + "heuristicAction": "allow" + }, + "businessinsider.com": { + "heuristicAction": "allow" + }, + "buysellads.net": { + "heuristicAction": "allow" + }, + "buzzfeed.com": { + "heuristicAction": "allow" + }, + "buzzoola.com": { + "heuristicAction": "block" + }, + "byteoversea.com": { + "heuristicAction": "allow" + }, + "c-ctrip.com": { + "heuristicAction": "allow" + }, + "c.aaxads.com": { + "heuristicAction": "", + "nextUpdateTime": 1602133117190 + }, + "c.amazon-adsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602116423667 + }, + "c.cintnetworks.com": { + "heuristicAction": "", + "nextUpdateTime": 1601985045135 + }, + "c.echoban.ru": { + "heuristicAction": "allow" + }, + "c.finder.com.au": { + "heuristicAction": "allow" + }, + "c.imedia.cz": { + "heuristicAction": "", + "nextUpdateTime": 1602338007739 + }, + "c.tvpixel.com": { + "heuristicAction": "", + "nextUpdateTime": 1602281468764 + }, + "c0.adalyser.com": { + "heuristicAction": "block" + }, + "c2.taboola.com": { + "heuristicAction": "", + "nextUpdateTime": 1602199865122 + }, + "c212.net": { + "heuristicAction": "block", + "nextUpdateTime": 1601926998289 + }, + "c2shb.ssp.yahoo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602119360923 + }, + "c3tag.com": { + "heuristicAction": "block" + }, + "c8.net.ua": { + "heuristicAction": "allow" + }, + "ca.clcknads.pro": { + "heuristicAction": "allow" + }, + "calendar.google.com": { + "heuristicAction": "cookieblock" + }, + "calendly.com": { + "heuristicAction": "allow" + }, + "canliskor.com.tr": { + "heuristicAction": "allow" + }, + "captcha.qq.com": { + "heuristicAction": "cookieblock" + }, + "captcha.su.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602035118165 + }, + "capterra.com": { + "heuristicAction": "allow" + }, + "capture.ma.knnlab.com": { + "heuristicAction": "allow" + }, + "capturehighered.net": { + "heuristicAction": "block" + }, + "carfax.com": { + "heuristicAction": "allow" + }, + "caroda.io": { + "heuristicAction": "allow" + }, + "casalemedia.com": { + "heuristicAction": "block" + }, + "caspio.com": { + "heuristicAction": "allow" + }, + "castbox.fm": { + "heuristicAction": "allow" + }, + "castle.io": { + "heuristicAction": "block" + }, + "cbjs.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602318189107 + }, + "cbs.com": { + "heuristicAction": "allow" + }, + "cbsi.com": { + "heuristicAction": "allow" + }, + "cbsi.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602025130249 + }, + "cctv.com": { + "heuristicAction": "allow" + }, + "cdeledu.com": { + "heuristicAction": "allow" + }, + "cdn-9.nikon-cdn.com": { + "heuristicAction": "allow" + }, + "cdn-eu.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "cdn-gl.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602360335129 + }, + "cdn-net.com": { + "heuristicAction": "allow" + }, + "cdn-payscale.com": { + "heuristicAction": "allow" + }, + "cdn.admixer.net": { + "heuristicAction": "", + "nextUpdateTime": 1601998059247 + }, + "cdn.adpushup.com": { + "heuristicAction": "", + "nextUpdateTime": 1602346792119 + }, + "cdn.adrta.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602255264722 + }, + "cdn.adswizz.com": { + "heuristicAction": "", + "nextUpdateTime": 1601877259582 + }, + "cdn.adtrue.com": { + "heuristicAction": "", + "nextUpdateTime": 1601977551091 + }, + "cdn.anvato.net": { + "heuristicAction": "cookieblock" + }, + "cdn.appdynamics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602206414606 + }, + "cdn.ayc0zsm69431gfebd.xyz": { + "heuristicAction": "", + "nextUpdateTime": 1602022432060 + }, + "cdn.b0e8.com": { + "heuristicAction": "", + "nextUpdateTime": 1602218730077 + }, + "cdn.bizible.com": { + "heuristicAction": "", + "nextUpdateTime": 1602072684408 + }, + "cdn.blueconic.net": { + "heuristicAction": "", + "nextUpdateTime": 1601919649170 + }, + "cdn.bttrack.com": { + "heuristicAction": "", + "nextUpdateTime": 1601902953164 + }, + "cdn.c212.net": { + "heuristicAction": "", + "nextUpdateTime": 1602010562584 + }, + "cdn.connectad.io": { + "heuristicAction": "", + "nextUpdateTime": 1602189715401 + }, + "cdn.cquotient.com": { + "heuristicAction": "", + "nextUpdateTime": 1602143996048 + }, + "cdn.cxense.com": { + "heuristicAction": "", + "nextUpdateTime": 1601930190742 + }, + "cdn.districtm.io": { + "heuristicAction": "", + "nextUpdateTime": 1601878123166 + }, + "cdn.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "cdn.engine.phn.doublepimp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602186508607 + }, + "cdn.feathr.co": { + "heuristicAction": "", + "nextUpdateTime": 1601879578239 + }, + "cdn.feedify.net": { + "heuristicAction": "", + "nextUpdateTime": 1601995161512 + }, + "cdn.heapanalytics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602295105858 + }, + "cdn.id5-sync.com": { + "heuristicAction": "", + "nextUpdateTime": 1601902679665 + }, + "cdn.intergient.com": { + "heuristicAction": "", + "nextUpdateTime": 1602102160456 + }, + "cdn.izooto.com": { + "heuristicAction": "", + "nextUpdateTime": 1602163468708 + }, + "cdn.jsdelivr.net": { + "heuristicAction": "cookieblock" + }, + "cdn.jwplayer.com": { + "heuristicAction": "cookieblock" + }, + "cdn.keywee.co": { + "heuristicAction": "", + "nextUpdateTime": 1602224814381 + }, + "cdn.monsido.com": { + "heuristicAction": "", + "nextUpdateTime": 1602197579155 + }, + "cdn.onthe.io": { + "heuristicAction": "", + "nextUpdateTime": 1602222920034 + }, + "cdn.parsely.com": { + "heuristicAction": "", + "nextUpdateTime": 1601948971800 + }, + "cdn.pbbl.co": { + "heuristicAction": "", + "nextUpdateTime": 1602226564814 + }, + "cdn.pendo.io": { + "heuristicAction": "", + "nextUpdateTime": 1602386182050 + }, + "cdn.quantummetric.com": { + "heuristicAction": "", + "nextUpdateTime": 1602195067300 + }, + "cdn.scarabresearch.com": { + "heuristicAction": "", + "nextUpdateTime": 1602071096077 + }, + "cdn.segment.com": { + "heuristicAction": "", + "nextUpdateTime": 1601955658663 + }, + "cdn.sift.com": { + "heuristicAction": "", + "nextUpdateTime": 1602118383507 + }, + "cdn.siftscience.com": { + "heuristicAction": "", + "nextUpdateTime": 1601898263432 + }, + "cdn.taboola.com": { + "heuristicAction": "", + "nextUpdateTime": 1601874073082 + }, + "cdn.tradelab.fr": { + "heuristicAction": "", + "nextUpdateTime": 1601905707251 + }, + "cdn.tsyndicate.com": { + "heuristicAction": "", + "nextUpdateTime": 1602278154788 + }, + "cdn.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602352155956 + }, + "cdn.userreplay.net": { + "heuristicAction": "block" + }, + "cdn.yektanet.com": { + "heuristicAction": "", + "nextUpdateTime": 1601925614365 + }, + "cdn1.affirm.com": { + "heuristicAction": "cookieblock" + }, + "cdn4.buysellads.net": { + "heuristicAction": "allow" + }, + "cdninstagram.com": { + "heuristicAction": "allow" + }, + "cdnpub.info": { + "heuristicAction": "allow" + }, + "cdns.brsrvr.com": { + "heuristicAction": "", + "nextUpdateTime": 1602189823139 + }, + "cdnssl.clicktale.net": { + "heuristicAction": "", + "nextUpdateTime": 1602106370607 + }, + "cdnvideo.mobi": { + "heuristicAction": "allow" + }, + "cdnwidget.com": { + "heuristicAction": "block" + }, + "ceet.co": { + "heuristicAction": "allow" + }, + "cengage.com": { + "heuristicAction": "allow" + }, + "center.io": { + "heuristicAction": "allow" + }, + "centerdigitaled.com": { + "heuristicAction": "allow" + }, + "centrum.cz": { + "heuristicAction": "allow" + }, + "cern.ch": { + "heuristicAction": "allow" + }, + "certify-js.alexametrics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602101327808 + }, + "certify.alexametrics.com": { + "heuristicAction": "", + "nextUpdateTime": 1601882930135 + }, + "cfzu.net": { + "heuristicAction": "allow" + }, + "channelnewsasia.com": { + "heuristicAction": "allow" + }, + "charlotteobserver.com": { + "heuristicAction": "allow" + }, + "chartbeat.net": { + "heuristicAction": "block" + }, + "chase.com": { + "heuristicAction": "allow" + }, + "chat.chatra.io": { + "heuristicAction": "allow" + }, + "chatdealer.jp": { + "heuristicAction": "allow" + }, + "chatplus.jp": { + "heuristicAction": "allow" + }, + "chatra.io": { + "heuristicAction": "allow" + }, + "chaturbate.com": { + "heuristicAction": "allow" + }, + "checkout.google.com": { + "heuristicAction": "cookieblock" + }, + "chegg.com": { + "heuristicAction": "allow" + }, + "cheqzone.com": { + "heuristicAction": "block" + }, + "cheyisou.com": { + "heuristicAction": "allow" + }, + "childsplayclothing.co.uk": { + "heuristicAction": "allow" + }, + "chipweb.azurewebsites.net": { + "heuristicAction": "allow" + }, + "choozle.com": { + "heuristicAction": "block" + }, + "cian.site": { + "heuristicAction": "allow" + }, + "cint.com": { + "heuristicAction": "allow" + }, + "cintnetworks.com": { + "heuristicAction": "block" + }, + "cisco.com": { + "heuristicAction": "block" + }, + "citi.com": { + "heuristicAction": "allow" + }, + "citiservi.es": { + "heuristicAction": "allow" + }, + "citrix.com": { + "heuristicAction": "allow" + }, + "clarivate.com": { + "heuristicAction": "allow" + }, + "classistatic.com": { + "heuristicAction": "allow" + }, + "clcknads.pro": { + "heuristicAction": "allow" + }, + "clearbit.com": { + "heuristicAction": "allow" + }, + "clerk.io": { + "heuristicAction": "allow" + }, + "clevernt.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602225098998 + }, + "clickability.com": { + "heuristicAction": "allow" + }, + "clickagy.com": { + "heuristicAction": "allow" + }, + "clickcertain.com": { + "heuristicAction": "allow" + }, + "clickfuse.com": { + "heuristicAction": "allow" + }, + "clickondetroit.com": { + "heuristicAction": "allow" + }, + "clicktale.net": { + "heuristicAction": "block" + }, + "clicktripz.com": { + "heuristicAction": "block" + }, + "clientgear.com": { + "heuristicAction": "allow" + }, + "clients1.google.com": { + "heuristicAction": "cookieblock" + }, + "clients6.google.com": { + "heuristicAction": "cookieblock" + }, + "clinch.co": { + "heuristicAction": "allow" + }, + "clink.cn": { + "heuristicAction": "allow" + }, + "clive.cloud": { + "heuristicAction": "block" + }, + "clmbtech.com": { + "heuristicAction": "block" + }, + "cloob.com": { + "heuristicAction": "allow" + }, + "cloud-iq.com": { + "heuristicAction": "allow" + }, + "cloud-us.analytics-egain.com": { + "heuristicAction": "", + "nextUpdateTime": 1602025793764 + }, + "cloudflare.com": { + "heuristicAction": "allow" + }, + "clublibertaddigital.com": { + "heuristicAction": "allow" + }, + "cluep.com": { + "heuristicAction": "allow" + }, + "cluesnetwork.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602169279411 + }, + "cm.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602229275079 + }, + "cma.ecommerce.highwire.org": { + "heuristicAction": "", + "nextUpdateTime": 1602019896483 + }, + "cmanager-prometeo.appspot.com": { + "heuristicAction": "allow" + }, + "cmsadmin30.convio.net": { + "heuristicAction": "allow" + }, + "cnmo-img.com.cn": { + "heuristicAction": "allow" + }, + "cnnd.vn": { + "heuristicAction": "allow" + }, + "cnrs.fr": { + "heuristicAction": "allow" + }, + "cntraveler.com": { + "heuristicAction": "block" + }, + "cntv.cn": { + "heuristicAction": "allow" + }, + "cnyes.cool": { + "heuristicAction": "allow" + }, + "cnzz.com": { + "heuristicAction": "block" + }, + "cobaltgroup.com": { + "heuristicAction": "allow" + }, + "coccusadmanlob.com": { + "heuristicAction": "allow" + }, + "codon.vn": { + "heuristicAction": "allow" + }, + "coherentpath.com": { + "heuristicAction": "allow" + }, + "cohesionapps.com": { + "heuristicAction": "block" + }, + "coinmama.com": { + "heuristicAction": "allow" + }, + "cointiply.com": { + "heuristicAction": "allow" + }, + "col1.wiqhit.com": { + "heuristicAction": "allow" + }, + "collect-eu-west-1.tealiumiq.com": { + "heuristicAction": "", + "nextUpdateTime": 1601922968466 + }, + "collect.tealiumiq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602028785345 + }, + "collectandgather.com": { + "heuristicAction": "block" + }, + "collector-4113.tvsquared.com": { + "heuristicAction": "", + "nextUpdateTime": 1601956166811 + }, + "collector-7762.tvsquared.com": { + "heuristicAction": "", + "nextUpdateTime": 1602278064501 + }, + "collector-8013.tvsquared.com": { + "heuristicAction": "", + "nextUpdateTime": 1601892538336 + }, + "collector-9152.us.tvsquared.com": { + "heuristicAction": "", + "nextUpdateTime": 1602362051662 + }, + "collector_sr.contentexchange.me": { + "heuristicAction": "", + "nextUpdateTime": 1602076112287 + }, + "collegenet.com": { + "heuristicAction": "allow" + }, + "colossusssp.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601940122536 + }, + "comm100.com": { + "heuristicAction": "allow" + }, + "comm100.io": { + "heuristicAction": "allow" + }, + "commander1.com": { + "heuristicAction": "block" + }, + "commitchange.com": { + "heuristicAction": "block" + }, + "company-target.com": { + "heuristicAction": "block" + }, + "compass.adop.cc": { + "heuristicAction": "block", + "nextUpdateTime": 1602230218761 + }, + "complex.com": { + "heuristicAction": "allow" + }, + "comptia.informz.net": { + "heuristicAction": "", + "nextUpdateTime": 1602085621894 + }, + "condenastdigital.com": { + "heuristicAction": "block" + }, + "connatix.com": { + "heuristicAction": "block" + }, + "connect.ok.ru": { + "heuristicAction": "", + "nextUpdateTime": 1601990579341 + }, + "connectad.io": { + "heuristicAction": "block" + }, + "connecto.io": { + "heuristicAction": "allow" + }, + "connexity.net": { + "heuristicAction": "allow" + }, + "connextra.com": { + "heuristicAction": "block" + }, + "consent-st.trustarc.com": { + "heuristicAction": "", + "nextUpdateTime": 1601993514944 + }, + "consent.google.com": { + "heuristicAction": "cookieblock" + }, + "consent.is": { + "heuristicAction": "allow" + }, + "consent.trustarc.com": { + "heuristicAction": "", + "nextUpdateTime": 1601902285274 + }, + "consentag.eu": { + "heuristicAction": "allow" + }, + "constantcontact.com": { + "heuristicAction": "allow" + }, + "consumer.truefitcorp.com": { + "heuristicAction": "allow" + }, + "consumerreports.org": { + "heuristicAction": "allow" + }, + "contentabc.com": { + "heuristicAction": "allow" + }, + "contentexchange.me": { + "heuristicAction": "block" + }, + "contentinsights.com": { + "heuristicAction": "allow" + }, + "contentive.com": { + "heuristicAction": "allow" + }, + "contentsfeed.com": { + "heuristicAction": "block" + }, + "contentsquare.net": { + "heuristicAction": "block" + }, + "contextads.live": { + "heuristicAction": "block" + }, + "contextual.media.net": { + "heuristicAction": "", + "nextUpdateTime": 1602079811699 + }, + "contextweb.com": { + "heuristicAction": "block" + }, + "contobox.com": { + "heuristicAction": "allow" + }, + "contributor.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1602152524397 + }, + "conversantmedia.com": { + "heuristicAction": "allow" + }, + "conversionlogic.net": { + "heuristicAction": "allow" + }, + "convertkit.com": { + "heuristicAction": "allow" + }, + "convertlanguage.com": { + "heuristicAction": "allow" + }, + "convio.net": { + "heuristicAction": "allow" + }, + "coremetrics.com": { + "heuristicAction": "block" + }, + "corus.ca": { + "heuristicAction": "allow" + }, + "costco.com": { + "heuristicAction": "allow" + }, + "cotsta.ru": { + "heuristicAction": "allow" + }, + "counter.yadro.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602079868998 + }, + "coupang.com": { + "heuristicAction": "allow" + }, + "coupons.net": { + "heuristicAction": "allow" + }, + "coveo.com": { + "heuristicAction": "allow" + }, + "coxbusiness.com": { + "heuristicAction": "allow" + }, + "cpmstar.com": { + "heuristicAction": "block" + }, + "cpx.to": { + "heuristicAction": "block" + }, + "cquotient.com": { + "heuristicAction": "block" + }, + "crain.112.2o7.net": { + "heuristicAction": "cookieblock" + }, + "craommunications.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602014878244 + }, + "creative-serving.com": { + "heuristicAction": "allow" + }, + "creativecdn.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602095708225 + }, + "creativelive.com": { + "heuristicAction": "allow" + }, + "creativemarket.com": { + "heuristicAction": "allow" + }, + "crentgate.com": { + "heuristicAction": "allow" + }, + "cretgate.com": { + "heuristicAction": "allow" + }, + "criteo.com": { + "heuristicAction": "block" + }, + "crossref.matomo.cloud": { + "heuristicAction": "allow" + }, + "crsspxl.com": { + "heuristicAction": "block" + }, + "crwdcntrl.net": { + "heuristicAction": "block" + }, + "cryptobrowser.site": { + "heuristicAction": "allow" + }, + "cs.emxdgt.com": { + "heuristicAction": "", + "nextUpdateTime": 1602364516530 + }, + "cs.nakanohito.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602275724198 + }, + "cse.google.com": { + "heuristicAction": "cookieblock" + }, + "csp.yahoo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602239706221 + }, + "csus.regroup.com": { + "heuristicAction": "allow" + }, + "csync.smilewanted.com": { + "heuristicAction": "allow" + }, + "cszz.ru": { + "heuristicAction": "allow" + }, + "ct.pinterest.com": { + "heuristicAction": "", + "nextUpdateTime": 1601908512461 + }, + "cta-service-cms2.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "ctags.cn": { + "heuristicAction": "allow" + }, + "ctnsnet.com": { + "heuristicAction": "block" + }, + "ctrack.trafficjunky.net": { + "heuristicAction": "", + "nextUpdateTime": 1602211127901 + }, + "ctrip.com": { + "heuristicAction": "allow" + }, + "cts.w55c.net": { + "heuristicAction": "", + "nextUpdateTime": 1602020353458 + }, + "cuberoot.co": { + "heuristicAction": "allow" + }, + "culturaltracking.ru": { + "heuristicAction": "allow" + }, + "curalate.com": { + "heuristicAction": "block" + }, + "custhelp.com": { + "heuristicAction": "allow" + }, + "customer.io": { + "heuristicAction": "block" + }, + "custora.com": { + "heuristicAction": "block" + }, + "cvent.com": { + "heuristicAction": "allow" + }, + "cvshealth.com": { + "heuristicAction": "allow" + }, + "cxense.com": { + "heuristicAction": "block" + }, + "cyol.net": { + "heuristicAction": "allow" + }, + "d-bi.fr": { + "heuristicAction": "allow" + }, + "d-markets.net": { + "heuristicAction": "allow" + }, + "d.agkn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602306895135 + }, + "d.nativendo.de": { + "heuristicAction": "", + "nextUpdateTime": 1602203469675 + }, + "d.otaserve.net": { + "heuristicAction": "allow" + }, + "d.turn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602273365299 + }, + "d.us.criteo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602110104637 + }, + "d1af033869koo7.cloudfront.net": { + "heuristicAction": "cookieblock" + }, + "d1d3jupgwm7m5r.cloudfront.net": { + "heuristicAction": "allow" + }, + "d1dns4zpgsd7rz.cloudfront.net": { + "heuristicAction": "allow" + }, + "d1epsz32winqbo.cloudfront.net": { + "heuristicAction": "allow" + }, + "d1rv23qj5kas56.cloudfront.net": { + "heuristicAction": "allow" + }, + "d226aj4ao1t61q.cloudfront.net": { + "heuristicAction": "allow" + }, + "d2t77mnxyo7adj.cloudfront.net": { + "heuristicAction": "allow" + }, + "d32blsbofe2158.cloudfront.net": { + "heuristicAction": "allow" + }, + "d32hpx6p5we0tx.cloudfront.net": { + "heuristicAction": "allow" + }, + "d38xvr37kwwhcm.cloudfront.net": { + "heuristicAction": "allow" + }, + "d395dw5zk780j2.cloudfront.net": { + "heuristicAction": "cookieblock" + }, + "d41.co": { + "heuristicAction": "block" + }, + "d5nxst8fruw4z.cloudfront.net": { + "heuristicAction": "allow" + }, + "d9jj3mjthpub.cloudfront.net": { + "heuristicAction": "cookieblock" + }, + "dable.io": { + "heuristicAction": "block" + }, + "dadcdigital.com": { + "heuristicAction": "allow" + }, + "dadicinema.com": { + "heuristicAction": "allow" + }, + "dailymail.co.uk": { + "heuristicAction": "block" + }, + "dailymotion.com": { + "heuristicAction": "cookieblock" + }, + "dam-broadcast.com": { + "heuristicAction": "allow" + }, + "danv01ao0kdr2.cloudfront.net": { + "heuristicAction": "allow" + }, + "dapadobeproxyql.azurewebsites.net": { + "heuristicAction": "allow" + }, + "dapadobeproxytest.azurewebsites.net": { + "heuristicAction": "allow" + }, + "data.caroda.io": { + "heuristicAction": "allow" + }, + "datamind.ru": { + "heuristicAction": "allow" + }, + "dataplusmath.com": { + "heuristicAction": "allow" + }, + "dataprev.gov.br": { + "heuristicAction": "allow" + }, + "datasink.canva.sensorsdatavip.com": { + "heuristicAction": "allow" + }, + "datasteam.io": { + "heuristicAction": "allow" + }, + "datastudio.google.com": { + "heuristicAction": "cookieblock" + }, + "dataxpand.com": { + "heuristicAction": "block" + }, + "daum.net": { + "heuristicAction": "block" + }, + "dc-storm.com": { + "heuristicAction": "block" + }, + "dc-tag.jp": { + "heuristicAction": "allow" + }, + "dc.ads.linkedin.com": { + "heuristicAction": "", + "nextUpdateTime": 1602057970891 + }, + "dc.services.visualstudio.com": { + "heuristicAction": "", + "nextUpdateTime": 1602300861026 + }, + "dcmn.io": { + "heuristicAction": "allow" + }, + "dditscdn.com": { + "heuristicAction": "allow" + }, + "dditservices.com": { + "heuristicAction": "allow" + }, + "ddos-guard.net": { + "heuristicAction": "allow" + }, + "de.ioam.de": { + "heuristicAction": "", + "nextUpdateTime": 1602378579779 + }, + "de.tynt.com": { + "heuristicAction": "", + "nextUpdateTime": 1602052768098 + }, + "deadline.com": { + "heuristicAction": "allow" + }, + "deadlinefunnel.com": { + "heuristicAction": "allow" + }, + "dealerinspire.com": { + "heuristicAction": "allow" + }, + "deema.agency": { + "heuristicAction": "allow" + }, + "deep.bi": { + "heuristicAction": "allow" + }, + "deepintent.com": { + "heuristicAction": "block" + }, + "dell.com": { + "heuristicAction": "allow" + }, + "demdex.net": { + "heuristicAction": "block" + }, + "denakop.com": { + "heuristicAction": "allow" + }, + "denverpost.com": { + "heuristicAction": "allow" + }, + "deployads.com": { + "heuristicAction": "block" + }, + "deqwas.net": { + "heuristicAction": "block" + }, + "desipearl.com": { + "heuristicAction": "allow" + }, + "detik.com": { + "heuristicAction": "block" + }, + "dev.visualwebsiteoptimizer.com": { + "heuristicAction": "", + "nextUpdateTime": 1602216650289 + }, + "developers.google.com": { + "heuristicAction": "cookieblock" + }, + "dezeenjobs.com": { + "heuristicAction": "allow" + }, + "dfapvmql-q.global.ssl.fastly.net": { + "heuristicAction": "cookieblock" + }, + "dfcfw.com": { + "heuristicAction": "allow" + }, + "dhgate.com": { + "heuristicAction": "allow" + }, + "di-dtaectolog-us-prod-1.appspot.com": { + "heuristicAction": "cookieblock" + }, + "di.rlcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1601957759123 + }, + "dialogtech.com": { + "heuristicAction": "block" + }, + "diffuser-cdn.app-us1.com": { + "heuristicAction": "", + "nextUpdateTime": 1602287762831 + }, + "diginetica.net": { + "heuristicAction": "allow" + }, + "digitalaudienz.com": { + "heuristicAction": "allow" + }, + "digitalbee.al": { + "heuristicAction": "allow" + }, + "digitalbox.ru": { + "heuristicAction": "allow" + }, + "digitalfirstmedia.com": { + "heuristicAction": "allow" + }, + "digitalkites.com": { + "heuristicAction": "allow" + }, + "digitaloceanspaces.com": { + "heuristicAction": "allow" + }, + "digitalriver.com": { + "heuristicAction": "allow" + }, + "digitaltarget.ru": { + "heuristicAction": "block" + }, + "digitru.st": { + "heuristicAction": "block" + }, + "diqp43fm0w6zs.cloudfront.net": { + "heuristicAction": "allow" + }, + "discord.com": { + "heuristicAction": "allow" + }, + "display.popt.in": { + "heuristicAction": "allow" + }, + "distribuidoraliverpo.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601944420774 + }, + "districtm.ca": { + "heuristicAction": "allow" + }, + "districtm.io": { + "heuristicAction": "block" + }, + "dj.xesimg.com": { + "heuristicAction": "allow" + }, + "djiops.com": { + "heuristicAction": "allow" + }, + "dkb01.webtrekk.net": { + "heuristicAction": "", + "nextUpdateTime": 1602106992136 + }, + "dkuim.de": { + "heuristicAction": "allow" + }, + "dl1d2m8ri9v3j.cloudfront.net": { + "heuristicAction": "allow" + }, + "dmg.digitaltarget.ru": { + "heuristicAction": "", + "nextUpdateTime": 1601940466077 + }, + "dmgmediaprivacy.co.uk": { + "heuristicAction": "block" + }, + "dmm.com": { + "heuristicAction": "allow" + }, + "dmp.adform.net": { + "heuristicAction": "", + "nextUpdateTime": 1602352172322 + }, + "dmpxs.com": { + "heuristicAction": "block" + }, + "dmx.districtm.io": { + "heuristicAction": "", + "nextUpdateTime": 1602339487062 + }, + "dmxleo.com": { + "heuristicAction": "block" + }, + "docomo.ne.jp": { + "heuristicAction": "block" + }, + "docs.google.com": { + "heuristicAction": "cookieblock" + }, + "doga.cm": { + "heuristicAction": "allow" + }, + "donorbox.org": { + "heuristicAction": "allow" + }, + "dotmetrics.net": { + "heuristicAction": "block" + }, + "dotomi.com": { + "heuristicAction": "block" + }, + "doubleclick.net": { + "heuristicAction": "block" + }, + "doublepimp.com": { + "heuristicAction": "block" + }, + "douyucdn.cn": { + "heuristicAction": "allow" + }, + "dowjoneson.com": { + "heuristicAction": "block" + }, + "dpgmedia.net": { + "heuristicAction": "block" + }, + "dpm.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602295925191 + }, + "dpmsrv.com": { + "heuristicAction": "block" + }, + "dpx.airpr.com": { + "heuristicAction": "block" + }, + "drcareers.ca": { + "heuristicAction": "allow" + }, + "dreamlab.pl": { + "heuristicAction": "allow" + }, + "drive.google.com": { + "heuristicAction": "cookieblock" + }, + "dropbox.com": { + "heuristicAction": "block" + }, + "dropboxusercontent.com": { + "heuristicAction": "allow" + }, + "drtvagency.matomo.cloud": { + "heuristicAction": "allow" + }, + "ds.reson8.com": { + "heuristicAction": "", + "nextUpdateTime": 1602064407139 + }, + "dsp.com": { + "heuristicAction": "allow" + }, + "dsspn.com": { + "heuristicAction": "allow" + }, + "dsw.tt.omtrdc.net": { + "heuristicAction": "cookieblock" + }, + "dtprofit.com": { + "heuristicAction": "allow" + }, + "dtscdn.com": { + "heuristicAction": "allow" + }, + "dtscout.com": { + "heuristicAction": "block" + }, + "dttq.net": { + "heuristicAction": "allow" + }, + "duba.com": { + "heuristicAction": "allow" + }, + "dugout.com": { + "heuristicAction": "allow" + }, + "duoyi.com": { + "heuristicAction": "allow" + }, + "dw.cbsi.com": { + "heuristicAction": "allow" + }, + "dx.steelhousemedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1602027732124 + }, + "dxcdn.com": { + "heuristicAction": "allow" + }, + "dynad.net": { + "heuristicAction": "allow" + }, + "dynadot.com": { + "heuristicAction": "allow" + }, + "dynamics.com": { + "heuristicAction": "allow" + }, + "dynamicyield.com": { + "heuristicAction": "block" + }, + "dyntrk.com": { + "heuristicAction": "allow" + }, + "e-9550.adzerk.net": { + "heuristicAction": "", + "nextUpdateTime": 1602010620823 + }, + "e-contenta.com": { + "heuristicAction": "allow" + }, + "e-himart.co.kr": { + "heuristicAction": "allow" + }, + "e-planning.net": { + "heuristicAction": "block" + }, + "e.issuu.com": { + "heuristicAction": "cookieblock" + }, + "e.serverbid.com": { + "heuristicAction": "", + "nextUpdateTime": 1602043765681 + }, + "e1.emxdgt.com": { + "heuristicAction": "", + "nextUpdateTime": 1602349294120 + }, + "easemob.com": { + "heuristicAction": "allow" + }, + "eb.com": { + "heuristicAction": "allow" + }, + "eb2.3lift.com": { + "heuristicAction": "", + "nextUpdateTime": 1601953769138 + }, + "ebay.com": { + "heuristicAction": "allow" + }, + "ebayimg.com": { + "heuristicAction": "allow" + }, + "ebis.ne.jp": { + "heuristicAction": "block" + }, + "ebu.io": { + "heuristicAction": "allow" + }, + "ecbsn.com": { + "heuristicAction": "allow" + }, + "eccmp.com": { + "heuristicAction": "block" + }, + "ecdn.firstimpression.io": { + "heuristicAction": "", + "nextUpdateTime": 1601895613084 + }, + "echoban.ru": { + "heuristicAction": "allow" + }, + "ecustomeropinions.com": { + "heuristicAction": "allow" + }, + "ecwid.ru": { + "heuristicAction": "allow" + }, + "edge-cdn.net": { + "heuristicAction": "allow" + }, + "edge.quantserve.com": { + "heuristicAction": "", + "nextUpdateTime": 1602307465005 + }, + "edigitalsurvey.com": { + "heuristicAction": "allow" + }, + "editor80.com": { + "heuristicAction": "allow" + }, + "editorx.com": { + "heuristicAction": "allow" + }, + "eestatic.com": { + "heuristicAction": "allow" + }, + "effectivemeasure.net": { + "heuristicAction": "block" + }, + "egain.cloud": { + "heuristicAction": "allow" + }, + "el-mundo.net": { + "heuristicAction": "block" + }, + "eland-tech.com": { + "heuristicAction": "allow" + }, + "elfsight.com": { + "heuristicAction": "allow" + }, + "elmercurio.com": { + "heuristicAction": "allow" + }, + "eloqua.com": { + "heuristicAction": "block" + }, + "elpais.com": { + "heuristicAction": "allow" + }, + "elsevier.com": { + "heuristicAction": "block" + }, + "elsevierhealth.com": { + "heuristicAction": "allow" + }, + "eltiempo.co": { + "heuristicAction": "allow" + }, + "eltiempo.digital": { + "heuristicAction": "allow" + }, + "embedly.com": { + "heuristicAction": "allow" + }, + "emxdgt.com": { + "heuristicAction": "block" + }, + "enamad.ir": { + "heuristicAction": "block" + }, + "ename.cn": { + "heuristicAction": "allow" + }, + "engageclick.com": { + "heuristicAction": "allow" + }, + "engageya.com": { + "heuristicAction": "block" + }, + "engine.phn.doublepimp.com": { + "heuristicAction": "", + "nextUpdateTime": 1602305443129 + }, + "ens.fr": { + "heuristicAction": "allow" + }, + "ensighten.com": { + "heuristicAction": "allow" + }, + "entertainow.com": { + "heuristicAction": "allow" + }, + "entitlements.jwplayer.com": { + "heuristicAction": "cookieblock" + }, + "entrust.net": { + "heuristicAction": "allow" + }, + "envoke.com": { + "heuristicAction": "allow" + }, + "epicurious.com": { + "heuristicAction": "block" + }, + "episerver.net": { + "heuristicAction": "allow" + }, + "eqads.com": { + "heuristicAction": "allow" + }, + "equalstyle.com": { + "heuristicAction": "allow" + }, + "erepublic.com": { + "heuristicAction": "allow" + }, + "essayassist.com": { + "heuristicAction": "allow" + }, + "essayprofit.com": { + "heuristicAction": "block" + }, + "estadao-bi-ga360.appspot.com": { + "heuristicAction": "allow" + }, + "estat.com": { + "heuristicAction": "block" + }, + "etihadairways.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601940306055 + }, + "etihadairways.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602374005443 + }, + "etracker.de": { + "heuristicAction": "allow" + }, + "eu2.cdn.thunderhead.com": { + "heuristicAction": "", + "nextUpdateTime": 1602312245822 + }, + "eum-appdynamics.com": { + "heuristicAction": "block" + }, + "eus.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1601972290746 + }, + "event.insticator.com": { + "heuristicAction": "", + "nextUpdateTime": 1602130252649 + }, + "everesttech.net": { + "heuristicAction": "block" + }, + "evergage.com": { + "heuristicAction": "block" + }, + "everyaction.com": { + "heuristicAction": "cookieblock" + }, + "everzones.com": { + "heuristicAction": "allow" + }, + "evise.com": { + "heuristicAction": "allow" + }, + "evo.company": { + "heuristicAction": "allow" + }, + "evolok.net": { + "heuristicAction": "block" + }, + "evsuite.com": { + "heuristicAction": "allow" + }, + "ewrvdi.net": { + "heuristicAction": "allow" + }, + "exactag.com": { + "heuristicAction": "allow" + }, + "exacttarget.com": { + "heuristicAction": "allow" + }, + "excite.co.jp": { + "heuristicAction": "allow" + }, + "exdynsrv.com": { + "heuristicAction": "block" + }, + "exelator.com": { + "heuristicAction": "block" + }, + "exitintel.com": { + "heuristicAction": "allow" + }, + "exoclick.com": { + "heuristicAction": "block" + }, + "exosrv.com": { + "heuristicAction": "block" + }, + "exoticads.com": { + "heuristicAction": "allow" + }, + "expedia.com": { + "heuristicAction": "allow" + }, + "expediapartnercentral.com": { + "heuristicAction": "allow" + }, + "experiancs.com": { + "heuristicAction": "allow" + }, + "expertrec.com": { + "heuristicAction": "allow" + }, + "exponea.com": { + "heuristicAction": "block" + }, + "eyeota.net": { + "heuristicAction": "block" + }, + "eyereturn.com": { + "heuristicAction": "block" + }, + "ezoic.net": { + "heuristicAction": "block" + }, + "f.convertkit.com": { + "heuristicAction": "allow" + }, + "f1272serve.xyz": { + "heuristicAction": "allow" + }, + "f5.com": { + "heuristicAction": "allow" + }, + "f5networks.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602305082923 + }, + "f5networks.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602114980021 + }, + "fabled.com": { + "heuristicAction": "allow" + }, + "facebook.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601894588684 + }, + "fairfaxregional.com.au": { + "heuristicAction": "allow" + }, + "faisys.com": { + "heuristicAction": "allow" + }, + "famousbirthdays-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1601877671741 + }, + "fanduel.pxf.io": { + "heuristicAction": "allow" + }, + "fang.com": { + "heuristicAction": "allow" + }, + "farfetch-contents.com": { + "heuristicAction": "allow" + }, + "farfetch.net": { + "heuristicAction": "allow" + }, + "faromen.online": { + "heuristicAction": "allow" + }, + "fastapi.net": { + "heuristicAction": "allow" + }, + "fastcounter.de": { + "heuristicAction": "allow" + }, + "fastlane.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602217867653 + }, + "fbc.wcfbc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602112890625 + }, + "fcglcdn.com": { + "heuristicAction": "allow" + }, + "feathr.co": { + "heuristicAction": "block" + }, + "feedburner.google.com": { + "heuristicAction": "cookieblock" + }, + "feedify.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602289571761 + }, + "feedproxy.google.com": { + "heuristicAction": "cookieblock" + }, + "feeds.soundcloud.com": { + "heuristicAction": "cookieblock" + }, + "felmat.net": { + "heuristicAction": "allow" + }, + "fengimg.com": { + "heuristicAction": "allow" + }, + "fengkongcloud.com": { + "heuristicAction": "allow" + }, + "ferret-one.com": { + "heuristicAction": "allow" + }, + "ffmapi.com": { + "heuristicAction": "allow" + }, + "fieldtest.cc": { + "heuristicAction": "allow" + }, + "filmibeat.com": { + "heuristicAction": "allow" + }, + "finam.ru": { + "heuristicAction": "allow" + }, + "financialjuice.com": { + "heuristicAction": "allow" + }, + "finder.com.au": { + "heuristicAction": "allow" + }, + "firebaselogging.googleapis.com": { + "heuristicAction": "cookieblock" + }, + "firstimpression.io": { + "heuristicAction": "block" + }, + "fiverr.com": { + "heuristicAction": "allow" + }, + "fivetran.com": { + "heuristicAction": "allow" + }, + "fkw.com": { + "heuristicAction": "allow" + }, + "flashtalking.com": { + "heuristicAction": "block" + }, + "flipp.com": { + "heuristicAction": "allow" + }, + "flocktory.com": { + "heuristicAction": "block" + }, + "flowtype.press": { + "heuristicAction": "allow" + }, + "fls.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602298978063 + }, + "flw.li": { + "heuristicAction": "allow" + }, + "focas.jp": { + "heuristicAction": "allow" + }, + "fontplus.jp": { + "heuristicAction": "allow" + }, + "fonts.google.com": { + "heuristicAction": "cookieblock" + }, + "fooby.ch": { + "heuristicAction": "allow" + }, + "foodnetwork.com": { + "heuristicAction": "allow" + }, + "force.com": { + "heuristicAction": "cookieblock" + }, + "foreks.com": { + "heuristicAction": "allow" + }, + "foresee.com": { + "heuristicAction": "allow" + }, + "forms.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "formstack.io": { + "heuristicAction": "allow" + }, + "fospha.com": { + "heuristicAction": "allow" + }, + "foursquare.com": { + "heuristicAction": "allow" + }, + "fout.jp": { + "heuristicAction": "block" + }, + "fox.com": { + "heuristicAction": "allow" + }, + "foxycart.com": { + "heuristicAction": "allow" + }, + "fp-cdn.azureedge.net": { + "heuristicAction": "cookieblock" + }, + "fppressa.ru": { + "heuristicAction": "allow" + }, + "franecki.net": { + "heuristicAction": "block", + "nextUpdateTime": 1601943091186 + }, + "franeski.net": { + "heuristicAction": "allow" + }, + "freelancer.com": { + "heuristicAction": "allow" + }, + "freeskreen.com": { + "heuristicAction": "block" + }, + "freespee.com": { + "heuristicAction": "allow" + }, + "freevisitorcounters.com": { + "heuristicAction": "allow" + }, + "freshchat.com": { + "heuristicAction": "cookieblock" + }, + "freshdesk.com": { + "heuristicAction": "allow" + }, + "freshrelevance.com": { + "heuristicAction": "allow" + }, + "fresnobee.com": { + "heuristicAction": "allow" + }, + "friendbuy.com": { + "heuristicAction": "allow" + }, + "frosmo.com": { + "heuristicAction": "allow" + }, + "fstrk.net": { + "heuristicAction": "allow" + }, + "fujitsu-webmart.com": { + "heuristicAction": "allow" + }, + "fundingchoicesmessages.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1601995078989 + }, + "fundraiseup.com": { + "heuristicAction": "allow" + }, + "fusiontables.google.com": { + "heuristicAction": "cookieblock" + }, + "fwmrm.net": { + "heuristicAction": "block" + }, + "fx678img.com": { + "heuristicAction": "allow" + }, + "fxgate.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602267253256 + }, + "fyi-marketing.com": { + "heuristicAction": "allow" + }, + "fyrsbckgi-c.global.ssl.fastly.net": { + "heuristicAction": "cookieblock" + }, + "g.3gl.net": { + "heuristicAction": "", + "nextUpdateTime": 1602335264413 + }, + "g.cn.miaozhen.com": { + "heuristicAction": "", + "nextUpdateTime": 1602062702205 + }, + "g.ezoic.net": { + "heuristicAction": "", + "nextUpdateTime": 1601926536970 + }, + "g2.gumgum.com": { + "heuristicAction": "", + "nextUpdateTime": 1602082400987 + }, + "gadasource.storage.googleapis.com": { + "heuristicAction": "cookieblock" + }, + "gamania.com": { + "heuristicAction": "allow" + }, + "gameanalytics.dev": { + "heuristicAction": "allow" + }, + "gammaplatform.com": { + "heuristicAction": "block" + }, + "gannett-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602095868386 + }, + "garanti.com.tr": { + "heuristicAction": "allow" + }, + "gars.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602151845116 + }, + "gator.io": { + "heuristicAction": "allow" + }, + "gatr.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602181888460 + }, + "gaua.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602237830028 + }, + "gaug.es": { + "heuristicAction": "allow" + }, + "gazeta.pl": { + "heuristicAction": "allow" + }, + "gcimetrics.com": { + "heuristicAction": "allow" + }, + "gd.gov.cn": { + "heuristicAction": "allow" + }, + "gdz.work": { + "heuristicAction": "allow" + }, + "geekbuying.com": { + "heuristicAction": "allow" + }, + "geetest.com": { + "heuristicAction": "cookieblock" + }, + "geilicdn.com": { + "heuristicAction": "allow" + }, + "geistm.com": { + "heuristicAction": "block" + }, + "gelbmann.info": { + "heuristicAction": "allow" + }, + "geminimedia-eg.com": { + "heuristicAction": "allow" + }, + "gemius.pl": { + "heuristicAction": "block" + }, + "generaltracking.de": { + "heuristicAction": "allow" + }, + "genieesspv.jp": { + "heuristicAction": "allow" + }, + "geniusmonkey.com": { + "heuristicAction": "allow" + }, + "geofli.com": { + "heuristicAction": "allow" + }, + "geoip.insticator.com": { + "heuristicAction": "", + "nextUpdateTime": 1602061367261 + }, + "geotrust.com": { + "heuristicAction": "allow" + }, + "get4click.ru": { + "heuristicAction": "allow" + }, + "getadmiral.com": { + "heuristicAction": "allow" + }, + "getapp.com": { + "heuristicAction": "allow" + }, + "getblue.io": { + "heuristicAction": "allow" + }, + "getblueshift.com": { + "heuristicAction": "block" + }, + "getclicky.com": { + "heuristicAction": "block" + }, + "getcreditone.com": { + "heuristicAction": "allow" + }, + "getdrip.com": { + "heuristicAction": "block" + }, + "getletterpress.com": { + "heuristicAction": "block" + }, + "getnshow.com": { + "heuristicAction": "allow" + }, + "getrockerbox.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601911242469 + }, + "getsmartcontent.com": { + "heuristicAction": "allow" + }, + "getway.biz": { + "heuristicAction": "allow" + }, + "gg.faromen.online": { + "heuristicAction": "allow" + }, + "gh-base.com": { + "heuristicAction": "allow" + }, + "ghb.adtelligent.com": { + "heuristicAction": "", + "nextUpdateTime": 1601993374434 + }, + "ghmtr.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1601977732129 + }, + "gigazine.asia": { + "heuristicAction": "allow" + }, + "gigya.com": { + "heuristicAction": "cookieblock" + }, + "gimp.org": { + "heuristicAction": "allow" + }, + "giraff.io": { + "heuristicAction": "block" + }, + "gitee.com": { + "heuristicAction": "allow" + }, + "github.com": { + "heuristicAction": "allow" + }, + "gixioanalytics.com": { + "heuristicAction": "allow" + }, + "gjirafa.com": { + "heuristicAction": "allow" + }, + "glamour.com": { + "heuristicAction": "block" + }, + "glassboxdigital.io": { + "heuristicAction": "block" + }, + "glassdoor.com": { + "heuristicAction": "allow" + }, + "gleam.io": { + "heuristicAction": "block" + }, + "global-e.com": { + "heuristicAction": "allow" + }, + "globalwebindex.net": { + "heuristicAction": "block" + }, + "globo.com": { + "heuristicAction": "allow" + }, + "gmossp-sp.jp": { + "heuristicAction": "block" + }, + "go.activecalendar.com": { + "heuristicAction": "allow" + }, + "go.bebi.com": { + "heuristicAction": "block" + }, + "go.com": { + "heuristicAction": "block" + }, + "go.ezoic.net": { + "heuristicAction": "", + "nextUpdateTime": 1602149490039 + }, + "godaddy.com": { + "heuristicAction": "block" + }, + "goepson.com": { + "heuristicAction": "allow" + }, + "gogocdn.net": { + "heuristicAction": "allow" + }, + "goinflow.com": { + "heuristicAction": "allow" + }, + "goo.ne.jp": { + "heuristicAction": "allow" + }, + "google-analytics.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602152953782 + }, + "google.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602051816434 + }, + "google.com.pk": { + "heuristicAction": "allow" + }, + "googleads.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601934731697 + }, + "googleadservices.com": { + "heuristicAction": "allow" + }, + "goop.com": { + "heuristicAction": "allow" + }, + "gosuslugi.ru": { + "heuristicAction": "allow" + }, + "gotprofits.com": { + "heuristicAction": "allow" + }, + "goutee.top": { + "heuristicAction": "allow" + }, + "governing.com": { + "heuristicAction": "allow" + }, + "gq.com": { + "heuristicAction": "block" + }, + "grahammedia-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602383448244 + }, + "graizoah.com": { + "heuristicAction": "allow" + }, + "gravito.net": { + "heuristicAction": "allow" + }, + "grctech.com": { + "heuristicAction": "allow" + }, + "green-red.com": { + "heuristicAction": "allow" + }, + "grid.bidswitch.net": { + "heuristicAction": "", + "nextUpdateTime": 1601990443489 + }, + "gridsumdissector.com": { + "heuristicAction": "block" + }, + "groovinads.com": { + "heuristicAction": "block" + }, + "group-ib.ru": { + "heuristicAction": "allow" + }, + "groupondata.com": { + "heuristicAction": "allow" + }, + "groups.google.com": { + "heuristicAction": "cookieblock" + }, + "growingio.com": { + "heuristicAction": "block" + }, + "grumft.com": { + "heuristicAction": "allow" + }, + "grupaonet.pl": { + "heuristicAction": "allow" + }, + "grupapino.pl": { + "heuristicAction": "allow" + }, + "grupoelcorteingles.es": { + "heuristicAction": "allow" + }, + "gsoi.fr": { + "heuristicAction": "allow" + }, + "gsspat.jp": { + "heuristicAction": "block" + }, + "gssprt.jp": { + "heuristicAction": "block" + }, + "gtags.net": { + "heuristicAction": "block" + }, + "guess.mediav.com": { + "heuristicAction": "", + "nextUpdateTime": 1601919942237 + }, + "gum.criteo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602237556932 + }, + "gumgum.com": { + "heuristicAction": "block" + }, + "guoshipartners.com": { + "heuristicAction": "allow" + }, + "gwdg.de": { + "heuristicAction": "allow" + }, + "gwmtracking.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602203373944 + }, + "h.online-metrix.net": { + "heuristicAction": "", + "nextUpdateTime": 1601979507397 + }, + "haaretz.co.il": { + "heuristicAction": "allow" + }, + "hactar.is": { + "heuristicAction": "allow" + }, + "hainanfp.com": { + "heuristicAction": "allow" + }, + "halfclub.com": { + "heuristicAction": "allow" + }, + "hanmaker.com": { + "heuristicAction": "allow" + }, + "hao123.com": { + "heuristicAction": "allow" + }, + "hao123img.com": { + "heuristicAction": "allow" + }, + "harrisinteractive.eu": { + "heuristicAction": "allow" + }, + "hasbroapps.com": { + "heuristicAction": "allow" + }, + "hatena.ne.jp": { + "heuristicAction": "allow" + }, + "hb-api.omnitagjs.com": { + "heuristicAction": "", + "nextUpdateTime": 1602354917196 + }, + "hb.adscale.de": { + "heuristicAction": "", + "nextUpdateTime": 1602056789456 + }, + "hb.districtm.io": { + "heuristicAction": "", + "nextUpdateTime": 1602034880855 + }, + "hb.emxdgt.com": { + "heuristicAction": "", + "nextUpdateTime": 1602321299708 + }, + "hb.hb.selectmedia.asia": { + "heuristicAction": "allow" + }, + "hb.undertone.com": { + "heuristicAction": "", + "nextUpdateTime": 1602205722690 + }, + "hbabit.com": { + "heuristicAction": "allow" + }, + "hbc.com": { + "heuristicAction": "allow" + }, + "hbopenbid.pubmatic.com": { + "heuristicAction": "", + "nextUpdateTime": 1602166340014 + }, + "hbx.media.net": { + "heuristicAction": "", + "nextUpdateTime": 1601933742853 + }, + "hcaptcha.com": { + "heuristicAction": "allow" + }, + "headbidder.net": { + "heuristicAction": "allow" + }, + "healthunlocked.com": { + "heuristicAction": "allow" + }, + "heapanalytics.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602078647969 + }, + "hellorf.com": { + "heuristicAction": "allow" + }, + "helpdaohang1.ksmobile.com": { + "heuristicAction": "allow" + }, + "heraldm.com": { + "heuristicAction": "allow" + }, + "hexagon-analytics.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601839741096 + }, + "hgbn.network": { + "heuristicAction": "allow" + }, + "hgtv.com": { + "heuristicAction": "block" + }, + "hhcdn.ru": { + "heuristicAction": "allow" + }, + "highlow.net": { + "heuristicAction": "allow" + }, + "highwire.org": { + "heuristicAction": "block" + }, + "hihainan.info": { + "heuristicAction": "allow" + }, + "hiido.com": { + "heuristicAction": "block" + }, + "hilton.com": { + "heuristicAction": "allow" + }, + "hindustantimes.com": { + "heuristicAction": "block" + }, + "hinet.net": { + "heuristicAction": "allow" + }, + "hiphotos.baidu.com": { + "heuristicAction": "cookieblock" + }, + "histats.com": { + "heuristicAction": "block" + }, + "hitslink.com": { + "heuristicAction": "allow" + }, + "hive.co": { + "heuristicAction": "allow" + }, + "hket.com": { + "heuristicAction": "allow" + }, + "hketgroup.com": { + "heuristicAction": "allow" + }, + "hlserve.com": { + "heuristicAction": "allow" + }, + "hm.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1601900616410 + }, + "hmhost.co.uk": { + "heuristicAction": "allow" + }, + "holder.com.ua": { + "heuristicAction": "block" + }, + "holmesmind.com": { + "heuristicAction": "allow" + }, + "homeway.com.cn": { + "heuristicAction": "allow" + }, + "hosted-inin.com": { + "heuristicAction": "allow" + }, + "hot-mob.com": { + "heuristicAction": "allow" + }, + "hotelscombined.com": { + "heuristicAction": "allow" + }, + "hotwire.com": { + "heuristicAction": "allow" + }, + "hq3x.com": { + "heuristicAction": "allow" + }, + "hr.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602129775791 + }, + "hsbc.com.hk": { + "heuristicAction": "allow" + }, + "htcvive.com": { + "heuristicAction": "allow" + }, + "htlb.casalemedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1602024321704 + }, + "hton.com.cn": { + "heuristicAction": "allow" + }, + "hubpd.com": { + "heuristicAction": "allow" + }, + "hubspot.com": { + "heuristicAction": "block" + }, + "hujiang.com": { + "heuristicAction": "allow" + }, + "hulu.com": { + "heuristicAction": "allow" + }, + "huluqa.com": { + "heuristicAction": "allow" + }, + "humcommerce.com": { + "heuristicAction": "allow" + }, + "hurpass.com": { + "heuristicAction": "allow" + }, + "hushly.com": { + "heuristicAction": "block" + }, + "hybrid.ai": { + "heuristicAction": "block" + }, + "hyros.com": { + "heuristicAction": "allow" + }, + "i-mobile.co.jp": { + "heuristicAction": "block" + }, + "i.connectad.io": { + "heuristicAction": "", + "nextUpdateTime": 1601950923438 + }, + "i.prcdn.co": { + "heuristicAction": "", + "nextUpdateTime": 1602142939005 + }, + "i.ua": { + "heuristicAction": "allow" + }, + "i115008.net": { + "heuristicAction": "allow" + }, + "i347961.net": { + "heuristicAction": "allow" + }, + "iadvize.com": { + "heuristicAction": "block" + }, + "iasds01.com": { + "heuristicAction": "allow" + }, + "ib-ibi.com": { + "heuristicAction": "allow" + }, + "ib.adnxs.com": { + "heuristicAction": "", + "nextUpdateTime": 1602058704649 + }, + "ibclick.stream": { + "heuristicAction": "block", + "nextUpdateTime": 1602067793428 + }, + "ibillboard.com": { + "heuristicAction": "allow" + }, + "ibt.com": { + "heuristicAction": "allow" + }, + "ice.360yield.com": { + "heuristicAction": "", + "nextUpdateTime": 1602257154062 + }, + "icon.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602060496911 + }, + "iconmedia.containers.piwik.pro": { + "heuristicAction": "", + "nextUpdateTime": 1602136201860 + }, + "iconnode.com": { + "heuristicAction": "allow" + }, + "id5-sync.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601847755643 + }, + "idealmedia.io": { + "heuristicAction": "allow" + }, + "ideaplus.mk": { + "heuristicAction": "allow" + }, + "idio.co": { + "heuristicAction": "block" + }, + "idsync.rlcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1601893974937 + }, + "idx.liadm.com": { + "heuristicAction": "", + "nextUpdateTime": 1602207345216 + }, + "iesnare.com": { + "heuristicAction": "block" + }, + "ign.com": { + "heuristicAction": "allow" + }, + "igodigital.com": { + "heuristicAction": "block" + }, + "iheart.com": { + "heuristicAction": "allow" + }, + "iherb.com": { + "heuristicAction": "allow" + }, + "ijento.com": { + "heuristicAction": "allow" + }, + "iljmp.com": { + "heuristicAction": "allow" + }, + "im-apps.net": { + "heuristicAction": "block" + }, + "image2.pubmatic.com": { + "heuristicAction": "", + "nextUpdateTime": 1602002545841 + }, + "image8.pubmatic.com": { + "heuristicAction": "", + "nextUpdateTime": 1601943701706 + }, + "imagesrv.adition.com": { + "heuristicAction": "cookieblock" + }, + "imedao.com": { + "heuristicAction": "allow" + }, + "imedia.cz": { + "heuristicAction": "block" + }, + "img-fotki.yandex.ru": { + "heuristicAction": "cookieblock" + }, + "img.ak.impact-ad.jp": { + "heuristicAction": "", + "nextUpdateTime": 1601914355849 + }, + "img.youtube.com": { + "heuristicAction": "cookieblock" + }, + "img1.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602277301385 + }, + "imgm5.cnmo-img.com.cn": { + "heuristicAction": "allow" + }, + "imgsa.baidu.com": { + "heuristicAction": "cookieblock" + }, + "imgsrc.baidu.com": { + "heuristicAction": "cookieblock" + }, + "imhd.io": { + "heuristicAction": "block" + }, + "imi.chat": { + "heuristicAction": "allow" + }, + "impact-ad.jp": { + "heuristicAction": "block" + }, + "impact.com": { + "heuristicAction": "allow" + }, + "implishing.club": { + "heuristicAction": "block", + "nextUpdateTime": 1602190394831 + }, + "impression.link": { + "heuristicAction": "allow" + }, + "imrworldwide.com": { + "heuristicAction": "block" + }, + "imspublishergroup.com": { + "heuristicAction": "allow" + }, + "in-page-push.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602158534716 + }, + "in.wzrkt.com": { + "heuristicAction": "", + "nextUpdateTime": 1601988518138 + }, + "in.xspadvertising.com": { + "heuristicAction": "", + "nextUpdateTime": 1602193965892 + }, + "inbenta.com": { + "heuristicAction": "allow" + }, + "indacolive.com": { + "heuristicAction": "allow" + }, + "indapass.hu": { + "heuristicAction": "allow" + }, + "indeed.com": { + "heuristicAction": "allow" + }, + "india.com": { + "heuristicAction": "allow" + }, + "indianexpress.com": { + "heuristicAction": "allow" + }, + "indoleads.com": { + "heuristicAction": "allow" + }, + "infeed.id": { + "heuristicAction": "block" + }, + "infinigrow.com": { + "heuristicAction": "allow" + }, + "infinity-tracking.net": { + "heuristicAction": "block" + }, + "infolinks.com": { + "heuristicAction": "allow" + }, + "informer.yandex.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602205708201 + }, + "informz.net": { + "heuristicAction": "block" + }, + "infosys.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601970262601 + }, + "infusionsoft.app": { + "heuristicAction": "allow" + }, + "infusionsoft.com": { + "heuristicAction": "allow" + }, + "ingage.tech": { + "heuristicAction": "allow" + }, + "ingrammicro.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602072736093 + }, + "injapan.com": { + "heuristicAction": "allow" + }, + "inmobi.net": { + "heuristicAction": "allow" + }, + "inmoment.com": { + "heuristicAction": "allow" + }, + "innity.com": { + "heuristicAction": "block" + }, + "innocraft.cloud": { + "heuristicAction": "allow" + }, + "innogamescdn.com": { + "heuristicAction": "allow" + }, + "innologica.com": { + "heuristicAction": "allow" + }, + "innovid.com": { + "heuristicAction": "block" + }, + "inpagepush.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602274122689 + }, + "inpwrd.net": { + "heuristicAction": "allow" + }, + "inq.com": { + "heuristicAction": "cookieblock" + }, + "insent.ai": { + "heuristicAction": "allow" + }, + "inside-graph.com": { + "heuristicAction": "block" + }, + "insider.com": { + "heuristicAction": "allow" + }, + "insight.adsrvr.org": { + "heuristicAction": "", + "nextUpdateTime": 1602017675765 + }, + "insightexpressai.com": { + "heuristicAction": "block" + }, + "instabot.io": { + "heuristicAction": "allow" + }, + "instagram.com": { + "heuristicAction": "cookieblock" + }, + "insticator.com": { + "heuristicAction": "block" + }, + "insurads.com": { + "heuristicAction": "block" + }, + "intellitxt.com": { + "heuristicAction": "allow" + }, + "intent-apps.com": { + "heuristicAction": "allow" + }, + "intent.ai": { + "heuristicAction": "allow" + }, + "intentiq.com": { + "heuristicAction": "block" + }, + "intentmedia.net": { + "heuristicAction": "block" + }, + "intentsify.io": { + "heuristicAction": "allow" + }, + "intergient.com": { + "heuristicAction": "block" + }, + "internetbrands.com": { + "heuristicAction": "block" + }, + "intljs.rmtag.com": { + "heuristicAction": "", + "nextUpdateTime": 1602006223363 + }, + "investingchannel.com": { + "heuristicAction": "cookieblock" + }, + "investis.com": { + "heuristicAction": "block" + }, + "investorwords.com": { + "heuristicAction": "allow" + }, + "invl.co": { + "heuristicAction": "allow" + }, + "invttjs.com.br": { + "heuristicAction": "allow" + }, + "ioam.de": { + "heuristicAction": "block" + }, + "iocnt.net": { + "heuristicAction": "block" + }, + "ip-label.net": { + "heuristicAction": "allow" + }, + "ipac.ctnsnet.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602051374101 + }, + "ipchaxun.com": { + "heuristicAction": "allow" + }, + "iperceptions.com": { + "heuristicAction": "block" + }, + "ipgeolocation.io": { + "heuristicAction": "allow" + }, + "ipify.org": { + "heuristicAction": "allow" + }, + "ipinyou.com": { + "heuristicAction": "allow" + }, + "ipredictive.com": { + "heuristicAction": "block" + }, + "ipvanish.com": { + "heuristicAction": "allow" + }, + "iqair-international.myshopify.com": { + "heuristicAction": "allow" + }, + "iqoption.com": { + "heuristicAction": "allow" + }, + "irs.tools.investis.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602185835514 + }, + "irs03.com": { + "heuristicAction": "block" + }, + "isanook.com": { + "heuristicAction": "allow" + }, + "islamist-movements.com": { + "heuristicAction": "allow" + }, + "ispot.tv": { + "heuristicAction": "block" + }, + "issuu.com": { + "heuristicAction": "cookieblock" + }, + "istruzione.it": { + "heuristicAction": "allow" + }, + "iteratehq.com": { + "heuristicAction": "block" + }, + "itmedia.co.jp": { + "heuristicAction": "allow" + }, + "itmedia.jp": { + "heuristicAction": "allow" + }, + "ivcbrasil.org.br": { + "heuristicAction": "block" + }, + "ivideosmart.com": { + "heuristicAction": "block" + }, + "ivx.cn": { + "heuristicAction": "allow" + }, + "ixiaa.com": { + "heuristicAction": "allow" + }, + "izooto.com": { + "heuristicAction": "block" + }, + "j.6sc.co": { + "heuristicAction": "", + "nextUpdateTime": 1602031048697 + }, + "jabmo.app": { + "heuristicAction": "allow" + }, + "jads.co": { + "heuristicAction": "allow" + }, + "jadserve.postrelease.com": { + "heuristicAction": "", + "nextUpdateTime": 1602376568598 + }, + "janrainsso.com": { + "heuristicAction": "block" + }, + "jassfederal.ch": { + "heuristicAction": "allow" + }, + "jd.com": { + "heuristicAction": "allow" + }, + "jhu.edu": { + "heuristicAction": "allow" + }, + "jilt.com": { + "heuristicAction": "allow" + }, + "jiosaavn.com": { + "heuristicAction": "allow" + }, + "jivosite.com": { + "heuristicAction": "allow" + }, + "jixie.io": { + "heuristicAction": "allow" + }, + "jnqsge.net": { + "heuristicAction": "allow" + }, + "jobat.be": { + "heuristicAction": "allow" + }, + "jobs.thejobnetwork.com": { + "heuristicAction": "allow" + }, + "journalmedia.ie": { + "heuristicAction": "allow" + }, + "jrs5.com": { + "heuristicAction": "allow" + }, + "js.adscale.de": { + "heuristicAction": "", + "nextUpdateTime": 1602013246334 + }, + "js.adsrvr.org": { + "heuristicAction": "", + "nextUpdateTime": 1602367042150 + }, + "js.agkn.com": { + "heuristicAction": "", + "nextUpdateTime": 1601879971284 + }, + "js.center.io": { + "heuristicAction": "allow" + }, + "js.gleam.io": { + "heuristicAction": "", + "nextUpdateTime": 1601961463103 + }, + "js.gumgum.com": { + "heuristicAction": "", + "nextUpdateTime": 1602245489700 + }, + "js.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "js.matheranalytics.com": { + "dnt": true, + "heuristicAction": "", + "nextUpdateTime": 1602130658236 + }, + "js.rating-widget.com": { + "heuristicAction": "allow" + }, + "js.rfp.fout.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602064806470 + }, + "jsc.adskeeper.co.uk": { + "heuristicAction": "", + "nextUpdateTime": 1601936670745 + }, + "jsc.lentainform.com": { + "heuristicAction": "", + "nextUpdateTime": 1601942393057 + }, + "jsc.mgid.com": { + "heuristicAction": "", + "nextUpdateTime": 1601984865895 + }, + "jschina.com.cn": { + "heuristicAction": "allow" + }, + "jsdelivr.net": { + "heuristicAction": "cookieblock" + }, + "jsn.24smi.net": { + "heuristicAction": "allow" + }, + "jsrdn.com": { + "heuristicAction": "block" + }, + "juicyads.com": { + "heuristicAction": "allow" + }, + "justpremium.com": { + "heuristicAction": "block" + }, + "jwplayer.com": { + "heuristicAction": "block" + }, + "jwpltx.com": { + "heuristicAction": "cookieblock" + }, + "jxtrackers.azurewebsites.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602237469796 + }, + "kaipuyun.cn": { + "heuristicAction": "block" + }, + "kaixin001.com.cn": { + "heuristicAction": "allow" + }, + "kakao.com": { + "heuristicAction": "allow" + }, + "kameleoon.eu": { + "heuristicAction": "block" + }, + "kampyle.com": { + "heuristicAction": "allow" + }, + "kanade-ad.net": { + "heuristicAction": "allow" + }, + "kaprila.com": { + "heuristicAction": "block" + }, + "kaptcha.com": { + "heuristicAction": "block" + }, + "kargo.com": { + "heuristicAction": "block" + }, + "karpishe.com": { + "heuristicAction": "allow" + }, + "kartra.com": { + "heuristicAction": "allow" + }, + "kaspersky-labs.com": { + "heuristicAction": "allow" + }, + "kaxsdc.com": { + "heuristicAction": "allow" + }, + "kayak.com": { + "heuristicAction": "allow" + }, + "kcsfile.com": { + "heuristicAction": "allow" + }, + "kexin001.com": { + "heuristicAction": "allow" + }, + "keybank.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601920825832 + }, + "keybank.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601946937119 + }, + "keybankassociation.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602080701126 + }, + "keywee.co": { + "heuristicAction": "block" + }, + "kf5.com": { + "heuristicAction": "allow" + }, + "kh.google.com": { + "heuristicAction": "cookieblock" + }, + "khms0.google.com": { + "heuristicAction": "cookieblock" + }, + "khms1.google.com": { + "heuristicAction": "cookieblock" + }, + "khms2.google.com": { + "heuristicAction": "cookieblock" + }, + "khms3.google.com": { + "heuristicAction": "cookieblock" + }, + "khms4.google.com": { + "heuristicAction": "cookieblock" + }, + "kinsta.com": { + "heuristicAction": "allow" + }, + "kivpro.com": { + "heuristicAction": "allow" + }, + "kl-youniverse.com": { + "heuristicAction": "block" + }, + "klangoo.com": { + "heuristicAction": "allow" + }, + "klarnaservices.com": { + "heuristicAction": "allow" + }, + "klarnauserservices.com": { + "heuristicAction": "allow" + }, + "kleecks.com": { + "heuristicAction": "allow" + }, + "klick2contact.com": { + "heuristicAction": "allow" + }, + "knet.cn": { + "heuristicAction": "block" + }, + "knnlab.com": { + "heuristicAction": "allow" + }, + "knotch.it": { + "heuristicAction": "allow" + }, + "koddi.com": { + "heuristicAction": "allow" + }, + "kompas.com": { + "heuristicAction": "block" + }, + "kooora.ws": { + "heuristicAction": "allow" + }, + "kpcdn.net": { + "heuristicAction": "allow" + }, + "kraken.com": { + "heuristicAction": "allow" + }, + "krxd.net": { + "heuristicAction": "block" + }, + "ksmobile.com": { + "heuristicAction": "allow" + }, + "kwanzoo.com": { + "heuristicAction": "allow" + }, + "labocleo.org": { + "heuristicAction": "allow" + }, + "labs.google.com": { + "heuristicAction": "cookieblock" + }, + "ladbible.com": { + "heuristicAction": "allow" + }, + "ladsp.com": { + "heuristicAction": "block" + }, + "lan.com": { + "heuristicAction": "allow" + }, + "landc.co.uk": { + "heuristicAction": "allow" + }, + "landsend.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602240776449 + }, + "lasteventf-tm.everesttech.net": { + "heuristicAction": "", + "nextUpdateTime": 1601970932797 + }, + "latinongroup.com": { + "heuristicAction": "allow" + }, + "leadexpert.pl": { + "heuristicAction": "allow" + }, + "leadlab.click": { + "heuristicAction": "allow" + }, + "leadlander.com": { + "heuristicAction": "block" + }, + "leadquizzes.com": { + "heuristicAction": "allow" + }, + "leadspace.com": { + "heuristicAction": "allow" + }, + "leadsrx.com": { + "heuristicAction": "allow" + }, + "leady.com": { + "heuristicAction": "allow" + }, + "leafly.ca": { + "heuristicAction": "allow" + }, + "ledger.com": { + "heuristicAction": "allow" + }, + "leju.com": { + "heuristicAction": "allow" + }, + "lemnisk.co": { + "heuristicAction": "allow" + }, + "lennyletter.com": { + "heuristicAction": "block" + }, + "lenovo.com": { + "heuristicAction": "allow" + }, + "lentainform.com": { + "heuristicAction": "block" + }, + "letv.com": { + "heuristicAction": "allow" + }, + "lexmark.d2.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601950960219 + }, + "lexmark.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602009697216 + }, + "lfeeder.com": { + "heuristicAction": "allow" + }, + "liadm.com": { + "heuristicAction": "block" + }, + "libs.coremetrics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602121256610 + }, + "liebao.cn": { + "heuristicAction": "allow" + }, + "lietou-static.com": { + "heuristicAction": "allow" + }, + "lightboxcdn.com": { + "heuristicAction": "block" + }, + "lightinthebox.com": { + "heuristicAction": "allow" + }, + "lijit.com": { + "heuristicAction": "block" + }, + "likeevideo.com": { + "heuristicAction": "allow" + }, + "likr.com.tw": { + "heuristicAction": "block" + }, + "line.me": { + "heuristicAction": "block" + }, + "linkback.contentsfeed.com": { + "heuristicAction": "", + "nextUpdateTime": 1601961218192 + }, + "linkconnector.com": { + "heuristicAction": "block" + }, + "linkedin.com": { + "heuristicAction": "block" + }, + "linker.hr": { + "heuristicAction": "allow" + }, + "linkonlineworld.com": { + "heuristicAction": "allow" + }, + "linkprice.com": { + "heuristicAction": "allow" + }, + "linksynergy.com": { + "heuristicAction": "block" + }, + "list-manage.com": { + "heuristicAction": "cookieblock" + }, + "listrakbi.com": { + "heuristicAction": "block" + }, + "literatumonline.com": { + "heuristicAction": "allow" + }, + "liuzhuni.com": { + "heuristicAction": "allow" + }, + "live2support.com": { + "heuristicAction": "allow" + }, + "livechatinc.com": { + "heuristicAction": "cookieblock" + }, + "livejasmin.com": { + "heuristicAction": "allow" + }, + "liveperson.net": { + "heuristicAction": "cookieblock" + }, + "liverpool.demdex.net.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602381421777 + }, + "livetex.me": { + "heuristicAction": "allow" + }, + "livetex.ru": { + "heuristicAction": "allow" + }, + "lkqd.net": { + "heuristicAction": "block" + }, + "lmiutil.com": { + "heuristicAction": "allow" + }, + "lndata.com": { + "heuristicAction": "allow" + }, + "load.sumo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602042602464 + }, + "loadercdn.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602225591817 + }, + "loadus.exelator.com": { + "heuristicAction": "", + "nextUpdateTime": 1602226276007 + }, + "loc.gov": { + "heuristicAction": "allow" + }, + "localytics.com": { + "heuristicAction": "allow" + }, + "lockerdome.com": { + "heuristicAction": "allow" + }, + "log.pinterest.com": { + "heuristicAction": "", + "nextUpdateTime": 1602213847671 + }, + "logger.co.kr": { + "heuristicAction": "allow" + }, + "login.dotomi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602037890996 + }, + "loginfra.com": { + "heuristicAction": "allow" + }, + "loginhood.io": { + "heuristicAction": "block" + }, + "loginside.co.kr": { + "heuristicAction": "allow" + }, + "logitech.com": { + "heuristicAction": "allow" + }, + "logly.co.jp": { + "heuristicAction": "block" + }, + "logo.samandehi.ir": { + "heuristicAction": "", + "nextUpdateTime": 1602201489957 + }, + "logsss.com": { + "heuristicAction": "allow" + }, + "logws1312.ati-host.net": { + "heuristicAction": "", + "nextUpdateTime": 1602250297502 + }, + "loop11.com": { + "heuristicAction": "allow" + }, + "loopassets.net": { + "heuristicAction": "allow" + }, + "loopgift.com": { + "heuristicAction": "block" + }, + "lp4.io": { + "heuristicAction": "block" + }, + "lpage.co": { + "heuristicAction": "allow" + }, + "lpoint.com": { + "heuristicAction": "allow" + }, + "lps.lpages.co": { + "heuristicAction": "allow" + }, + "lsurl.cn": { + "heuristicAction": "allow" + }, + "ltwebstatic.com": { + "heuristicAction": "allow" + }, + "lwcal.com": { + "heuristicAction": "allow" + }, + "lww.com": { + "heuristicAction": "block" + }, + "lytics.io": { + "heuristicAction": "block" + }, + "lz-pub-ads.com": { + "heuristicAction": "allow" + }, + "m.giraff.io": { + "heuristicAction": "", + "nextUpdateTime": 1602063382046 + }, + "m.stripe.network": { + "heuristicAction": "cookieblock" + }, + "m6r.eu": { + "heuristicAction": "allow" + }, + "maases.com": { + "heuristicAction": "allow" + }, + "mabping.chartbeat.net": { + "heuristicAction": "", + "nextUpdateTime": 1602230398929 + }, + "macromill.com": { + "heuristicAction": "block" + }, + "mad-docs.azurewebsites.net": { + "heuristicAction": "allow" + }, + "maerskline.com": { + "heuristicAction": "allow" + }, + "magnetmail.net": { + "heuristicAction": "block" + }, + "mail.ru": { + "heuristicAction": "cookieblock" + }, + "mailfire.io": { + "heuristicAction": "block" + }, + "mailmunch.co": { + "heuristicAction": "allow" + }, + "mainetodaymedia.com": { + "heuristicAction": "allow" + }, + "mantisadnetwork.com": { + "heuristicAction": "block" + }, + "mapixl.com": { + "heuristicAction": "allow" + }, + "mapquestapi.com": { + "heuristicAction": "allow" + }, + "maps-api-ssl.google.com": { + "heuristicAction": "cookieblock" + }, + "maps.google.com": { + "heuristicAction": "cookieblock" + }, + "mapsengine.google.com": { + "heuristicAction": "cookieblock" + }, + "marchex.io": { + "heuristicAction": "allow" + }, + "marinsm.com": { + "heuristicAction": "block" + }, + "marketdatasystems.com": { + "heuristicAction": "allow" + }, + "marketingautomation.services": { + "heuristicAction": "allow" + }, + "marketlinc.com": { + "heuristicAction": "block" + }, + "marketo.com": { + "heuristicAction": "cookieblock" + }, + "marketperf.com": { + "heuristicAction": "allow" + }, + "marktplaats.net": { + "heuristicAction": "allow" + }, + "massrelevance.com": { + "heuristicAction": "allow" + }, + "mat1.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1601929422756 + }, + "match.adsrvr.org": { + "heuristicAction": "", + "nextUpdateTime": 1602215627100 + }, + "match.prod.bidr.io": { + "heuristicAction": "", + "nextUpdateTime": 1601922249940 + }, + "matchid.adfox.yandex.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602280223811 + }, + "matchtv.ru": { + "heuristicAction": "allow" + }, + "mateti.net": { + "heuristicAction": "allow" + }, + "matheranalytics.com": { + "heuristicAction": "block" + }, + "mathtag.com": { + "heuristicAction": "block" + }, + "matomo.cloud": { + "heuristicAction": "allow" + }, + "maven.io": { + "heuristicAction": "block" + }, + "mavencoalition.io": { + "heuristicAction": "block" + }, + "maxmind.com": { + "heuristicAction": "allow" + }, + "maxymiser.net": { + "heuristicAction": "block" + }, + "mc.admetrica.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602220261900 + }, + "mc.webvisor.org": { + "heuristicAction": "", + "nextUpdateTime": 1602340801801 + }, + "mc.yandex.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602191356302 + }, + "mcclatchy.com": { + "heuristicAction": "block" + }, + "mcclatchy.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602266371270 + }, + "mcclatchy.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602232665786 + }, + "mcp-media5.anvato.net": { + "heuristicAction": "cookieblock" + }, + "mdgms.com": { + "heuristicAction": "allow" + }, + "mea.gov.in": { + "heuristicAction": "allow" + }, + "media.mcclatchy.com": { + "heuristicAction": "", + "nextUpdateTime": 1602346736506 + }, + "media.net": { + "heuristicAction": "block" + }, + "media.richrelevance.com": { + "heuristicAction": "", + "nextUpdateTime": 1602255030467 + }, + "media6degrees.com": { + "heuristicAction": "block" + }, + "mediaad.org": { + "heuristicAction": "block" + }, + "mediacategory.com": { + "heuristicAction": "allow" + }, + "mediacdn.vn": { + "heuristicAction": "allow" + }, + "mediacorp.sg": { + "heuristicAction": "allow" + }, + "mediaforge.com": { + "heuristicAction": "allow" + }, + "mediafuse.com": { + "heuristicAction": "block" + }, + "mediaset.net": { + "heuristicAction": "allow" + }, + "mediav.com": { + "heuristicAction": "block" + }, + "mediavine.com": { + "heuristicAction": "allow" + }, + "mediawallahscript.com": { + "heuristicAction": "block" + }, + "mediawayss.com": { + "heuristicAction": "allow" + }, + "mediaweaver.jp": { + "heuristicAction": "allow" + }, + "medium.al": { + "heuristicAction": "block" + }, + "medium.com": { + "heuristicAction": "allow" + }, + "medtargetsystem.com": { + "heuristicAction": "block" + }, + "meetings.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "meiqia.com": { + "heuristicAction": "block" + }, + "meizu.cn": { + "heuristicAction": "allow" + }, + "mellowads.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602211905379 + }, + "mer.stdout.cz": { + "heuristicAction": "allow" + }, + "mercadopago.cl": { + "heuristicAction": "allow" + }, + "meredithcorp.io": { + "heuristicAction": "allow" + }, + "metagaua.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602118504782 + }, + "metricool.com": { + "heuristicAction": "allow" + }, + "metrics.brightcove.com": { + "heuristicAction": "cookieblock" + }, + "metrics.timewarnercable.com": { + "heuristicAction": "allow" + }, + "metroscubicos.com": { + "heuristicAction": "allow" + }, + "mfadsrvr.com": { + "heuristicAction": "block" + }, + "mgid.com": { + "heuristicAction": "block" + }, + "mgzqlnev.micpn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602374553528 + }, + "mhtr.be": { + "heuristicAction": "allow" + }, + "mia-chat.com": { + "heuristicAction": "allow" + }, + "miamiherald.com": { + "heuristicAction": "allow" + }, + "miaozhen.com": { + "heuristicAction": "block" + }, + "mib.gov.in": { + "heuristicAction": "allow" + }, + "michelintravelpartner.d3.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602030194383 + }, + "micpn.com": { + "heuristicAction": "block" + }, + "microad.jp": { + "heuristicAction": "block" + }, + "microadinc.com": { + "heuristicAction": "block" + }, + "microcontenidos.com": { + "heuristicAction": "allow" + }, + "microntechnology.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602269322046 + }, + "microsoft.com": { + "heuristicAction": "cookieblock" + }, + "microsofttranslator.com": { + "heuristicAction": "allow" + }, + "mid.rkdms.com": { + "heuristicAction": "", + "nextUpdateTime": 1602229355570 + }, + "midas-network.com": { + "heuristicAction": "allow" + }, + "mimilcnf.pro": { + "heuristicAction": "allow" + }, + "mindbox.cloud": { + "heuristicAction": "allow" + }, + "mindbox.ru": { + "heuristicAction": "block" + }, + "minibc.com": { + "heuristicAction": "allow" + }, + "miniclip.com": { + "heuristicAction": "allow" + }, + "miniclippt.com": { + "heuristicAction": "allow" + }, + "miniinthebox.com": { + "heuristicAction": "allow" + }, + "mirror.co.uk": { + "heuristicAction": "block" + }, + "mituo.cn": { + "heuristicAction": "allow" + }, + "mixcloud.com": { + "heuristicAction": "allow" + }, + "mixi.media": { + "heuristicAction": "block" + }, + "mktoresp.com": { + "heuristicAction": "block" + }, + "ml314.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602137982531 + }, + "mlsys.xyz": { + "heuristicAction": "allow" + }, + "mmonline.io": { + "heuristicAction": "allow" + }, + "mmstat.com": { + "heuristicAction": "block" + }, + "mmtro.com": { + "heuristicAction": "allow" + }, + "moatads.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602075366073 + }, + "mobizone.mobi": { + "heuristicAction": "allow" + }, + "mobvista.com": { + "heuristicAction": "allow" + }, + "modlily.com": { + "heuristicAction": "allow" + }, + "moe.video": { + "heuristicAction": "allow" + }, + "moevideo.biz": { + "heuristicAction": "allow" + }, + "monetate.net": { + "heuristicAction": "block" + }, + "monohost.com": { + "heuristicAction": "block" + }, + "monsido.com": { + "heuristicAction": "block" + }, + "mookie1.com": { + "heuristicAction": "block" + }, + "moovit.com": { + "heuristicAction": "allow" + }, + "mopinion.com": { + "heuristicAction": "allow" + }, + "motorsport.com": { + "heuristicAction": "allow" + }, + "mox.tv": { + "heuristicAction": "allow" + }, + "moxielinks.com": { + "heuristicAction": "allow" + }, + "mozzart.ideaplus.mk": { + "heuristicAction": "allow" + }, + "mp.4dex.io": { + "heuristicAction": "", + "nextUpdateTime": 1602098830165 + }, + "mpeasylink.com": { + "heuristicAction": "block" + }, + "mpianalytics.com": { + "heuristicAction": "block" + }, + "mpio.io": { + "heuristicAction": "allow" + }, + "mpp.vindicosuite.com": { + "heuristicAction": "", + "nextUpdateTime": 1601938263068 + }, + "mpshark.com": { + "heuristicAction": "allow" + }, + "mpsnare.iesnare.com": { + "heuristicAction": "cookieblock" + }, + "mrelko.com": { + "heuristicAction": "allow" + }, + "mrpfd.com": { + "heuristicAction": "allow" + }, + "mrtnsvr.com": { + "heuristicAction": "allow" + }, + "msgapp.com": { + "heuristicAction": "allow" + }, + "msn.com": { + "heuristicAction": "allow" + }, + "mt0.google.com": { + "heuristicAction": "cookieblock" + }, + "mt1.google.com": { + "heuristicAction": "cookieblock" + }, + "mtgroup.kr": { + "heuristicAction": "allow" + }, + "mtmo.cc": { + "heuristicAction": "allow" + }, + "mts.ru": { + "heuristicAction": "block" + }, + "mts0.google.com": { + "heuristicAction": "cookieblock" + }, + "mts1.google.com": { + "heuristicAction": "cookieblock" + }, + "mtvnetworks.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602165322464 + }, + "mtvnservices.com": { + "heuristicAction": "cookieblock" + }, + "muji.net": { + "heuristicAction": "allow" + }, + "mulesoft.com": { + "heuristicAction": "allow" + }, + "musthird.com": { + "heuristicAction": "block" + }, + "mw1.google.com": { + "heuristicAction": "cookieblock" + }, + "mw2.google.com": { + "heuristicAction": "cookieblock" + }, + "mxapis.com": { + "heuristicAction": "allow" + }, + "mxplay.com": { + "heuristicAction": "allow" + }, + "mydoterra.queue-it.net": { + "heuristicAction": "cookieblock" + }, + "myfinance.com": { + "heuristicAction": "allow" + }, + "mykhel.com": { + "heuristicAction": "allow" + }, + "myopenads.com": { + "heuristicAction": "allow" + }, + "myshopify.com": { + "heuristicAction": "allow" + }, + "myvisualiq.net": { + "heuristicAction": "block" + }, + "myvoicenation.com": { + "heuristicAction": "allow" + }, + "n.gemini.yahoo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602129777154 + }, + "n1272serv.xyz": { + "heuristicAction": "allow" + }, + "n2.hk": { + "heuristicAction": "allow" + }, + "nakamasweb.com": { + "heuristicAction": "allow" + }, + "nakanohito.jp": { + "heuristicAction": "block" + }, + "namebrightstatic.com": { + "heuristicAction": "allow" + }, + "nanda.vn": { + "heuristicAction": "block" + }, + "nanigans.com": { + "heuristicAction": "allow" + }, + "nanorep.co": { + "heuristicAction": "cookieblock" + }, + "nanosemantics.ru": { + "heuristicAction": "allow" + }, + "narrative.io": { + "heuristicAction": "block" + }, + "native.sharethrough.com": { + "heuristicAction": "", + "nextUpdateTime": 1602018288094 + }, + "nativendo.de": { + "heuristicAction": "block" + }, + "nativeroll.tv": { + "heuristicAction": "block" + }, + "navdmp.com": { + "heuristicAction": "block" + }, + "naver.com": { + "heuristicAction": "block" + }, + "nbc.com": { + "heuristicAction": "allow" + }, + "nbcume.hb.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602005003033 + }, + "nbcuni.com": { + "heuristicAction": "cookieblock" + }, + "nc0.co": { + "heuristicAction": "allow" + }, + "nch.com.au": { + "heuristicAction": "allow" + }, + "neodatagroup.com": { + "heuristicAction": "allow" + }, + "neppa-dsp-ad.com": { + "heuristicAction": "allow" + }, + "netdna-ssl.com": { + "heuristicAction": "allow" + }, + "netmng.com": { + "heuristicAction": "block" + }, + "netrk.net": { + "heuristicAction": "allow" + }, + "network.bazaarvoice.com": { + "heuristicAction": "cookieblock" + }, + "networkad.net": { + "heuristicAction": "allow" + }, + "networkn-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602351211629 + }, + "newaircloud.com": { + "heuristicAction": "allow" + }, + "newmedia.az": { + "heuristicAction": "block" + }, + "newrelic.com": { + "heuristicAction": "allow" + }, + "news-network.ru": { + "heuristicAction": "allow" + }, + "news.cn": { + "heuristicAction": "allow" + }, + "news.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1601973685701 + }, + "newscgp.com": { + "heuristicAction": "block" + }, + "newshub.id": { + "heuristicAction": "allow" + }, + "newsmaxwidget.com": { + "heuristicAction": "allow" + }, + "newsmemory.com": { + "heuristicAction": "allow" + }, + "newsobserver.com": { + "heuristicAction": "allow" + }, + "newyorker.com": { + "heuristicAction": "block" + }, + "newzit.com": { + "heuristicAction": "allow" + }, + "nextclick.pl": { + "heuristicAction": "allow" + }, + "nextelection.app": { + "heuristicAction": "allow" + }, + "ngpvan.com": { + "heuristicAction": "cookieblock" + }, + "ngs.ru": { + "heuristicAction": "allow" + }, + "nicequest.com": { + "heuristicAction": "allow" + }, + "nikon-cdn.com": { + "heuristicAction": "allow" + }, + "nikonsso.com": { + "heuristicAction": "allow" + }, + "nimbleswan.io": { + "heuristicAction": "allow" + }, + "ninahale.net": { + "heuristicAction": "allow" + }, + "nine.com.au": { + "heuristicAction": "block" + }, + "nissanheliosna.d3.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602119730377 + }, + "nissanheliosna.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602272496857 + }, + "njih.net": { + "heuristicAction": "allow" + }, + "no-cache.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "norstatsurveys.com": { + "heuristicAction": "allow" + }, + "norton.com": { + "heuristicAction": "allow" + }, + "nosto.com": { + "heuristicAction": "block" + }, + "notifyvisitors.com": { + "heuristicAction": "allow" + }, + "noxgroup.com": { + "heuristicAction": "allow" + }, + "nperf.com": { + "heuristicAction": "allow" + }, + "npo.nl": { + "heuristicAction": "allow" + }, + "npohosting.nl": { + "heuristicAction": "allow" + }, + "nr-data.net": { + "heuristicAction": "block" + }, + "nsaudience.pl": { + "heuristicAction": "allow" + }, + "ntnu.edu": { + "heuristicAction": "allow" + }, + "ntvk1.ru": { + "heuristicAction": "allow" + }, + "nuggad.net": { + "heuristicAction": "allow" + }, + "nxtck.com": { + "heuristicAction": "allow" + }, + "o-s.io": { + "heuristicAction": "allow" + }, + "o333o.com": { + "heuristicAction": "allow" + }, + "oa-mssp.data.aliyun.com": { + "heuristicAction": "", + "nextUpdateTime": 1602232879017 + }, + "oa-ssp.data.aliyun.com": { + "heuristicAction": "", + "nextUpdateTime": 1602273544731 + }, + "oadz.com": { + "heuristicAction": "allow" + }, + "obs.cheqzone.com": { + "heuristicAction": "", + "nextUpdateTime": 1602347445747 + }, + "ocdn.eu": { + "heuristicAction": "allow" + }, + "octclck.xyz": { + "heuristicAction": "allow" + }, + "octivid.com": { + "heuristicAction": "allow" + }, + "oddcast.com": { + "heuristicAction": "allow" + }, + "odoocdn.com": { + "heuristicAction": "allow" + }, + "officeworks.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602105908337 + }, + "officeworks.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602358562632 + }, + "offlinx.com": { + "heuristicAction": "allow" + }, + "ojrq.net": { + "heuristicAction": "block" + }, + "ok.ru": { + "heuristicAction": "block", + "nextUpdateTime": 1601973576526 + }, + "okccdn.com": { + "heuristicAction": "allow" + }, + "okezone.com": { + "heuristicAction": "allow" + }, + "okt.to": { + "heuristicAction": "block", + "nextUpdateTime": 1601981510026 + }, + "okta.com": { + "heuristicAction": "cookieblock" + }, + "olark.com": { + "heuristicAction": "cookieblock" + }, + "olnl.net": { + "heuristicAction": "allow" + }, + "olx-st.com": { + "heuristicAction": "block" + }, + "omchanseyr.com": { + "heuristicAction": "allow" + }, + "omgpm.com": { + "heuristicAction": "allow" + }, + "omguk.com": { + "heuristicAction": "allow" + }, + "omniscientai.com": { + "heuristicAction": "allow" + }, + "omnitagjs.com": { + "heuristicAction": "block" + }, + "omny.fm": { + "heuristicAction": "cookieblock" + }, + "omtrdc.net": { + "heuristicAction": "block" + }, + "onaudience.com": { + "heuristicAction": "allow" + }, + "oncueapp.appspot.com": { + "heuristicAction": "allow" + }, + "one.gov.hk": { + "heuristicAction": "allow" + }, + "onecms.io": { + "heuristicAction": "allow" + }, + "onecount.net": { + "heuristicAction": "allow" + }, + "oneindia.com": { + "heuristicAction": "allow" + }, + "onelink.me": { + "heuristicAction": "allow" + }, + "onesignal.com": { + "heuristicAction": "allow" + }, + "onet.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602319350963 + }, + "onet.pl": { + "heuristicAction": "allow" + }, + "onevision.com.tw": { + "heuristicAction": "block" + }, + "online-metrix.net": { + "heuristicAction": "block" + }, + "onlyred.net": { + "heuristicAction": "allow" + }, + "onrcx.com": { + "heuristicAction": "allow" + }, + "onsugar.com": { + "heuristicAction": "allow" + }, + "onthe.io": { + "heuristicAction": "block" + }, + "ooyala.com": { + "heuristicAction": "allow" + }, + "opecloud.com": { + "heuristicAction": "block" + }, + "open.com.cn": { + "heuristicAction": "allow" + }, + "openbid.pubmatic.com": { + "heuristicAction": "", + "nextUpdateTime": 1602050638764 + }, + "openstat.net": { + "heuristicAction": "allow" + }, + "openx.net": { + "heuristicAction": "block" + }, + "opinionstage.com": { + "heuristicAction": "allow" + }, + "optaim.com": { + "heuristicAction": "allow" + }, + "optimahub.com": { + "heuristicAction": "allow" + }, + "optimix.cn": { + "heuristicAction": "block" + }, + "optimizely.com": { + "heuristicAction": "cookieblock" + }, + "optimove.events": { + "heuristicAction": "allow" + }, + "oracle.com": { + "heuristicAction": "block" + }, + "oraclecloud.com": { + "heuristicAction": "allow" + }, + "oracleimg.com": { + "heuristicAction": "block" + }, + "orange-business.com": { + "heuristicAction": "allow" + }, + "orangeads.fr": { + "heuristicAction": "allow" + }, + "orbita.cloud": { + "heuristicAction": "allow" + }, + "oreillystatic.com": { + "heuristicAction": "allow" + }, + "osano.com": { + "heuristicAction": "block" + }, + "otaserve.net": { + "heuristicAction": "allow" + }, + "otm-r.com": { + "heuristicAction": "block" + }, + "outbrain.com": { + "heuristicAction": "block" + }, + "outlookhindi.com": { + "heuristicAction": "allow" + }, + "outstream.today": { + "heuristicAction": "allow" + }, + "ow5a.net": { + "heuristicAction": "allow" + }, + "owneriq.net": { + "heuristicAction": "block" + }, + "ownpage.fr": { + "heuristicAction": "allow" + }, + "p.alocdn.com": { + "heuristicAction": "block" + }, + "p.cpx.to": { + "heuristicAction": "", + "nextUpdateTime": 1602258148192 + }, + "p.teads.tv": { + "heuristicAction": "", + "nextUpdateTime": 1602311638230 + }, + "p.tvpixel.com": { + "heuristicAction": "", + "nextUpdateTime": 1602188727534 + }, + "p.typekit.net": { + "heuristicAction": "cookieblock" + }, + "p1.zemanta.com": { + "heuristicAction": "", + "nextUpdateTime": 1601966397031 + }, + "p242.mimilcnf.pro": { + "heuristicAction": "allow" + }, + "pacificgasandelectricco.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602138803143 + }, + "paddle.com": { + "heuristicAction": "allow" + }, + "padletcdn.com": { + "heuristicAction": "allow" + }, + "pages02.net": { + "heuristicAction": "allow" + }, + "pages03.net": { + "heuristicAction": "block" + }, + "pages04.net": { + "heuristicAction": "allow" + }, + "pages06.net": { + "heuristicAction": "allow" + }, + "pages07.net": { + "heuristicAction": "allow" + }, + "pages08.net": { + "heuristicAction": "allow" + }, + "panel.adtodate.net": { + "heuristicAction": "allow" + }, + "panet.eu": { + "heuristicAction": "allow" + }, + "pangu.kcsfile.com": { + "heuristicAction": "allow" + }, + "papi.look.360.cn": { + "heuristicAction": "", + "nextUpdateTime": 1602367932182 + }, + "pardot.com": { + "heuristicAction": "block" + }, + "parsely.com": { + "heuristicAction": "block" + }, + "parsons.edu": { + "heuristicAction": "allow" + }, + "particularaudience.com": { + "heuristicAction": "allow" + }, + "patreon.com": { + "heuristicAction": "allow" + }, + "paxful.com": { + "heuristicAction": "allow" + }, + "pay.google.com": { + "heuristicAction": "cookieblock" + }, + "paycom.com": { + "heuristicAction": "allow" + }, + "paypal.com": { + "heuristicAction": "cookieblock" + }, + "pb.ua": { + "heuristicAction": "allow" + }, + "pba.aws.lijit.com": { + "heuristicAction": "", + "nextUpdateTime": 1601939611868 + }, + "pbbl.co": { + "heuristicAction": "block" + }, + "pbstck.com": { + "heuristicAction": "allow" + }, + "pc.com.cn": { + "heuristicAction": "allow" + }, + "pcmag.com": { + "heuristicAction": "block" + }, + "pconline.com.cn": { + "heuristicAction": "block" + }, + "pd.sharethis.com": { + "heuristicAction": "", + "nextUpdateTime": 1602153809133 + }, + "pdvacde.com": { + "heuristicAction": "allow" + }, + "pelcro.com": { + "heuristicAction": "allow" + }, + "pelmorex.com": { + "heuristicAction": "allow" + }, + "pendo.io": { + "heuristicAction": "block" + }, + "people.com.cn": { + "heuristicAction": "allow" + }, + "percycle.com": { + "heuristicAction": "allow" + }, + "performancefirst.jp": { + "heuristicAction": "allow" + }, + "performi.com": { + "heuristicAction": "allow" + }, + "permutive.app": { + "heuristicAction": "block" + }, + "petametrics.com": { + "heuristicAction": "block" + }, + "pgtb.me": { + "heuristicAction": "allow" + }, + "philips.co.uk": { + "heuristicAction": "allow" + }, + "philips.com": { + "heuristicAction": "allow" + }, + "photo.store.qq.com": { + "heuristicAction": "cookieblock" + }, + "photorank.me": { + "heuristicAction": "block" + }, + "pi.pardot.com": { + "heuristicAction": "", + "nextUpdateTime": 1602088740721 + }, + "piano.io": { + "heuristicAction": "allow" + }, + "picasaweb.google.com": { + "heuristicAction": "cookieblock" + }, + "pinduoduo.com": { + "heuristicAction": "allow" + }, + "ping.chartbeat.net": { + "heuristicAction": "", + "nextUpdateTime": 1602278560774 + }, + "pingan.com": { + "heuristicAction": "allow" + }, + "pingback.issuu.com": { + "heuristicAction": "allow" + }, + "pinterest.com": { + "heuristicAction": "block" + }, + "pipes.yahoo.com": { + "heuristicAction": "cookieblock" + }, + "piri.net": { + "heuristicAction": "allow" + }, + "pitchfork.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601846670134 + }, + "piwik.pro": { + "heuristicAction": "block" + }, + "pixel.advertising.com": { + "heuristicAction": "", + "nextUpdateTime": 1601995995645 + }, + "pixel.cdnwidget.com": { + "heuristicAction": "", + "nextUpdateTime": 1602319269087 + }, + "pixel.mathtag.com": { + "heuristicAction": "", + "nextUpdateTime": 1602083998093 + }, + "pixel.pointmediatracker.com": { + "heuristicAction": "", + "nextUpdateTime": 1602345582748 + }, + "pixel.quantserve.com": { + "heuristicAction": "", + "nextUpdateTime": 1601976314353 + }, + "pixel.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602020795935 + }, + "pixel.servebom.com": { + "heuristicAction": "", + "nextUpdateTime": 1602349576142 + }, + "pixel.sitescout.com": { + "heuristicAction": "", + "nextUpdateTime": 1601880779902 + }, + "pixel.sojern.com": { + "heuristicAction": "", + "nextUpdateTime": 1601891472357 + }, + "pixel.tapad.com": { + "heuristicAction": "", + "nextUpdateTime": 1602296209272 + }, + "pixel2.cheqzone.com": { + "heuristicAction": "", + "nextUpdateTime": 1601964731632 + }, + "pixelg.adswizz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602290080722 + }, + "pixlee.co": { + "heuristicAction": "allow" + }, + "pixlee.com": { + "heuristicAction": "block" + }, + "pixnet.cc": { + "heuristicAction": "allow" + }, + "pk.labocleo.org": { + "heuristicAction": "allow" + }, + "placed.com": { + "heuristicAction": "allow" + }, + "planalto.gov.br": { + "heuristicAction": "allow" + }, + "platform-api.sharethis.com": { + "heuristicAction": "", + "nextUpdateTime": 1602223994935 + }, + "platform.bidgear.com": { + "heuristicAction": "", + "nextUpdateTime": 1602133549361 + }, + "platform.iteratehq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602038115638 + }, + "platform.linkedin.com": { + "heuristicAction": "", + "nextUpdateTime": 1602145546636 + }, + "platform.twitter.com": { + "heuristicAction": "cookieblock" + }, + "play.google.com": { + "heuristicAction": "cookieblock" + }, + "play.vidyard.com": { + "heuristicAction": "", + "nextUpdateTime": 1602282917182 + }, + "playbuzz.com": { + "heuristicAction": "allow" + }, + "player.aniview.com": { + "heuristicAction": "", + "nextUpdateTime": 1601892578750 + }, + "playreplay.me": { + "heuristicAction": "allow" + }, + "playreplay.net": { + "heuristicAction": "allow" + }, + "plezi.co": { + "heuristicAction": "allow" + }, + "plista.com": { + "heuristicAction": "block" + }, + "plus.google.com": { + "heuristicAction": "", + "nextUpdateTime": 1602215355828 + }, + "plus.sabavision.com": { + "heuristicAction": "", + "nextUpdateTime": 1601905204908 + }, + "poemsdeucewee.com": { + "heuristicAction": "allow" + }, + "pointmediatracker.com": { + "heuristicAction": "block" + }, + "polarbyte.com": { + "heuristicAction": "allow" + }, + "poll-maker.com": { + "heuristicAction": "allow" + }, + "poll.fm": { + "heuristicAction": "allow" + }, + "poool.fr": { + "heuristicAction": "allow" + }, + "popin.cc": { + "heuristicAction": "block" + }, + "popt.in": { + "heuristicAction": "allow" + }, + "port.hu": { + "heuristicAction": "allow" + }, + "portalinmobiliario.com": { + "heuristicAction": "allow" + }, + "pos.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1601915381141 + }, + "postaffiliatepro.com": { + "heuristicAction": "allow" + }, + "postrelease.com": { + "heuristicAction": "block" + }, + "powerlinks.com": { + "heuristicAction": "block" + }, + "powerreviews.com": { + "heuristicAction": "allow" + }, + "pp.lp4.io": { + "heuristicAction": "", + "nextUpdateTime": 1601906355280 + }, + "pplive.com": { + "heuristicAction": "allow" + }, + "prcdn.co": { + "heuristicAction": "block" + }, + "prebid-eu.creativecdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602250362504 + }, + "prebid.a-mo.net": { + "heuristicAction": "", + "nextUpdateTime": 1602128690166 + }, + "prebid.technoratimedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1601937523227 + }, + "prensaiberica.es": { + "heuristicAction": "allow" + }, + "prfct.co": { + "heuristicAction": "block" + }, + "prg.smartadserver.com": { + "heuristicAction": "", + "nextUpdateTime": 1601918796093 + }, + "priceline.com": { + "heuristicAction": "allow" + }, + "primead.jp": { + "heuristicAction": "allow" + }, + "primecaster.net": { + "heuristicAction": "allow" + }, + "printful.com": { + "heuristicAction": "allow" + }, + "prisasd.com": { + "heuristicAction": "allow" + }, + "prismamedia.com": { + "heuristicAction": "allow" + }, + "privacy.trustcommander.net": { + "heuristicAction": "allow" + }, + "privacymanager.io": { + "heuristicAction": "allow" + }, + "privally.io": { + "heuristicAction": "allow" + }, + "privymktg.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602264700400 + }, + "prixa.net": { + "heuristicAction": "allow" + }, + "prixacdn.net": { + "heuristicAction": "allow" + }, + "prlog.org": { + "heuristicAction": "allow" + }, + "pro-market.net": { + "heuristicAction": "block" + }, + "prod-ajc-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-anchorage-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-api-funimationnow.dadcdigital.com": { + "heuristicAction": "allow" + }, + "prod-cosprings-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-dfm-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-mng-proxy-connext.azurewebsites.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602184427468 + }, + "prod-newsday-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-review-journal-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-smi-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-spokesman-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod-tampabay-proxy-connext.azurewebsites.net": { + "heuristicAction": "allow" + }, + "prod01.kaxsdc.com": { + "heuristicAction": "allow" + }, + "producebreed.com": { + "heuristicAction": "allow" + }, + "profiles.tagger.opecloud.com": { + "heuristicAction": "", + "nextUpdateTime": 1602204757561 + }, + "programattik.com": { + "heuristicAction": "block" + }, + "project1service.com": { + "heuristicAction": "allow" + }, + "prometeo-media-service.com": { + "heuristicAction": "allow" + }, + "promos.rtm.com": { + "heuristicAction": "allow" + }, + "proofpoint.com": { + "heuristicAction": "block" + }, + "propermedia-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602016597448 + }, + "prosumsit.com": { + "heuristicAction": "allow" + }, + "provenexpert.com": { + "heuristicAction": "allow" + }, + "provenpixel.com": { + "heuristicAction": "allow" + }, + "proxad.net": { + "heuristicAction": "allow" + }, + "ps.eyeota.net": { + "heuristicAction": "", + "nextUpdateTime": 1602203277374 + }, + "psakdin.co.il": { + "heuristicAction": "allow" + }, + "pswec.com": { + "heuristicAction": "allow" + }, + "pt.ispot.tv": { + "heuristicAction": "", + "nextUpdateTime": 1601970044880 + }, + "ptgncdn.com": { + "heuristicAction": "allow" + }, + "pub.network": { + "heuristicAction": "block" + }, + "pubads.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602248461999 + }, + "pubble.io": { + "heuristicAction": "allow" + }, + "public.servenobid.com": { + "heuristicAction": "", + "nextUpdateTime": 1602008959913 + }, + "publicradio.org": { + "heuristicAction": "allow" + }, + "publir.com": { + "heuristicAction": "allow" + }, + "publishme.se": { + "heuristicAction": "allow" + }, + "pubmatic.com": { + "heuristicAction": "block" + }, + "pubstack.io": { + "heuristicAction": "block" + }, + "pulsembed.eu": { + "heuristicAction": "allow" + }, + "purch-match.dotomi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602362186520 + }, + "purch-sync.go.sonobi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602026135730 + }, + "purechat.com": { + "heuristicAction": "allow" + }, + "push.world": { + "heuristicAction": "allow" + }, + "push.zhanzhang.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1601921035080 + }, + "pushbird.com": { + "heuristicAction": "allow" + }, + "pushe.co": { + "heuristicAction": "allow" + }, + "pushnami.com": { + "heuristicAction": "block" + }, + "pvsite.zol.com.cn": { + "heuristicAction": "allow" + }, + "pvxt.net": { + "heuristicAction": "allow" + }, + "px-cloud.net": { + "heuristicAction": "allow" + }, + "px.ads.linkedin.com": { + "heuristicAction": "", + "nextUpdateTime": 1602329864419 + }, + "px.airpr.com": { + "heuristicAction": "", + "nextUpdateTime": 1602027593662 + }, + "px.marchex.io": { + "heuristicAction": "allow" + }, + "px.moatads.com": { + "heuristicAction": "", + "nextUpdateTime": 1602038362789 + }, + "px.owneriq.net": { + "heuristicAction": "", + "nextUpdateTime": 1602141008971 + }, + "px.powerlinks.com": { + "heuristicAction": "", + "nextUpdateTime": 1602344340277 + }, + "pxf.io": { + "heuristicAction": "allow" + }, + "pymx5.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602165770487 + }, + "q.quora.com": { + "heuristicAction": "", + "nextUpdateTime": 1602370761974 + }, + "qchannel03.cn": { + "heuristicAction": "allow" + }, + "qds0l.publishers.tremorhub.com": { + "heuristicAction": "", + "nextUpdateTime": 1602242008241 + }, + "qhupdate.com": { + "heuristicAction": "allow" + }, + "qiyukf.com": { + "heuristicAction": "allow" + }, + "qlitics.com": { + "heuristicAction": "allow" + }, + "qoo10.in": { + "heuristicAction": "allow" + }, + "qq.com": { + "heuristicAction": "block" + }, + "qqjar.ru": { + "heuristicAction": "allow" + }, + "qs.com": { + "heuristicAction": "allow" + }, + "qsstats.com": { + "heuristicAction": "allow" + }, + "qualtrics.com": { + "heuristicAction": "cookieblock" + }, + "quantad.io": { + "heuristicAction": "allow" + }, + "quantserve.com": { + "heuristicAction": "block" + }, + "quantumdex.io": { + "heuristicAction": "block" + }, + "quantummetric.com": { + "heuristicAction": "block" + }, + "queryly.com": { + "heuristicAction": "allow" + }, + "questionpro.com": { + "heuristicAction": "allow" + }, + "queue-it.net": { + "heuristicAction": "cookieblock" + }, + "quickkoala.io": { + "heuristicAction": "allow" + }, + "quiq-api.com": { + "heuristicAction": "allow" + }, + "quitzon.net": { + "heuristicAction": "allow" + }, + "quora.com": { + "heuristicAction": "block" + }, + "qy.net": { + "heuristicAction": "allow" + }, + "r-ad.ne.jp": { + "heuristicAction": "block" + }, + "r.adrta.com": { + "heuristicAction": "", + "nextUpdateTime": 1602169293990 + }, + "radissonhotels.com": { + "heuristicAction": "allow" + }, + "rainbowred.com": { + "heuristicAction": "allow" + }, + "rakuten.co.jp": { + "heuristicAction": "block" + }, + "rakuten.com": { + "heuristicAction": "block" + }, + "rambler.ru": { + "heuristicAction": "cookieblock" + }, + "randomhouse.com": { + "heuristicAction": "allow" + }, + "rating-widget.com": { + "heuristicAction": "allow" + }, + "raxcdn.com": { + "heuristicAction": "allow" + }, + "raycommedia.com": { + "heuristicAction": "allow" + }, + "razorpay.com": { + "heuristicAction": "allow" + }, + "rc.rlcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602042069460 + }, + "rcapiuseridexchange.azurewebsites.net": { + "heuristicAction": "allow" + }, + "rcci.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602054619490 + }, + "rcci.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601927398916 + }, + "rcom-eu.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "rcom.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "rcrsv.io": { + "heuristicAction": "allow" + }, + "rcs.it": { + "heuristicAction": "allow" + }, + "rcsmetrics.it": { + "heuristicAction": "allow" + }, + "rctiplus.com": { + "heuristicAction": "allow" + }, + "rdcdn.com": { + "heuristicAction": "allow" + }, + "reachmax.cn": { + "heuristicAction": "block" + }, + "reactful.com": { + "heuristicAction": "allow" + }, + "realclick.co.kr": { + "heuristicAction": "allow" + }, + "realite.id": { + "heuristicAction": "block" + }, + "realsrv.com": { + "heuristicAction": "block" + }, + "realtime.email": { + "heuristicAction": "allow" + }, + "rec-engine.com": { + "heuristicAction": "allow" + }, + "recobell.io": { + "heuristicAction": "allow" + }, + "recommendationengine.googleapis.com": { + "heuristicAction": "cookieblock" + }, + "recreativ.ru": { + "heuristicAction": "allow" + }, + "recruitics.com": { + "heuristicAction": "allow" + }, + "recv-bak-wd.gridsumdissector.com": { + "heuristicAction": "", + "nextUpdateTime": 1602272913471 + }, + "recv-wd.gridsumdissector.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602380448892 + }, + "redbubble.com": { + "heuristicAction": "allow" + }, + "redcross.org": { + "heuristicAction": "allow" + }, + "reddit.com": { + "heuristicAction": "cookieblock" + }, + "redhat.com": { + "heuristicAction": "allow" + }, + "redintelligence.net": { + "heuristicAction": "allow" + }, + "redlink.com": { + "heuristicAction": "allow" + }, + "refocus.ru": { + "heuristicAction": "allow" + }, + "registercom.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601942960569 + }, + "registercom.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601974777657 + }, + "regroup.com": { + "heuristicAction": "allow" + }, + "reichelcormier.bid": { + "heuristicAction": "block" + }, + "relap.io": { + "heuristicAction": "block", + "nextUpdateTime": 1602091447839 + }, + "relateddigital.com": { + "heuristicAction": "allow" + }, + "remarqable.com": { + "heuristicAction": "allow" + }, + "renotifier.miniclippt.com": { + "heuristicAction": "allow" + }, + "rentracks.jp": { + "heuristicAction": "block" + }, + "report.huatuo.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602298085654 + }, + "report.syzs.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602234325378 + }, + "republer.com": { + "heuristicAction": "block" + }, + "res.qhupdate.com": { + "heuristicAction": "allow" + }, + "res.wx.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602342749669 + }, + "research-int.se": { + "heuristicAction": "block" + }, + "researchintel.com": { + "heuristicAction": "allow" + }, + "researchnow.com": { + "heuristicAction": "block" + }, + "resniks.pro": { + "heuristicAction": "allow" + }, + "reson8.com": { + "heuristicAction": "block" + }, + "resources.xg4ken.com": { + "heuristicAction": "", + "nextUpdateTime": 1602006584530 + }, + "retailrocket.net": { + "heuristicAction": "block" + }, + "retargetly.com": { + "heuristicAction": "block" + }, + "retentioneering.com": { + "heuristicAction": "allow" + }, + "rev.uar.hubpd.com": { + "heuristicAction": "allow" + }, + "revcontent.com": { + "heuristicAction": "block" + }, + "reverb-assets.com": { + "heuristicAction": "allow" + }, + "revive-adserver.net": { + "heuristicAction": "allow" + }, + "revjet.com": { + "heuristicAction": "block" + }, + "rezync.com": { + "heuristicAction": "block" + }, + "rferl.org": { + "heuristicAction": "allow" + }, + "rfihub.com": { + "heuristicAction": "block" + }, + "rfksrv.com": { + "heuristicAction": "block" + }, + "rfvk.net": { + "heuristicAction": "allow" + }, + "ria.ru": { + "heuristicAction": "block" + }, + "richaudience.com": { + "heuristicAction": "block" + }, + "richrelevance.com": { + "heuristicAction": "block" + }, + "rightinthebox.com": { + "heuristicAction": "allow" + }, + "rightmessage.com": { + "heuristicAction": "allow" + }, + "rightnowtech.com": { + "heuristicAction": "allow" + }, + "rijksoverheid.nl": { + "heuristicAction": "allow" + }, + "riotgames.com": { + "heuristicAction": "block" + }, + "riskified.com": { + "heuristicAction": "block" + }, + "riverhit.com": { + "heuristicAction": "block" + }, + "rkdms.com": { + "heuristicAction": "block" + }, + "rktch.com": { + "heuristicAction": "allow" + }, + "rlcdn.com": { + "heuristicAction": "block" + }, + "rmtag.com": { + "heuristicAction": "block" + }, + "rmulus.com": { + "heuristicAction": "allow" + }, + "rnengage.com": { + "heuristicAction": "block" + }, + "rockcontent.com": { + "heuristicAction": "allow" + }, + "roku.com": { + "heuristicAction": "allow" + }, + "rollingstone.com": { + "heuristicAction": "allow" + }, + "rosewe.com": { + "heuristicAction": "allow" + }, + "rotita.com": { + "heuristicAction": "allow" + }, + "router.infolinks.com": { + "heuristicAction": "allow" + }, + "rstbtmd.com": { + "heuristicAction": "allow" + }, + "rsz.sk": { + "heuristicAction": "allow" + }, + "rt.ru": { + "heuristicAction": "allow" + }, + "rtbsuperhub.com": { + "heuristicAction": "allow" + }, + "rtd-tm.everesttech.net": { + "heuristicAction": "", + "nextUpdateTime": 1602180206329 + }, + "rtk.io": { + "heuristicAction": "block" + }, + "rtm.com": { + "heuristicAction": "allow" + }, + "rtmark.net": { + "heuristicAction": "block" + }, + "rtr-vesti.ru": { + "heuristicAction": "allow" + }, + "rubiconproject.com": { + "heuristicAction": "block" + }, + "rum.uptime.com": { + "heuristicAction": "block" + }, + "rumble.com": { + "heuristicAction": "allow" + }, + "rumiview.com": { + "heuristicAction": "block" + }, + "run-syndicate.com": { + "heuristicAction": "allow" + }, + "russia.tv": { + "heuristicAction": "allow" + }, + "rutarget.ru": { + "heuristicAction": "block" + }, + "ryvx.net": { + "heuristicAction": "allow" + }, + "rzk-m.com": { + "heuristicAction": "allow" + }, + "s-static.ak.facebook.com": { + "heuristicAction": "cookieblock" + }, + "s.360.cn": { + "heuristicAction": "", + "nextUpdateTime": 1602190929287 + }, + "s.adroll.com": { + "heuristicAction": "", + "nextUpdateTime": 1602097010606 + }, + "s.amazon-adsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602205985632 + }, + "s.dpmsrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1601890500773 + }, + "s.salecycle.com": { + "heuristicAction": "", + "nextUpdateTime": 1602222020792 + }, + "s.shld.net": { + "heuristicAction": "allow" + }, + "s.skimresources.com": { + "heuristicAction": "", + "nextUpdateTime": 1602298897231 + }, + "s.thebrighttag.com": { + "heuristicAction": "", + "nextUpdateTime": 1602347555959 + }, + "s.tribalfusion.com": { + "heuristicAction": "", + "nextUpdateTime": 1602178613054 + }, + "s1.mediaad.org": { + "heuristicAction": "", + "nextUpdateTime": 1602195611237 + }, + "s10.histats.com": { + "heuristicAction": "", + "nextUpdateTime": 1602067951576 + }, + "s1061282284.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1602282129841 + }, + "s1411.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1602141596214 + }, + "s1583749854.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1601926283321 + }, + "s19.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602161831981 + }, + "s2044559064.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1601939229437 + }, + "s21.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602307970326 + }, + "s23.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602087873223 + }, + "s3.cheqzone.com": { + "heuristicAction": "", + "nextUpdateTime": 1602375598844 + }, + "s301091484.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1601929872971 + }, + "s457207082.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1602171063890 + }, + "s5.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602111953853 + }, + "s5o.ru": { + "heuristicAction": "allow" + }, + "s6.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602026083580 + }, + "s68275882.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1602172314157 + }, + "s7.addthis.com": { + "heuristicAction": "", + "nextUpdateTime": 1602098120848 + }, + "s700.t.eloqua.com": { + "heuristicAction": "", + "nextUpdateTime": 1602361002131 + }, + "s9.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1601889638469 + }, + "s95.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602055165910 + }, + "saas-bbw.userreplay.net": { + "heuristicAction": "", + "nextUpdateTime": 1602009150007 + }, + "sabavision.com": { + "heuristicAction": "block" + }, + "sabay.com": { + "heuristicAction": "allow" + }, + "sacbee.com": { + "heuristicAction": "block" + }, + "sagetalk.io": { + "heuristicAction": "allow" + }, + "sajari.com": { + "heuristicAction": "allow" + }, + "salecycle.com": { + "heuristicAction": "block" + }, + "salemwebnetwork.com": { + "heuristicAction": "allow" + }, + "salesforce.com": { + "heuristicAction": "cookieblock" + }, + "salesforceliveagent.com": { + "heuristicAction": "cookieblock" + }, + "salesiq.zoho.com": { + "heuristicAction": "allow" + }, + "salesloft.com": { + "heuristicAction": "block" + }, + "samandehi.ir": { + "heuristicAction": "block" + }, + "samba.tv": { + "heuristicAction": "block" + }, + "sanjagh.com": { + "heuristicAction": "block" + }, + "sanoma.fi": { + "heuristicAction": "allow" + }, + "sape.ru": { + "heuristicAction": "allow" + }, + "sapi.map.baidu.com": { + "heuristicAction": "cookieblock" + }, + "sas.com": { + "heuristicAction": "allow" + }, + "sb.scorecardresearch.com": { + "heuristicAction": "", + "nextUpdateTime": 1601877050404 + }, + "sbmwmotor.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601900845827 + }, + "sc-static.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602052112351 + }, + "scarabresearch.com": { + "heuristicAction": "block" + }, + "scatec.io": { + "heuristicAction": "allow" + }, + "scdn.cxense.com": { + "heuristicAction": "", + "nextUpdateTime": 1602301965255 + }, + "scene7.com": { + "heuristicAction": "allow" + }, + "scenepass.com": { + "heuristicAction": "allow" + }, + "sched.activehosted.com": { + "heuristicAction": "", + "nextUpdateTime": 1602247108443 + }, + "schibsted.com": { + "heuristicAction": "cookieblock" + }, + "scholarlyiq.com": { + "heuristicAction": "allow" + }, + "sciencedirect.com": { + "heuristicAction": "allow" + }, + "sciencemag.org": { + "heuristicAction": "allow" + }, + "sciencex.com": { + "heuristicAction": "allow" + }, + "scmp.com": { + "heuristicAction": "allow" + }, + "scoop.it": { + "heuristicAction": "allow" + }, + "scorecardresearch.com": { + "heuristicAction": "block" + }, + "scout-cdn.salesloft.com": { + "heuristicAction": "", + "nextUpdateTime": 1602096978415 + }, + "scribblelive.com": { + "heuristicAction": "allow" + }, + "script.4dex.io": { + "heuristicAction": "", + "nextUpdateTime": 1602251014741 + }, + "script.dotmetrics.net": { + "heuristicAction": "", + "nextUpdateTime": 1602278727107 + }, + "script.ioam.de": { + "heuristicAction": "cookieblock" + }, + "scupio.com": { + "heuristicAction": "block" + }, + "sddan.com": { + "heuristicAction": "allow" + }, + "sdlcdn.com": { + "heuristicAction": "allow" + }, + "se.monetate.net": { + "heuristicAction": "", + "nextUpdateTime": 1602132174138 + }, + "search.spotxchange.com": { + "heuristicAction": "", + "nextUpdateTime": 1602220572317 + }, + "search.yahoo.com": { + "heuristicAction": "cookieblock" + }, + "searchforce.net": { + "heuristicAction": "allow" + }, + "searchiq.co": { + "heuristicAction": "allow" + }, + "sears.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601898524030 + }, + "searsholdings.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602011616601 + }, + "seccdn-gl.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602061719559 + }, + "secrank.cn": { + "heuristicAction": "allow" + }, + "section.io": { + "heuristicAction": "allow" + }, + "secure-assets.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602059253054 + }, + "secure-au.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602008173018 + }, + "secure-dcr.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602126109095 + }, + "secure-ds.serving-sys.com": { + "heuristicAction": "", + "nextUpdateTime": 1601979038058 + }, + "secure-gl.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602257269255 + }, + "secure-nz.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1602238398801 + }, + "secure-us.imrworldwide.com": { + "heuristicAction": "", + "nextUpdateTime": 1601881444709 + }, + "secure-web.cisco.com": { + "heuristicAction": "", + "nextUpdateTime": 1602378055496 + }, + "secure.adnxs.com": { + "heuristicAction": "", + "nextUpdateTime": 1601978353332 + }, + "secure.leadback.advertising.com": { + "heuristicAction": "", + "nextUpdateTime": 1602182833149 + }, + "secure.nikonsso.com": { + "heuristicAction": "allow" + }, + "secure.quantserve.com": { + "heuristicAction": "", + "nextUpdateTime": 1602371959433 + }, + "secure.statcounter.com": { + "heuristicAction": "", + "nextUpdateTime": 1601965857326 + }, + "secureaddisplay.com": { + "heuristicAction": "allow" + }, + "securedtouch.com": { + "heuristicAction": "block" + }, + "securedvisit.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602376785866 + }, + "securepubads.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601888542855 + }, + "secureserver.net": { + "heuristicAction": "block" + }, + "securetve.com": { + "heuristicAction": "allow" + }, + "seedr.com": { + "heuristicAction": "block" + }, + "seedtag.com": { + "heuristicAction": "block" + }, + "segment.com": { + "heuristicAction": "block" + }, + "segment.prod.bidr.io": { + "heuristicAction": "", + "nextUpdateTime": 1601987753587 + }, + "segs.jp": { + "heuristicAction": "allow" + }, + "sejs.moatads.com": { + "heuristicAction": "", + "nextUpdateTime": 1602290278082 + }, + "sekindo.com": { + "heuristicAction": "block" + }, + "selectmedia.asia": { + "heuristicAction": "allow" + }, + "self.com": { + "heuristicAction": "block" + }, + "sellpoints.com": { + "heuristicAction": "allow" + }, + "semasio.net": { + "heuristicAction": "block" + }, + "sembox.it": { + "heuristicAction": "allow" + }, + "semrush.com": { + "heuristicAction": "allow" + }, + "senseforth.com": { + "heuristicAction": "allow" + }, + "sensic.net": { + "heuristicAction": "allow" + }, + "sensorsdata.cn": { + "heuristicAction": "block" + }, + "sensorsdatavip.com": { + "heuristicAction": "allow" + }, + "sep.gob.mx": { + "heuristicAction": "allow" + }, + "serasaexperian.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601881469141 + }, + "serve2.cheqzone.com": { + "heuristicAction": "block" + }, + "servebom.com": { + "heuristicAction": "block" + }, + "servedby.flashtalking.com": { + "heuristicAction": "", + "nextUpdateTime": 1601986753963 + }, + "servedbyadbutler.com": { + "heuristicAction": "allow" + }, + "servenobid.com": { + "heuristicAction": "block" + }, + "serverbid.com": { + "heuristicAction": "block" + }, + "serving-sys.com": { + "heuristicAction": "block" + }, + "sessioncam.com": { + "heuristicAction": "block" + }, + "seznam.cz": { + "heuristicAction": "allow" + }, + "sf14g.com": { + "heuristicAction": "block" + }, + "sfegypt.com": { + "heuristicAction": "allow" + }, + "sfn.org": { + "heuristicAction": "allow" + }, + "sgkrehberi.com": { + "heuristicAction": "allow" + }, + "sgsme.sg": { + "heuristicAction": "allow" + }, + "shanghai.gov.cn": { + "heuristicAction": "allow" + }, + "shaqm.com": { + "heuristicAction": "allow" + }, + "shareaholic.com": { + "heuristicAction": "allow" + }, + "sharecare.com": { + "heuristicAction": "allow" + }, + "sharethis.com": { + "heuristicAction": "block" + }, + "sharethrough.com": { + "heuristicAction": "block" + }, + "shbdn.com": { + "heuristicAction": "allow" + }, + "shinobi.jp": { + "heuristicAction": "allow" + }, + "shinystat.com": { + "heuristicAction": "allow" + }, + "shld.net": { + "heuristicAction": "allow" + }, + "shoagnie.com": { + "heuristicAction": "allow" + }, + "shop.app": { + "heuristicAction": "allow" + }, + "shop.pe": { + "heuristicAction": "block", + "nextUpdateTime": 1602216733235 + }, + "shopbop.com": { + "heuristicAction": "allow" + }, + "shopclues-log.qoo10.in": { + "heuristicAction": "allow" + }, + "shopclues.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602340697713 + }, + "shopnetic.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601874192083 + }, + "shoprunner.com": { + "heuristicAction": "allow" + }, + "shopsocially.com": { + "heuristicAction": "allow" + }, + "show-3.mediav.com": { + "heuristicAction": "", + "nextUpdateTime": 1602326996244 + }, + "show-g.mediav.com": { + "heuristicAction": "", + "nextUpdateTime": 1602320655946 + }, + "shuidi.cn": { + "heuristicAction": "allow" + }, + "sibautomation.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602063149104 + }, + "sift.com": { + "heuristicAction": "block" + }, + "siftscience.com": { + "heuristicAction": "block" + }, + "signify.com": { + "heuristicAction": "allow" + }, + "signifyd.com": { + "heuristicAction": "block" + }, + "simility.com": { + "heuristicAction": "allow" + }, + "simpli.fi": { + "heuristicAction": "block" + }, + "sina.com.cn": { + "heuristicAction": "allow" + }, + "sindonews.com": { + "heuristicAction": "allow" + }, + "sinoptik.ua": { + "heuristicAction": "allow" + }, + "site-api.project1service.com": { + "heuristicAction": "allow" + }, + "site24x7rum.com": { + "heuristicAction": "block" + }, + "sitecore-prod-cd-westus2.azurewebsites.net": { + "heuristicAction": "allow" + }, + "sitedataprocessing.com": { + "heuristicAction": "allow" + }, + "siteimproveanalytics.io": { + "heuristicAction": "block" + }, + "sitelock.com": { + "heuristicAction": "allow" + }, + "sites.google.com": { + "heuristicAction": "cookieblock" + }, + "sitescout.com": { + "heuristicAction": "block" + }, + "sjs.bizographics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602138015634 + }, + "skimresources.com": { + "heuristicAction": "block" + }, + "skplanet.com": { + "heuristicAction": "allow" + }, + "sky.com": { + "heuristicAction": "allow" + }, + "sky.it": { + "heuristicAction": "allow" + }, + "slashdotmedia.com": { + "heuristicAction": "allow" + }, + "smaato.net": { + "heuristicAction": "allow" + }, + "smadex.com": { + "heuristicAction": "block" + }, + "smartadserver.com": { + "heuristicAction": "block" + }, + "smartclick.net": { + "heuristicAction": "allow" + }, + "smartlock.google.com": { + "heuristicAction": "cookieblock" + }, + "smartnews-ads.com": { + "heuristicAction": "block" + }, + "smartocto.com": { + "heuristicAction": "allow" + }, + "smartsurvey.co.uk": { + "heuristicAction": "allow" + }, + "smct.co": { + "heuristicAction": "allow" + }, + "smi2.net": { + "heuristicAction": "block" + }, + "smi2.ru": { + "heuristicAction": "block", + "nextUpdateTime": 1601993218631 + }, + "smilewanted.com": { + "heuristicAction": "allow" + }, + "smithsonian.museum": { + "heuristicAction": "allow" + }, + "snapchat.com": { + "heuristicAction": "block" + }, + "snapdeal.biz": { + "heuristicAction": "allow" + }, + "snapwidget.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602008543867 + }, + "snplow.net": { + "heuristicAction": "allow" + }, + "snrbox.com": { + "heuristicAction": "allow" + }, + "snssdk.com": { + "heuristicAction": "block" + }, + "so.com": { + "heuristicAction": "allow" + }, + "sobot.com": { + "heuristicAction": "block" + }, + "socdm.com": { + "heuristicAction": "allow" + }, + "socialintents.com": { + "heuristicAction": "allow" + }, + "soflopxl.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602194257939 + }, + "softspace.mobi": { + "heuristicAction": "allow" + }, + "sogei.it": { + "heuristicAction": "allow" + }, + "sogou.com": { + "heuristicAction": "allow" + }, + "sohu.com": { + "heuristicAction": "allow" + }, + "sojern.com": { + "heuristicAction": "block" + }, + "sol-data.com": { + "heuristicAction": "allow" + }, + "solarwinds.com": { + "heuristicAction": "allow" + }, + "solarwinds.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602166679164 + }, + "solarwinds.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602113549041 + }, + "solarwindscom.postaffiliatepro.com": { + "heuristicAction": "allow" + }, + "solosegment.com": { + "heuristicAction": "block" + }, + "solvemedia.com": { + "heuristicAction": "block" + }, + "somoydigital.com": { + "heuristicAction": "allow" + }, + "sonobi.com": { + "heuristicAction": "block" + }, + "sonygs.112.2o7.net": { + "heuristicAction": "cookieblock" + }, + "soundcloud.com": { + "heuristicAction": "block" + }, + "soundestlink.com": { + "heuristicAction": "allow" + }, + "sp-prod.net": { + "heuristicAction": "cookieblock" + }, + "sp-trk.com": { + "heuristicAction": "allow" + }, + "sp.analytics.yahoo.com": { + "heuristicAction": "", + "nextUpdateTime": 1601888585928 + }, + "sp0.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602012667372 + }, + "speakol.com": { + "heuristicAction": "allow" + }, + "spectate.com": { + "heuristicAction": "block" + }, + "speee-ad.jp": { + "heuristicAction": "allow" + }, + "sphereup.com": { + "heuristicAction": "block" + }, + "sphlabs.com": { + "heuristicAction": "allow" + }, + "spiceworks.com": { + "heuristicAction": "block" + }, + "spider.af": { + "heuristicAction": "allow" + }, + "spir.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1602356071152 + }, + "spl.zeotap.com": { + "heuristicAction": "", + "nextUpdateTime": 1602230859226 + }, + "spokenlayer.com": { + "heuristicAction": "block" + }, + "sportradarserving.com": { + "heuristicAction": "allow" + }, + "sportrecs.com": { + "heuristicAction": "allow" + }, + "spot.im": { + "heuristicAction": "cookieblock" + }, + "spoteffects.net": { + "heuristicAction": "allow" + }, + "spotify.com": { + "heuristicAction": "block" + }, + "spotim.market": { + "heuristicAction": "allow" + }, + "spotxchange.com": { + "heuristicAction": "block" + }, + "spreadsheets.google.com": { + "heuristicAction": "cookieblock" + }, + "spreadshirt.net": { + "heuristicAction": "allow" + }, + "spreaker.com": { + "heuristicAction": "allow" + }, + "springserve.com": { + "heuristicAction": "block" + }, + "sputnik.ru": { + "heuristicAction": "block" + }, + "square-enix.com": { + "heuristicAction": "allow" + }, + "squren.com": { + "heuristicAction": "allow" + }, + "srv-2020-10-04-06.pixel.parsely.com": { + "heuristicAction": "", + "nextUpdateTime": 1602239681633 + }, + "srv.stackadapt.com": { + "heuristicAction": "", + "nextUpdateTime": 1601966386714 + }, + "srvtrck.com": { + "heuristicAction": "allow" + }, + "srx.com.sg": { + "heuristicAction": "allow" + }, + "ssc-cms.33across.com": { + "heuristicAction": "", + "nextUpdateTime": 1601968622566 + }, + "ssc.33across.com": { + "heuristicAction": "", + "nextUpdateTime": 1602321438876 + }, + "ssense.com": { + "heuristicAction": "allow" + }, + "ssg.com": { + "heuristicAction": "allow" + }, + "ssl.cdne.cpmstar.com": { + "heuristicAction": "", + "nextUpdateTime": 1602114651275 + }, + "ssl.google-analytics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602191047157 + }, + "ssl.kaptcha.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602011610707 + }, + "ssl.widgets.webengage.com": { + "heuristicAction": "", + "nextUpdateTime": 1602089786764 + }, + "sslwidget.criteo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602331309444 + }, + "sspinc.io": { + "heuristicAction": "allow" + }, + "ssum-sec.casalemedia.com": { + "heuristicAction": "", + "nextUpdateTime": 1602269984446 + }, + "st-eu.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "st.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "st.top100.ru": { + "heuristicAction": "", + "nextUpdateTime": 1601954453930 + }, + "st1.dialogtech.com": { + "heuristicAction": "", + "nextUpdateTime": 1601931908696 + }, + "st8fm.com": { + "heuristicAction": "allow" + }, + "stack-sonar.com": { + "heuristicAction": "block" + }, + "stackadapt.com": { + "heuristicAction": "block" + }, + "stackoverflow.com": { + "heuristicAction": "cookieblock" + }, + "stackpathcdn.com": { + "heuristicAction": "allow" + }, + "stags.bluekai.com": { + "heuristicAction": "", + "nextUpdateTime": 1602198869250 + }, + "stat-rock.com": { + "heuristicAction": "allow" + }, + "stat.58che.com": { + "heuristicAction": "allow" + }, + "stat.media": { + "heuristicAction": "block", + "nextUpdateTime": 1602131719057 + }, + "stat.sputnik.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602117670479 + }, + "statad.ru": { + "heuristicAction": "block", + "nextUpdateTime": 1602117681549 + }, + "statcounter.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601910681132 + }, + "state.nj.us": { + "heuristicAction": "allow" + }, + "static.adman.gr": { + "heuristicAction": "", + "nextUpdateTime": 1602370657040 + }, + "static.adzerk.net": { + "heuristicAction": "", + "nextUpdateTime": 1602027101651 + }, + "static.anquan.org": { + "heuristicAction": "", + "nextUpdateTime": 1602192886104 + }, + "static.atgsvcs.com": { + "heuristicAction": "", + "nextUpdateTime": 1601965606799 + }, + "static.criteo.com": { + "dnt": true, + "heuristicAction": "", + "nextUpdateTime": 1602329585428 + }, + "static.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602248519672 + }, + "static.dynamicyield.com": { + "heuristicAction": "cookieblock" + }, + "static.hubspot.com": { + "heuristicAction": "cookieblock" + }, + "static.mediav.com": { + "heuristicAction": "", + "nextUpdateTime": 1602007569080 + }, + "static.mixi.media": { + "heuristicAction": "", + "nextUpdateTime": 1602399010417 + }, + "static.pushe.co": { + "heuristicAction": "allow" + }, + "static.queue-it.net": { + "heuristicAction": "cookieblock" + }, + "static.site24x7rum.com": { + "heuristicAction": "", + "nextUpdateTime": 1602328359757 + }, + "static.smi2.net": { + "heuristicAction": "", + "nextUpdateTime": 1602103616945 + }, + "static6.smi2.net": { + "heuristicAction": "", + "nextUpdateTime": 1602072012352 + }, + "static8.smi2.net": { + "heuristicAction": "", + "nextUpdateTime": 1602142620511 + }, + "staticcache.org": { + "heuristicAction": "allow" + }, + "staticw2.yotpo.com": { + "heuristicAction": "cookieblock" + }, + "staticworld.net": { + "heuristicAction": "allow" + }, + "staticxx.facebook.com": { + "heuristicAction": "cookieblock" + }, + "statistiek.rijksoverheid.nl": { + "heuristicAction": "allow" + }, + "stats.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1601923572193 + }, + "stats.monohost.com": { + "heuristicAction": "block" + }, + "stats1.wpmudev.com": { + "heuristicAction": "allow" + }, + "statse.webtrendslive.com": { + "heuristicAction": "allow" + }, + "statsy.net": { + "heuristicAction": "allow" + }, + "statuspage.io": { + "heuristicAction": "allow" + }, + "stdout.cz": { + "heuristicAction": "allow" + }, + "steelcentral.net": { + "heuristicAction": "allow" + }, + "steelhousemedia.com": { + "heuristicAction": "block" + }, + "stepstone.d3.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602104373051 + }, + "stickyadstv.com": { + "heuristicAction": "block" + }, + "stockdio.com": { + "heuristicAction": "allow" + }, + "storage.googleapis.com": { + "heuristicAction": "cookieblock" + }, + "stores-bloomingdales.com": { + "heuristicAction": "allow" + }, + "storygize.net": { + "heuristicAction": "allow" + }, + "stream.ne.jp": { + "heuristicAction": "allow" + }, + "streamingddigital.com": { + "heuristicAction": "allow" + }, + "streamtheworld.com": { + "heuristicAction": "block" + }, + "stripchat.com": { + "heuristicAction": "allow" + }, + "stripe.com": { + "heuristicAction": "cookieblock" + }, + "stripe.network": { + "heuristicAction": "block" + }, + "stripst.com": { + "heuristicAction": "allow" + }, + "striveme.com": { + "heuristicAction": "allow" + }, + "stucki.io": { + "heuristicAction": "allow" + }, + "studybreakmedia.com": { + "heuristicAction": "allow" + }, + "stylight.net": { + "heuristicAction": "allow" + }, + "subservis.com": { + "heuristicAction": "block" + }, + "summerhamster.com": { + "heuristicAction": "block" + }, + "sumo.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602058427021 + }, + "sumologic.com": { + "heuristicAction": "allow" + }, + "sundaysky.com": { + "heuristicAction": "block" + }, + "suning.cn": { + "heuristicAction": "allow" + }, + "suning.com": { + "heuristicAction": "allow" + }, + "sunrtb.com": { + "heuristicAction": "allow" + }, + "supplyframe.com": { + "heuristicAction": "block" + }, + "surfcountor.com": { + "heuristicAction": "allow" + }, + "survata.com": { + "heuristicAction": "allow" + }, + "survey.g.doubleclick.net": { + "heuristicAction": "", + "nextUpdateTime": 1602253622049 + }, + "svd.se": { + "heuristicAction": "allow" + }, + "svtrd.com": { + "heuristicAction": "allow" + }, + "swiftype.com": { + "heuristicAction": "cookieblock" + }, + "swisscom.ch": { + "heuristicAction": "allow" + }, + "swisspass.ch": { + "heuristicAction": "allow" + }, + "sy.guanjia.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602035908444 + }, + "symantec.com": { + "heuristicAction": "allow" + }, + "sync.adkernel.com": { + "heuristicAction": "", + "nextUpdateTime": 1602147540313 + }, + "sync.adtelligent.com": { + "heuristicAction": "", + "nextUpdateTime": 1602344399831 + }, + "sync.bfmio.com": { + "heuristicAction": "", + "nextUpdateTime": 1601957569574 + }, + "sync.go.sonobi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602165653499 + }, + "sync.search.spotxchange.com": { + "heuristicAction": "", + "nextUpdateTime": 1602297085040 + }, + "sync.serverbid.com": { + "heuristicAction": "", + "nextUpdateTime": 1602263991929 + }, + "sync.smartadserver.com": { + "heuristicAction": "", + "nextUpdateTime": 1601920071914 + }, + "sync.teads.tv": { + "heuristicAction": "", + "nextUpdateTime": 1602089032828 + }, + "synchrobox.adswizz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602249689678 + }, + "synchronycredit.com": { + "heuristicAction": "allow" + }, + "syndication.realsrv.com": { + "heuristicAction": "", + "nextUpdateTime": 1601877720294 + }, + "syndication.twitter.com": { + "heuristicAction": "cookieblock" + }, + "syndigo.cloud": { + "heuristicAction": "allow" + }, + "synopsys.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601946573109 + }, + "synopsysinc.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601918215528 + }, + "syr.edu": { + "heuristicAction": "allow" + }, + "syuh.net": { + "heuristicAction": "allow" + }, + "szzbmy.com": { + "heuristicAction": "allow" + }, + "t-mobilemoney.com": { + "heuristicAction": "allow" + }, + "t-x.io": { + "heuristicAction": "allow" + }, + "t.castle.io": { + "heuristicAction": "", + "nextUpdateTime": 1602064467886 + }, + "t.co": { + "heuristicAction": "allow" + }, + "t.contentsquare.net": { + "heuristicAction": "", + "nextUpdateTime": 1602381942912 + }, + "t.leady.com": { + "heuristicAction": "allow" + }, + "t.riverhit.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602098817755 + }, + "t.teads.tv": { + "heuristicAction": "", + "nextUpdateTime": 1602161626412 + }, + "taboola.com": { + "heuristicAction": "block" + }, + "tacdn.com": { + "heuristicAction": "allow" + }, + "tag.bounceexchange.com": { + "heuristicAction": "", + "nextUpdateTime": 1602181163845 + }, + "tag.contextweb.com": { + "heuristicAction": "", + "nextUpdateTime": 1601898720765 + }, + "tag.crsspxl.com": { + "heuristicAction": "", + "nextUpdateTime": 1602288014371 + }, + "tag.getdrip.com": { + "heuristicAction": "", + "nextUpdateTime": 1602154134775 + }, + "tag.mtrcs.samba.tv": { + "heuristicAction": "", + "nextUpdateTime": 1602228110240 + }, + "tag.researchnow.com": { + "heuristicAction": "", + "nextUpdateTime": 1602170632966 + }, + "tag.simpli.fi": { + "heuristicAction": "", + "nextUpdateTime": 1602029023410 + }, + "tag.yieldoptimizer.com": { + "heuristicAction": "", + "nextUpdateTime": 1602184388193 + }, + "tag4arm.com": { + "heuristicAction": "allow" + }, + "tagboard.com": { + "heuristicAction": "block" + }, + "tagcommander.com": { + "heuristicAction": "allow" + }, + "tagger.opecloud.com": { + "dnt": true, + "heuristicAction": "block", + "nextUpdateTime": 1602091653338 + }, + "tags.bluekai.com": { + "heuristicAction": "", + "nextUpdateTime": 1602323631748 + }, + "tags.crwdcntrl.net": { + "heuristicAction": "", + "nextUpdateTime": 1602155643109 + }, + "tags.growingio.com": { + "heuristicAction": "", + "nextUpdateTime": 1602063727145 + }, + "tags.srv.stackadapt.com": { + "heuristicAction": "", + "nextUpdateTime": 1602017121231 + }, + "tags.w55c.net": { + "heuristicAction": "", + "nextUpdateTime": 1601879168059 + }, + "tagtic.cn": { + "heuristicAction": "allow" + }, + "tailtarget.com": { + "heuristicAction": "block" + }, + "taj1.ebis.ne.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602143174257 + }, + "taj2.ebis.ne.jp": { + "heuristicAction": "", + "nextUpdateTime": 1602379219814 + }, + "tajs.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602311333065 + }, + "talkable.com": { + "heuristicAction": "allow" + }, + "talkgadget.google.com": { + "heuristicAction": "cookieblock" + }, + "tam.by": { + "heuristicAction": "allow" + }, + "tamedia.com.tw": { + "heuristicAction": "allow" + }, + "tamgrt.com": { + "heuristicAction": "block" + }, + "tanx.com": { + "heuristicAction": "allow" + }, + "taobao.com": { + "heuristicAction": "allow" + }, + "tap-cdn.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602248889731 + }, + "tapad.com": { + "heuristicAction": "block" + }, + "taplytics.com": { + "heuristicAction": "allow" + }, + "tapnative.com": { + "heuristicAction": "allow" + }, + "target.mixi.media": { + "heuristicAction": "", + "nextUpdateTime": 1602180846089 + }, + "targetspot.com": { + "heuristicAction": "block" + }, + "tavoos.net": { + "heuristicAction": "block", + "nextUpdateTime": 1601918424570 + }, + "tawk.to": { + "heuristicAction": "cookieblock" + }, + "taylorandfrancis.com": { + "heuristicAction": "allow" + }, + "tazabek.kg": { + "heuristicAction": "allow" + }, + "tchibo.de": { + "heuristicAction": "allow" + }, + "tctm.co": { + "heuristicAction": "allow" + }, + "tdefender.net": { + "heuristicAction": "allow" + }, + "teads.tv": { + "heuristicAction": "block" + }, + "tealiumiq.com": { + "heuristicAction": "block" + }, + "techlab-cdn.com": { + "heuristicAction": "block" + }, + "technical-service.net": { + "heuristicAction": "block" + }, + "technologyadvice.com": { + "heuristicAction": "allow" + }, + "technoratimedia.com": { + "heuristicAction": "block" + }, + "techonline.com": { + "heuristicAction": "allow" + }, + "techtarget.com": { + "heuristicAction": "block" + }, + "techweb.com": { + "heuristicAction": "block" + }, + "teenvogue.com": { + "heuristicAction": "block" + }, + "telekom.de": { + "heuristicAction": "allow" + }, + "telem.highlow.net": { + "heuristicAction": "allow" + }, + "teleport.media": { + "heuristicAction": "allow" + }, + "televebion.net": { + "heuristicAction": "allow" + }, + "tend-table.com": { + "heuristicAction": "allow" + }, + "tenmax.io": { + "heuristicAction": "allow" + }, + "terminus.services": { + "heuristicAction": "block" + }, + "tessabititalia01.wt-eu02.net": { + "heuristicAction": "", + "nextUpdateTime": 1601940644127 + }, + "tfaforms.net": { + "heuristicAction": "block" + }, + "theadex.com": { + "heuristicAction": "block" + }, + "thebrighttag.com": { + "heuristicAction": "block" + }, + "theglobeandmail.ca": { + "heuristicAction": "allow" + }, + "thehindu.com": { + "heuristicAction": "allow" + }, + "theice.com": { + "heuristicAction": "allow" + }, + "thejobnetwork.com": { + "heuristicAction": "allow" + }, + "them.us": { + "heuristicAction": "block" + }, + "themarker.com": { + "heuristicAction": "allow" + }, + "thenewstribune.com": { + "heuristicAction": "allow" + }, + "theregister.co.uk": { + "heuristicAction": "allow" + }, + "thesame.tv": { + "heuristicAction": "allow" + }, + "thesun.co.uk": { + "heuristicAction": "allow" + }, + "thinkpad.com": { + "heuristicAction": "allow" + }, + "threewave.jp": { + "heuristicAction": "allow" + }, + "thron.com": { + "heuristicAction": "allow" + }, + "thrtle.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601817960909 + }, + "thunderhead.com": { + "heuristicAction": "block" + }, + "ti.com.cn": { + "heuristicAction": "allow" + }, + "tidaltv.com": { + "heuristicAction": "block" + }, + "tie.247-inc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602274672225 + }, + "tij.co.jp": { + "heuristicAction": "allow" + }, + "timecommerce.net": { + "heuristicAction": "block" + }, + "timewarnercable.com": { + "heuristicAction": "allow" + }, + "tinkoffinsurance.ru": { + "heuristicAction": "allow" + }, + "tinypass.com": { + "heuristicAction": "cookieblock" + }, + "tiqcdn.com": { + "heuristicAction": "cookieblock" + }, + "titoaktop.com": { + "heuristicAction": "allow" + }, + "tkx-acc.apis.anvato.net": { + "heuristicAction": "cookieblock" + }, + "tkx.apis.anvato.net": { + "heuristicAction": "cookieblock" + }, + "tkx2-prod.anvato.net": { + "heuristicAction": "cookieblock" + }, + "tlx.3lift.com": { + "heuristicAction": "", + "nextUpdateTime": 1602097377602 + }, + "tmall.ru": { + "heuristicAction": "allow" + }, + "tmobile.com": { + "heuristicAction": "allow" + }, + "tns-counter.ru": { + "heuristicAction": "block", + "nextUpdateTime": 1602103569233 + }, + "tns-cs.net": { + "heuristicAction": "allow" + }, + "tns-ua.com": { + "heuristicAction": "block" + }, + "toast.com": { + "heuristicAction": "block" + }, + "tombot.ai": { + "heuristicAction": "allow" + }, + "tomtop.com": { + "heuristicAction": "allow" + }, + "tongdun.cn": { + "heuristicAction": "allow" + }, + "top-fwz1.mail.ru": { + "heuristicAction": "cookieblock" + }, + "top100.ru": { + "heuristicAction": "block" + }, + "top4top.io": { + "heuristicAction": "allow" + }, + "toplist.cz": { + "heuristicAction": "allow" + }, + "tourismnz.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601991925973 + }, + "toutapp.com": { + "heuristicAction": "allow" + }, + "tpcf.feedify.net": { + "heuristicAction": "", + "nextUpdateTime": 1602183085925 + }, + "tpx.virtuoussoftware.com": { + "heuristicAction": "allow" + }, + "tq.cn": { + "heuristicAction": "allow" + }, + "tr.hit.gemius.pl": { + "heuristicAction": "", + "nextUpdateTime": 1601903270252 + }, + "tr.line.me": { + "heuristicAction": "", + "nextUpdateTime": 1601963397704 + }, + "tr.outbrain.com": { + "heuristicAction": "", + "nextUpdateTime": 1602088464253 + }, + "track.adform.net": { + "heuristicAction": "", + "nextUpdateTime": 1601895353471 + }, + "track.hubspot.com": { + "heuristicAction": "", + "nextUpdateTime": 1602059908134 + }, + "track.in.omgpm.com": { + "heuristicAction": "allow" + }, + "trackad.cz": { + "heuristicAction": "allow" + }, + "trackalyzer.com": { + "heuristicAction": "allow" + }, + "tracker.metricool.com": { + "heuristicAction": "allow" + }, + "tracking.imspublishergroup.com": { + "heuristicAction": "allow" + }, + "tracking.magnetmail.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602356020492 + }, + "tradablebits.com": { + "heuristicAction": "allow" + }, + "tradedoubler.com": { + "heuristicAction": "block" + }, + "tradelab.fr": { + "heuristicAction": "block" + }, + "tradingview.com": { + "heuristicAction": "cookieblock" + }, + "traffic-media.co.uk": { + "heuristicAction": "allow" + }, + "trafficbass.com": { + "heuristicAction": "block" + }, + "trafficdok.com": { + "heuristicAction": "allow" + }, + "trafficgate.net": { + "heuristicAction": "allow" + }, + "trafficgateway.research-int.se": { + "heuristicAction": "", + "nextUpdateTime": 1602117570192 + }, + "trafficguard.ai": { + "heuristicAction": "block" + }, + "trafficjunky.net": { + "heuristicAction": "block" + }, + "trafficlide.com": { + "heuristicAction": "allow" + }, + "trafficsan.com": { + "heuristicAction": "allow" + }, + "trafmag.com": { + "heuristicAction": "block" + }, + "transferwise.com": { + "heuristicAction": "allow" + }, + "translate.google.com": { + "heuristicAction": "cookieblock" + }, + "travelaudience.com": { + "heuristicAction": "allow" + }, + "trbna.com": { + "heuristicAction": "allow" + }, + "trc.taboola.com": { + "heuristicAction": "", + "nextUpdateTime": 1602226893177 + }, + "trck.bebi.com": { + "heuristicAction": "", + "nextUpdateTime": 1601887189692 + }, + "treasuredata.com": { + "heuristicAction": "block" + }, + "tremorhub.com": { + "heuristicAction": "block" + }, + "trendemon.com": { + "heuristicAction": "block" + }, + "trendmd.com": { + "heuristicAction": "allow" + }, + "trends.google.com": { + "heuristicAction": "cookieblock" + }, + "trends.so.com": { + "heuristicAction": "allow" + }, + "tribalfusion.com": { + "heuristicAction": "block" + }, + "tribl.io": { + "heuristicAction": "block", + "nextUpdateTime": 1602093085208 + }, + "trinitymedia.ai": { + "heuristicAction": "allow" + }, + "trip.com": { + "heuristicAction": "allow" + }, + "tripadvisor.com": { + "heuristicAction": "allow" + }, + "tripcdn.com": { + "heuristicAction": "allow" + }, + "tritondigitalcom.mpeasylink.com": { + "heuristicAction": "", + "nextUpdateTime": 1602394073297 + }, + "trk.techtarget.com": { + "heuristicAction": "", + "nextUpdateTime": 1602354783188 + }, + "trkn.us": { + "heuristicAction": "block", + "nextUpdateTime": 1601938841368 + }, + "trs.cn": { + "heuristicAction": "allow" + }, + "truefitcorp.com": { + "heuristicAction": "allow" + }, + "truehits.in.th": { + "heuristicAction": "block" + }, + "truepush.com": { + "heuristicAction": "block" + }, + "trumba.com": { + "heuristicAction": "cookieblock" + }, + "truoptik.com": { + "heuristicAction": "allow" + }, + "trustarc.com": { + "heuristicAction": "block" + }, + "trustcommander.net": { + "heuristicAction": "allow" + }, + "trustedsite.com": { + "heuristicAction": "allow" + }, + "trustivity.es": { + "heuristicAction": "allow" + }, + "trustseal.enamad.ir": { + "heuristicAction": "", + "nextUpdateTime": 1601994455536 + }, + "trustspot.io": { + "heuristicAction": "allow" + }, + "trvl-px.com": { + "heuristicAction": "allow" + }, + "trwl1.com": { + "heuristicAction": "allow" + }, + "trysera.com": { + "heuristicAction": "allow" + }, + "tsyndicate.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601933193114 + }, + "tucarro.com.co": { + "heuristicAction": "allow" + }, + "tucarro.com.ve": { + "heuristicAction": "allow" + }, + "tuinmueble.com.ve": { + "heuristicAction": "allow" + }, + "tumoto.com.co": { + "heuristicAction": "allow" + }, + "tumoto.com.ve": { + "heuristicAction": "allow" + }, + "turn.com": { + "heuristicAction": "block" + }, + "tutu.travel": { + "heuristicAction": "allow" + }, + "tvinsider.com": { + "heuristicAction": "allow" + }, + "tvopen.gr": { + "heuristicAction": "allow" + }, + "tvpage.com": { + "heuristicAction": "allow" + }, + "tvpixel.com": { + "heuristicAction": "block" + }, + "tvsquared.com": { + "heuristicAction": "block" + }, + "tw.cx": { + "heuristicAction": "allow" + }, + "twcroadrunner.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1601893173850 + }, + "twimg.com": { + "heuristicAction": "cookieblock" + }, + "twitch.tv": { + "heuristicAction": "cookieblock" + }, + "twitter.com": { + "heuristicAction": "cookieblock" + }, + "twnmm.com": { + "heuristicAction": "allow" + }, + "tynt.com": { + "heuristicAction": "block" + }, + "typekit.net": { + "heuristicAction": "cookieblock" + }, + "u.myopenads.com": { + "heuristicAction": "allow" + }, + "u.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602322494313 + }, + "u7u9.com": { + "heuristicAction": "allow" + }, + "ua.tutu.travel": { + "heuristicAction": "allow" + }, + "ua.yektanet.com": { + "heuristicAction": "", + "nextUpdateTime": 1602163743001 + }, + "uadexchange.com": { + "heuristicAction": "allow" + }, + "ubic.tech": { + "heuristicAction": "allow" + }, + "ubm.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602017368947 + }, + "ubmtech.d3.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602299287152 + }, + "uc.se": { + "heuristicAction": "allow" + }, + "ucfly.com": { + "heuristicAction": "allow" + }, + "ucgstatic.eu": { + "heuristicAction": "allow" + }, + "uciservice.com": { + "heuristicAction": "allow" + }, + "udemy.com": { + "heuristicAction": "allow" + }, + "udesk.cn": { + "heuristicAction": "block" + }, + "udimg.com": { + "heuristicAction": "allow" + }, + "udmserve.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602090024562 + }, + "ufpcdn.com": { + "heuristicAction": "allow" + }, + "ughr.contentexchange.me": { + "heuristicAction": "", + "nextUpdateTime": 1602067823662 + }, + "uicdn.net": { + "heuristicAction": "block" + }, + "uikc.net": { + "heuristicAction": "allow" + }, + "uimserv.net": { + "heuristicAction": "allow" + }, + "ukr.net": { + "heuristicAction": "allow" + }, + "ukw.jp": { + "heuristicAction": "allow" + }, + "ulb.ac.be": { + "heuristicAction": "allow" + }, + "ulclick.ru": { + "heuristicAction": "allow" + }, + "ulogin.ru": { + "heuristicAction": "allow" + }, + "ultainc.com": { + "heuristicAction": "allow" + }, + "ultimate-guitar-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602167774661 + }, + "ultimedia.com": { + "heuristicAction": "allow" + }, + "unbxdapi.com": { + "heuristicAction": "allow" + }, + "uncn.jp": { + "heuristicAction": "allow" + }, + "uncrate.supply": { + "heuristicAction": "allow" + }, + "undertone.com": { + "heuristicAction": "block" + }, + "uni-frankfurt.de": { + "heuristicAction": "allow" + }, + "unicc.org": { + "heuristicAction": "allow" + }, + "unidata.ai": { + "heuristicAction": "allow" + }, + "unileverna.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602291220552 + }, + "unileverna.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602254186366 + }, + "unisender.com": { + "heuristicAction": "allow" + }, + "unite.com": { + "heuristicAction": "allow" + }, + "unsplash.com": { + "heuristicAction": "cookieblock" + }, + "uol.com.br": { + "heuristicAction": "allow" + }, + "uplift-platform.com": { + "heuristicAction": "allow" + }, + "upravel.com": { + "heuristicAction": "block" + }, + "ups.analytics.yahoo.com": { + "heuristicAction": "", + "nextUpdateTime": 1602116844291 + }, + "upsellit.com": { + "heuristicAction": "allow" + }, + "uptime.com": { + "heuristicAction": "block" + }, + "uq.net.au": { + "heuristicAction": "allow" + }, + "uqhv.net": { + "heuristicAction": "allow" + }, + "urbandictionary.store": { + "heuristicAction": "allow" + }, + "urldefense.proofpoint.com": { + "heuristicAction": "", + "nextUpdateTime": 1602051293160 + }, + "us-central1-ah-acemarketingteam.cloudfunctions.net": { + "heuristicAction": "allow" + }, + "us-central1-zendesk-functions.cloudfunctions.net": { + "heuristicAction": "allow" + }, + "us-u.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1601919909061 + }, + "us.commitchange.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602236744801 + }, + "us.creativecdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602342025706 + }, + "usaa360.com": { + "heuristicAction": "allow" + }, + "useinsider.com": { + "heuristicAction": "block" + }, + "user-red.com": { + "heuristicAction": "allow" + }, + "usercentrics.eu": { + "heuristicAction": "block" + }, + "usergram.info": { + "heuristicAction": "block" + }, + "userreplay.net": { + "heuristicAction": "block" + }, + "userreport.com": { + "heuristicAction": "block" + }, + "uservoice.com": { + "heuristicAction": "block" + }, + "userzoom.com": { + "heuristicAction": "allow" + }, + "usocial.pro": { + "heuristicAction": "allow" + }, + "usonar.jp": { + "heuristicAction": "allow" + }, + "uspech.sk": { + "heuristicAction": "allow" + }, + "utarget.ru": { + "heuristicAction": "allow" + }, + "uuidksinc.net": { + "heuristicAction": "allow" + }, + "uxfeedback.ru": { + "heuristicAction": "block" + }, + "v1.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602306542384 + }, + "v2.ferret-one.com": { + "heuristicAction": "allow" + }, + "vads.net.vn": { + "heuristicAction": "allow" + }, + "valkirum.com": { + "heuristicAction": "allow" + }, + "valuecommerce.com": { + "heuristicAction": "block" + }, + "valuecommerce.ne.jp": { + "heuristicAction": "allow" + }, + "vanityfair.com": { + "heuristicAction": "block" + }, + "veinteractive.com": { + "heuristicAction": "allow" + }, + "velaro.com": { + "heuristicAction": "allow" + }, + "vendemore.com": { + "heuristicAction": "allow" + }, + "vergic.com": { + "heuristicAction": "allow" + }, + "vertebrae-axis.com": { + "heuristicAction": "allow" + }, + "verticalhealth.net": { + "heuristicAction": "allow" + }, + "vgtrk.com": { + "heuristicAction": "allow" + }, + "vgwort.de": { + "heuristicAction": "allow" + }, + "viafoura.co": { + "heuristicAction": "block" + }, + "viatorinc.com": { + "heuristicAction": "allow" + }, + "vid.springserve.com": { + "heuristicAction": "", + "nextUpdateTime": 1601943046815 + }, + "vidads.gr": { + "heuristicAction": "allow" + }, + "vidassets.terminus.services": { + "heuristicAction": "", + "nextUpdateTime": 1602089418705 + }, + "vidazoo.com": { + "heuristicAction": "allow" + }, + "video-ads.rubiconproject.com": { + "heuristicAction": "", + "nextUpdateTime": 1602185582359 + }, + "video-cdn.net": { + "heuristicAction": "allow" + }, + "video.google.com": { + "heuristicAction": "cookieblock" + }, + "videohub.tv": { + "heuristicAction": "block" + }, + "vidgrid.com": { + "heuristicAction": "allow" + }, + "vidible.tv": { + "heuristicAction": "cookieblock" + }, + "vidio.com": { + "heuristicAction": "allow" + }, + "vidyard.com": { + "heuristicAction": "block" + }, + "vietid.net": { + "heuristicAction": "allow" + }, + "vietnamnettv.vn": { + "heuristicAction": "allow" + }, + "viglink.com": { + "heuristicAction": "block" + }, + "vihub.ru": { + "heuristicAction": "block" + }, + "viki.io": { + "heuristicAction": "allow" + }, + "vindicosuite.com": { + "heuristicAction": "block" + }, + "viostream.com": { + "heuristicAction": "allow" + }, + "vip.com": { + "heuristicAction": "allow" + }, + "vipstatic.com": { + "heuristicAction": "allow" + }, + "viqeo.tv": { + "heuristicAction": "allow" + }, + "viralize.tv": { + "heuristicAction": "allow" + }, + "virgul.com": { + "heuristicAction": "allow" + }, + "virtuoussoftware.com": { + "heuristicAction": "allow" + }, + "visa.com": { + "heuristicAction": "allow" + }, + "visilabs.net": { + "heuristicAction": "allow" + }, + "visitor-service.tealiumiq.com": { + "heuristicAction": "", + "nextUpdateTime": 1601938774970 + }, + "visitor-track.com": { + "heuristicAction": "allow" + }, + "visualstudio.com": { + "heuristicAction": "block" + }, + "visualwebsiteoptimizer.com": { + "heuristicAction": "block" + }, + "vivino.com": { + "heuristicAction": "allow" + }, + "vivocha.com": { + "heuristicAction": "allow" + }, + "vizergy.com": { + "heuristicAction": "allow" + }, + "vizury.com": { + "heuristicAction": "allow" + }, + "vk.com": { + "heuristicAction": "block", + "nextUpdateTime": 1601925889427 + }, + "vnecdn.net": { + "heuristicAction": "allow" + }, + "vodgc.net": { + "heuristicAction": "allow" + }, + "vogue.com": { + "heuristicAction": "block" + }, + "voidboost.net": { + "heuristicAction": "allow" + }, + "volvelle.tech": { + "heuristicAction": "allow" + }, + "voxmedia.com": { + "heuristicAction": "cookieblock" + }, + "vporn.com": { + "heuristicAction": "allow" + }, + "vroom.be": { + "heuristicAction": "allow" + }, + "vrtzads.com": { + "heuristicAction": "allow" + }, + "vstocklab.com": { + "heuristicAction": "allow" + }, + "vt.myvisualiq.net": { + "heuristicAction": "", + "nextUpdateTime": 1601973714294 + }, + "vupulse.com": { + "heuristicAction": "allow" + }, + "vzew.net": { + "heuristicAction": "allow" + }, + "w.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602001681617 + }, + "w.estat.com": { + "heuristicAction": "", + "nextUpdateTime": 1602280601366 + }, + "w.soundcloud.com": { + "heuristicAction": "", + "nextUpdateTime": 1602240076207 + }, + "w55c.net": { + "heuristicAction": "block" + }, + "w8.com.cn": { + "heuristicAction": "allow" + }, + "walkme.com": { + "heuristicAction": "allow" + }, + "wallkit.net": { + "heuristicAction": "allow" + }, + "wan.liebao.cn": { + "heuristicAction": "allow" + }, + "watertu.com": { + "heuristicAction": "allow" + }, + "waytogrow-d.openx.net": { + "heuristicAction": "", + "nextUpdateTime": 1602264248553 + }, + "wbtrk.net": { + "heuristicAction": "block" + }, + "wcfbc.net": { + "heuristicAction": "block" + }, + "wcs.naver.com": { + "heuristicAction": "", + "nextUpdateTime": 1601931986654 + }, + "wdsvc.net": { + "heuristicAction": "block" + }, + "web.hb.ad.cpe.dotomi.com": { + "heuristicAction": "", + "nextUpdateTime": 1602260342262 + }, + "webankieta.pl": { + "heuristicAction": "allow" + }, + "webantenna.info": { + "heuristicAction": "block" + }, + "webengage.com": { + "heuristicAction": "block" + }, + "webeyez.com": { + "heuristicAction": "allow" + }, + "webforms-here.com": { + "heuristicAction": "allow" + }, + "webmd.com": { + "heuristicAction": "allow" + }, + "webnode.com": { + "heuristicAction": "allow" + }, + "weborama.fr": { + "heuristicAction": "block" + }, + "webpubcontent.raycommedia.com": { + "heuristicAction": "allow" + }, + "webpush.jp": { + "heuristicAction": "block" + }, + "webs.com": { + "heuristicAction": "allow" + }, + "websdk.appsflyer.com": { + "heuristicAction": "", + "nextUpdateTime": 1602309768472 + }, + "webspectator.com": { + "heuristicAction": "block" + }, + "webterren.com": { + "heuristicAction": "block" + }, + "webtracker.jp": { + "heuristicAction": "allow" + }, + "webtrafficsource.com": { + "heuristicAction": "allow" + }, + "webtrekk.net": { + "heuristicAction": "block" + }, + "webtrendslive.com": { + "heuristicAction": "allow" + }, + "webturn.ru": { + "heuristicAction": "allow" + }, + "webullfintech.com": { + "heuristicAction": "allow" + }, + "webvisor.org": { + "heuristicAction": "block" + }, + "weekli.de": { + "heuristicAction": "allow" + }, + "weibo.com": { + "heuristicAction": "block" + }, + "wellsmedia.com": { + "heuristicAction": "allow" + }, + "wemfbox.ch": { + "heuristicAction": "block" + }, + "wemorefun.com": { + "heuristicAction": "allow" + }, + "west.cn": { + "heuristicAction": "allow" + }, + "westernsydneyuni.tt.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602391504256 + }, + "wgu.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602230387749 + }, + "whistleout.com": { + "heuristicAction": "allow" + }, + "wi-fi.ru": { + "heuristicAction": "block" + }, + "widengle.com": { + "heuristicAction": "allow" + }, + "widget-mediator.zopim.com": { + "heuristicAction": "allow" + }, + "widgets.tvinsider.com": { + "heuristicAction": "allow" + }, + "wikia-services.com": { + "heuristicAction": "allow" + }, + "wikipedia.org": { + "heuristicAction": "allow" + }, + "wintechnologies.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1602355945198 + }, + "wiqhit.com": { + "heuristicAction": "allow" + }, + "wired.com": { + "heuristicAction": "block" + }, + "wishabi.com": { + "heuristicAction": "cookieblock" + }, + "wisokykulas.bid": { + "heuristicAction": "allow" + }, + "wistia.com": { + "heuristicAction": "allow" + }, + "wistia.net": { + "heuristicAction": "cookieblock" + }, + "wix.com": { + "heuristicAction": "allow" + }, + "wkxppshj-qx.global.ssl.fastly.net": { + "heuristicAction": "cookieblock" + }, + "wnyc.org": { + "heuristicAction": "allow" + }, + "wo-cloud.com": { + "heuristicAction": "allow" + }, + "wondershare.com": { + "heuristicAction": "allow" + }, + "workplace.tools": { + "heuristicAction": "allow" + }, + "worldbankgroup.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602384920990 + }, + "wp.com": { + "heuristicAction": "cookieblock" + }, + "wpa.b.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602206222609 + }, + "wpa.qq.com": { + "heuristicAction": "", + "nextUpdateTime": 1602217904450 + }, + "wpmudev.com": { + "heuristicAction": "allow" + }, + "ws.sharethis.com": { + "heuristicAction": "", + "nextUpdateTime": 1602347496165 + }, + "wsod.com": { + "heuristicAction": "block" + }, + "wsu.demdex.net": { + "heuristicAction": "", + "nextUpdateTime": 1601903384315 + }, + "wsu.sc.omtrdc.net": { + "heuristicAction": "", + "nextUpdateTime": 1602190813278 + }, + "wt-eu02.net": { + "heuristicAction": "block" + }, + "wt.soundestlink.com": { + "heuristicAction": "allow" + }, + "wufoo.com": { + "heuristicAction": "allow" + }, + "ww1097.smartadserver.com": { + "heuristicAction": "", + "nextUpdateTime": 1601885701147 + }, + "www.aftonbladet.se": { + "heuristicAction": "allow" + }, + "www.alsa.org": { + "heuristicAction": "allow" + }, + "www.barilliance.net": { + "heuristicAction": "allow" + }, + "www.bing.com": { + "heuristicAction": "cookieblock" + }, + "www.bizographics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602336555860 + }, + "www.blogsky.com": { + "heuristicAction": "allow" + }, + "www.clublibertaddigital.com": { + "heuristicAction": "allow" + }, + "www.dataplusmath.com": { + "heuristicAction": "allow" + }, + "www.drcareers.ca": { + "heuristicAction": "allow" + }, + "www.dropbox.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602396705479 + }, + "www.duba.com": { + "heuristicAction": "allow" + }, + "www.facebook.com": { + "heuristicAction": "cookieblock" + }, + "www.fastcounter.de": { + "heuristicAction": "allow" + }, + "www.fresnobee.com": { + "heuristicAction": "allow" + }, + "www.gimp.org": { + "heuristicAction": "allow" + }, + "www.glassdoor.com": { + "heuristicAction": "allow" + }, + "www.google-analytics.com": { + "heuristicAction": "", + "nextUpdateTime": 1602158166176 + }, + "www.google.com": { + "heuristicAction": "cookieblock" + }, + "www.i.matheranalytics.com": { + "heuristicAction": "", + "nextUpdateTime": 1601907374810 + }, + "www.lightboxcdn.com": { + "heuristicAction": "", + "nextUpdateTime": 1602084731122 + }, + "www.medtargetsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602161711148 + }, + "www.mulesoft.com": { + "heuristicAction": "allow" + }, + "www.patreon.com": { + "heuristicAction": "allow" + }, + "www.prlog.org": { + "heuristicAction": "allow" + }, + "www.rumiview.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602063993962 + }, + "www.sacbee.com": { + "heuristicAction": "", + "nextUpdateTime": 1602137148935 + }, + "www.sobot.com": { + "heuristicAction": "", + "nextUpdateTime": 1602091972046 + }, + "www.socialintents.com": { + "heuristicAction": "allow" + }, + "www.statcounter.com": { + "heuristicAction": "", + "nextUpdateTime": 1602158471844 + }, + "www.summerhamster.com": { + "heuristicAction": "", + "nextUpdateTime": 1601997652028 + }, + "www.thenewstribune.com": { + "heuristicAction": "allow" + }, + "www.tns-counter.ru": { + "heuristicAction": "", + "nextUpdateTime": 1602150975062 + }, + "www.ultimedia.com": { + "heuristicAction": "allow" + }, + "www.webnode.com": { + "heuristicAction": "allow" + }, + "www.whistleout.com": { + "heuristicAction": "allow" + }, + "www.wikipedia.org": { + "heuristicAction": "allow" + }, + "www.youtube.com": { + "heuristicAction": "cookieblock" + }, + "www.youvisit.com": { + "heuristicAction": "", + "nextUpdateTime": 1602012142114 + }, + "wwwimages.adobe.com": { + "heuristicAction": "cookieblock" + }, + "wzrkt.com": { + "heuristicAction": "block", + "nextUpdateTime": 1602264066531 + }, + "x.bidswitch.net": { + "heuristicAction": "", + "nextUpdateTime": 1602218329857 + }, + "xesimg.com": { + "heuristicAction": "allow" + }, + "xg4ken.com": { + "heuristicAction": "block" + }, + "xhr.invl.co": { + "heuristicAction": "allow" + }, + "xhuc.net": { + "heuristicAction": "allow" + }, + "xinhuanet.com": { + "heuristicAction": "allow" + }, + "xinnet.com": { + "heuristicAction": "allow" + }, + "xiti.com": { + "heuristicAction": "block" + }, + "xiu123.cn": { + "heuristicAction": "allow" + }, + "xlisting.jp": { + "heuristicAction": "block" + }, + "xsdownload.adobe.com": { + "heuristicAction": "cookieblock" + }, + "xspadvertising.com": { + "heuristicAction": "block" + }, + "xtremepush.com": { + "heuristicAction": "block" + }, + "xuannaer.datasink.sensorsdata.cn": { + "heuristicAction": "block" + }, + "xunlei.com": { + "heuristicAction": "allow" + }, + "xxxlutz.de": { + "heuristicAction": "allow" + }, + "y3.analytics.yahoo.com": { + "heuristicAction": "cookieblock" + }, + "yad2.co.il": { + "heuristicAction": "allow" + }, + "yadro.ru": { + "heuristicAction": "block" + }, + "yads.yahoo.co.jp": { + "heuristicAction": "", + "nextUpdateTime": 1601984011639 + }, + "yahoo.co.jp": { + "heuristicAction": "block" + }, + "yahoo.com": { + "heuristicAction": "block" + }, + "yahoo.net": { + "heuristicAction": "allow" + }, + "yandex.ru": { + "heuristicAction": "block", + "nextUpdateTime": 1601896175459 + }, + "yapfiles.ru": { + "heuristicAction": "allow" + }, + "yccdn.com": { + "heuristicAction": "allow" + }, + "yektanet.com": { + "heuristicAction": "block" + }, + "yellowblue.io": { + "heuristicAction": "allow" + }, + "yiche.com": { + "heuristicAction": "allow" + }, + "yieldify.com": { + "heuristicAction": "allow" + }, + "yieldlab.net": { + "heuristicAction": "block" + }, + "yieldmanager.com": { + "heuristicAction": "allow" + }, + "yieldmo.com": { + "heuristicAction": "block" + }, + "yieldoptimizer.com": { + "heuristicAction": "block" + }, + "yjtag.yahoo.co.jp": { + "heuristicAction": "", + "nextUpdateTime": 1601886321420 + }, + "yodasoft.in": { + "heuristicAction": "allow" + }, + "yomedia.vn": { + "heuristicAction": "allow" + }, + "yonhapnews.co.kr": { + "heuristicAction": "allow" + }, + "yoox.it": { + "heuristicAction": "block" + }, + "yotpo.com": { + "heuristicAction": "cookieblock" + }, + "youdemai.com": { + "heuristicAction": "allow" + }, + "youku.com": { + "heuristicAction": "allow" + }, + "youplay.se": { + "heuristicAction": "allow" + }, + "youtube-nocookie.com": { + "heuristicAction": "cookieblock" + }, + "youtube.com": { + "heuristicAction": "cookieblock" + }, + "youvisit.com": { + "heuristicAction": "block" + }, + "yumpu.com": { + "heuristicAction": "allow" + }, + "yunaq.com": { + "heuristicAction": "block" + }, + "yystatic.com": { + "heuristicAction": "allow" + }, + "z-analytics.net": { + "heuristicAction": "allow" + }, + "z-na.amazon-adsystem.com": { + "heuristicAction": "", + "nextUpdateTime": 1602112943968 + }, + "z.moatads.com": { + "heuristicAction": "", + "nextUpdateTime": 1601951726373 + }, + "z6rjha.net": { + "heuristicAction": "allow" + }, + "zadn.vn": { + "heuristicAction": "allow" + }, + "zaius.com": { + "heuristicAction": "allow" + }, + "zalo.me": { + "heuristicAction": "block" + }, + "zaloapp.com": { + "heuristicAction": "allow" + }, + "zara.net": { + "heuristicAction": "allow" + }, + "zarabotkipro.ru": { + "heuristicAction": "allow" + }, + "zdbb.net": { + "heuristicAction": "block", + "nextUpdateTime": 1602269598152 + }, + "zdmimg.com": { + "heuristicAction": "allow" + }, + "zdw.w8.com.cn": { + "heuristicAction": "allow" + }, + "zdwidget3-bs.sphereup.com": { + "heuristicAction": "", + "nextUpdateTime": 1602289914755 + }, + "zebestof.com": { + "heuristicAction": "allow" + }, + "zedo.com": { + "heuristicAction": "block" + }, + "zemanta.com": { + "heuristicAction": "block" + }, + "zendesk.com": { + "heuristicAction": "cookieblock" + }, + "zengenti.com": { + "heuristicAction": "allow" + }, + "zeotap.com": { + "heuristicAction": "block" + }, + "zergnet.com": { + "heuristicAction": "block" + }, + "zero.kz": { + "heuristicAction": "allow" + }, + "zeronaught.com": { + "heuristicAction": "allow" + }, + "zg-api.com": { + "heuristicAction": "allow" + }, + "zhugeapi.net": { + "heuristicAction": "allow" + }, + "zhugeio.com": { + "heuristicAction": "allow" + }, + "ziffdavis.com": { + "heuristicAction": "allow" + }, + "ziftsolutions.com": { + "heuristicAction": "allow" + }, + "zimmo.be": { + "heuristicAction": "allow" + }, + "zineone.com": { + "heuristicAction": "allow" + }, + "zippyfrog.co": { + "heuristicAction": "allow" + }, + "zipwiresw.com": { + "heuristicAction": "allow" + }, + "znsps-bl6wf.ads.tremorhub.com": { + "heuristicAction": "", + "nextUpdateTime": 1602031702130 + }, + "znsv.baidu.com": { + "heuristicAction": "", + "nextUpdateTime": 1602132718722 + }, + "zoho.com": { + "heuristicAction": "allow" + }, + "zoho.in": { + "heuristicAction": "allow" + }, + "zol.com.cn": { + "heuristicAction": "allow" + }, + "zonebourse.com": { + "heuristicAction": "allow" + }, + "zoomanalytics.co": { + "heuristicAction": "allow" + }, + "zoominfo.com": { + "heuristicAction": "block" + }, + "zoomph.com": { + "heuristicAction": "allow" + }, + "zopim.com": { + "heuristicAction": "allow" + }, + "zprk.io": { + "heuristicAction": "block" + }, + "zs4.cnzz.com": { + "heuristicAction": "", + "nextUpdateTime": 1602055606931 + }, + "ztsrv.com": { + "heuristicAction": "allow" + }, + "zucks.net": { + "heuristicAction": "allow" + } + }, + "snitch_map": { + "01net.com": [ + "liberation.fr" + ], + "0914.global.ssl.fastly.net": [ + "etonline.com", + "wwe.com" + ], + "100widgets.com": [ + "informationweek.com" + ], + "10hui.es": [ + "ifvod.tv" + ], + "110.93.143.144": [ + "koreaherald.com" + ], + "11183.com.cn": [ + "ems.com.cn" + ], + "120askimages.com": [ + "120ask.com" + ], + "123apps.com": [ + "online-audio-converter.com" + ], + "126.net": [ + "lawtime.cn" + ], + "163.com": [ + "lawtime.cn", + "lofter.com" + ], + "1dmp.io": [ + "rambler.ru", + "hh.ru", + "ivi.tv" + ], + "247-inc.net": [ + "marriott.com", + "bestbuy.com", + "siriusxm.com" + ], + "24smi.net": [ + "inosmi.ru", + "ng.ru" + ], + "2checkout.com": [ + "hola.org", + "wps.com" + ], + "2o7.net": [ + "flickr.com", + "usnews.com", + "prnewswire.com", + "crainsnewyork.com", + "sony.co.jp" + ], + "2t23.net": [ + "homedepot.ca" + ], + "33across.com": [ + "w3schools.com", + "ask.com", + "op.gg" + ], + "360.cn": [ + "so.com", + "jc35.com", + "koolearn.com" + ], + "360yield.com": [ + "okezone.com", + "dailymotion.com", + "youm7.com" + ], + "3conline.com": [ + "pcbaby.com.cn", + "pchouse.com.cn", + "pcauto.com.cn" + ], + "3ds.com": [ + "solidworks.com" + ], + "3gl.net": [ + "investopedia.com", + "thoughtco.com", + "bhphotovideo.com" + ], + "3lift.com": [ + "msn.com", + "okezone.com", + "sourceforge.net" + ], + "40nuggets.com": [ + "jewishvirtuallibrary.org" + ], + "4dex.io": [ + "lepoint.fr", + "wiocha.pl", + "pressherald.com" + ], + "4paradigm.com": [ + "2345.com", + "duba.com" + ], + "4pda.to": [ + "4pda.ru" + ], + "4strokemedia.com": [ + "tiscali.it", + "ilmeteo.it" + ], + "50bang.org": [ + "2345.com", + "mydrivers.com", + "6789.com" + ], + "51.la": [ + "haoyer.com", + "312168.com", + "foodmate.net" + ], + "53kf.com": [ + "300.cn", + "liuxue86.com" + ], + "58.com": [ + "anjuke.com" + ], + "58.com.cn": [ + "anjuke.com" + ], + "58cdn.com.cn": [ + "anjuke.com" + ], + "58che.com": [ + "cnmo.com" + ], + "6noy.net": [ + "goop.com" + ], + "6sc.co": [ + "opendns.com", + "criteo.com", + "hootsuite.com" + ], + "71360.com": [ + "sina.com.cn" + ], + "7eer.net": [ + "shutterstock.com", + "networksolutions.com", + "linksys.com" + ], + "7gra.us": [ + "todamateria.com.br" + ], + "7xbid.com": [ + "jawapos.com" + ], + "8v4lqg.net": [ + "avid.com" + ], + "a-mo.net": [ + "9to5mac.com", + "electrek.co", + "9to5google.com" + ], + "aafp.net": [ + "aafp.org" + ], + "aamsitecertifier.com": [ + "bizjournals.com", + "reviewjournal.com", + "postandcourier.com" + ], + "aan.com": [ + "neurology.org" + ], + "aasaam.com": [ + "borna.news", + "rokna.net", + "shomanews.com" + ], + "aau-search-web-prod.azurewebsites.net": [ + "aau.dk" + ], + "aau-search-webservice-v1-prod.azurewebsites.net": [ + "aau.dk" + ], + "aaxads.com": [ + "reddit.com", + "forbes.com", + "mashable.com" + ], + "about.co.kr": [ + "gmarket.co.kr", + "auction.co.kr" + ], + "abtasty.com": [ + "christianitytoday.com" + ], + "abtshield.com": [ + "gazeta.pl" + ], + "acast.cloud": [ + "acast.com" + ], + "acast.com": [ + "newstatesman.com", + "bloody-disgusting.com" + ], + "accesstrade.net": [ + "moppy.jp" + ], + "accorhotels.com": [ + "accor.com", + "fairmont.com" + ], + "accorhotels.ws": [ + "accor.com" + ], + "accu-web-raine.azurewebsites.net": [ + "accuweather.com" + ], + "acint.net": [ + "aif.ru" + ], + "acpm.fr": [ + "lefigaro.fr", + "lequipe.fr", + "lexpress.fr" + ], + "acquia.com": [ + "panasonic.com", + "iop.org", + "ama-assn.org" + ], + "acstat.com": [ + "alfabank.ru", + "eldorado.ru" + ], + "actionnetwork.org": [ + "dailykos.com" + ], + "activecalendar.com": [ + "villanova.edu" + ], + "activehosted.com": [ + "makezine.com", + "adsoftheworld.com", + "admedo.com" + ], + "activetrail.com": [ + "mako.co.il" + ], + "acuityplatform.com": [ + "fool.com", + "medscape.com", + "spreaker.com" + ], + "acyzh.com": [ + "fx678.com" + ], + "ad-lancers.jp": [ + "lancers.jp" + ], + "ad-plus.cn": [ + "sohu.com" + ], + "ad-score.com": [ + "ettoday.net", + "mentalfloss.com", + "metacafe.com" + ], + "ad-srv.net": [ + "swarovski.com" + ], + "ad-stir.com": [ + "lolipop.jp", + "suumo.jp", + "syosetu.com" + ], + "ad-survey.com": [ + "huanqiu.com" + ], + "ad-track.jp": [ + "moppy.jp" + ], + "ad.gt": [ + "dailymotion.com", + "fandom.com", + "wired.com" + ], + "ad.org.vn": [ + "thethao247.vn" + ], + "ad1x.com": [ + "saksfifthavenue.com" + ], + "adalliance.io": [ + "n-tv.de", + "stern.de", + "rtl.de" + ], + "adalyser.com": [ + "duolingo.com", + "etoro.com", + "totaljobs.com" + ], + "adaptiveads.com": [ + "fark.com" + ], + "adaraanalytics.com": [ + "australia.com" + ], + "adbinead.com": [ + "koreatimes.co.kr" + ], + "adbox.lv": [ + "inbox.lv" + ], + "adcampo.com": [ + "flvto.biz", + "2conv.com" + ], + "adda247.in": [ + "adda247.com" + ], + "addevent.com": [ + "clickfunnels.com" + ], + "addthis.com": [ + "who.int", + "worldometers.info", + "columbia.edu" + ], + "adentifi.com": [ + "cancer.org", + "lastpass.com", + "metmuseum.org" + ], + "adform.net": [ + "yahoo.com", + "amazon.com", + "msn.com" + ], + "adfox.ru": [ + "livejournal.com", + "rambler.ru", + "gismeteo.ru" + ], + "adgeek.net": [ + "shutterstock.com", + "msi.com" + ], + "adhaven.com": [ + "youm7.com", + "nerdwallet.com" + ], + "adhigh.net": [ + "lenta.ru", + "ozon.ru", + "kp.ru" + ], + "adinc.kr": [ + "donga.com" + ], + "adingo.jp": [ + "suumo.jp", + "sony.jp" + ], + "adition.com": [ + "okezone.com", + "imgur.com", + "t-online.de" + ], + "adjetter.com": [ + "adda247.com" + ], + "adkernel.com": [ + "techradar.com", + "livescience.com", + "howtogeek.com" + ], + "adlmerge.com": [ + "aif.ru" + ], + "adman.gr": [ + "newsit.gr", + "gazzetta.gr", + "liberal.gr" + ], + "admaster.com.cn": [ + "lianjia.com" + ], + "admatic.com.tr": [ + "memurlar.net" + ], + "admatrix.jp": [ + "appier.com", + "shop-pro.jp" + ], + "admedia.com": [ + "dx.com" + ], + "admedo.com": [ + "theregister.com", + "topuniversities.com", + "bristol.ac.uk" + ], + "admetrica.ru": [ + "yandex.ru", + "yandex.com", + "yandex.by" + ], + "admicro.vn": [ + "laodong.vn", + "vtv.vn", + "kenh14.vn" + ], + "admission.net": [ + "chevrolet.com" + ], + "admithub.com": [ + "uwyo.edu" + ], + "admixer.net": [ + "khaberni.com", + "alwakeelnews.com", + "i.ua" + ], + "admost.com": [ + "ensonhaber.com", + "yeniakit.com.tr", + "haberler.com" + ], + "adnuntius.com": [ + "milliyet.com.tr", + "alwakeelnews.com", + "ahlmasrnews.com" + ], + "adnxs.com": [ + "microsoft.com", + "yahoo.com", + "amazon.com" + ], + "adnz.co": [ + "nzz.ch" + ], + "adobe.com": [ + "espn.com", + "marriott.com", + "history.com" + ], + "adobecqms.net": [ + "grainger.com" + ], + "adocean.pl": [ + "gemius.pl", + "tvp.pl", + "blic.rs" + ], + "adop.cc": [ + "ruliweb.com", + "pojoksatu.id", + "kyobobook.co.kr" + ], + "adotmob.com": [ + "okezone.com", + "imgur.com", + "liberation.fr" + ], + "adpnut.com": [ + "koreaherald.com" + ], + "adpushup.com": [ + "geeksforgeeks.org", + "india.com", + "bollywoodshaadis.com" + ], + "adpxl.co": [ + "instabug.com" + ], + "adrecover.com": [ + "geeksforgeeks.org", + "india.com" + ], + "adriver.ru": [ + "aliexpress.ru", + "banggood.com", + "kp.ru" + ], + "adroll.com": [ + "sourceforge.net", + "cloudflare.com", + "rakuten.co.jp" + ], + "adrta.com": [ + "redstate.com", + "ktvu.com", + "hotair.com" + ], + "adsafeprotected.com": [ + "allabout.co.jp" + ], + "adscale.de": [ + "statista.com", + "memurlar.net", + "idnes.cz" + ], + "adschoom.com": [ + "abril.com.br", + "newchic.com" + ], + "adscience.nl": [ + "rijksmuseum.nl" + ], + "adsco.re": [ + "hoodsite.com", + "thepiratebay10.org" + ], + "adserver.mk": [ + "time.mk" + ], + "adsfactor.net": [ + "aastocks.com" + ], + "adskeeper.co.uk": [ + "txxx.com", + "y2mate.guru", + "dramacool.movie" + ], + "adskeeper.com": [ + "fastpic.ru" + ], + "adsniper.ru": [ + "aif.ru" + ], + "adspsp.com": [ + "yourdictionary.com" + ], + "adsrv.io": [ + "thethao247.vn" + ], + "adsrvr.org": [ + "amazon.com", + "msn.com", + "godaddy.com" + ], + "adswizz.com": [ + "iheart.com", + "tunein.com", + "eltiempo.com" + ], + "adsymptotic.com": [ + "adobe.com", + "amazon.com", + "msn.com" + ], + "adtarget.com.tr": [ + "memurlar.net", + "khaberni.com", + "alwakeelnews.com" + ], + "adtdp.com": [ + "suumo.jp", + "mixi.jp", + "sony.jp" + ], + "adtelli.com": [ + "ukr.net" + ], + "adtelligent.com": [ + "aol.com", + "ukr.net", + "vanguardngr.com" + ], + "adtimaserver.vn": [ + "zingnews.vn", + "baomoi.com", + "zingmp3.vn" + ], + "adtlgc.com": [ + "olx.ro", + "delfi.lt" + ], + "adtng.com": [ + "pornhub.com", + "sxyprn.com", + "animeflv.net" + ], + "adtodate.net": [ + "hamshahrionline.ir" + ], + "adtrue.com": [ + "manganelo.com", + "subscene.com", + "headlines.pw" + ], + "adup-tech.com": [ + "businessinsider.de" + ], + "advanced-web-analytics.com": [ + "pnc.com", + "allstate.com" + ], + "advangelists.com": [ + "tv9telugu.com", + "thewire.in", + "tv9kannada.com" + ], + "advertising.com": [ + "yahoo.com", + "amazon.com", + "msn.com" + ], + "advertserve.com": [ + "yumpu.com", + "blackhatworld.com" + ], + "advg.jp": [ + "alc.co.jp", + "tsite.jp", + "4gamer.net" + ], + "advividnetwork.com": [ + "chinatimes.com", + "newtalk.tw", + "businesstoday.com.tw" + ], + "advsnx.net": [ + "globes.co.il" + ], + "adweb.co.kr": [ + "danawa.com" + ], + "adwstats.com": [ + "journaldunet.com" + ], + "adxadserv.com": [ + "avgle.com" + ], + "adxvip.com": [ + "ifeng.com" + ], + "adyen.com": [ + "abril.com.br", + "picsart.com" + ], + "adzerk.net": [ + "unsplash.com", + "united.com", + "lwn.net" + ], + "aetn.com": [ + "history.com", + "biography.com" + ], + "aetnd.com": [ + "history.com" + ], + "af-110.com": [ + "moppy.jp" + ], + "af-web-cms-0-prod.azurewebsites.net": [ + "arthritis.org" + ], + "affec.tv": [ + "rmit.edu.au" + ], + "affirm.com": [ + "stockx.com", + "nest.com", + "oakley.com", + "comptia.org" + ], + "afftrack.pro": [ + "newchic.com" + ], + "aftonbladet.se": [ + "svd.se" + ], + "agenziaentrate.it": [ + "agenziaentrate.gov.it" + ], + "agilemeasure.com": [ + "hpe.com" + ], + "agilone.com": [ + "tommy.com", + "microcenter.com" + ], + "agkn.com": [ + "amazon.com", + "msn.com", + "godaddy.com" + ], + "agoda.net": [ + "agoda.com" + ], + "agora.pl": [ + "gazeta.pl", + "wyborcza.pl" + ], + "ahighapi.com": [ + "bitz.ai" + ], + "aidata.io": [ + "ozon.ru", + "kp.ru", + "khaberni.com" + ], + "aihelp.net": [ + "cs30.net" + ], + "aimediagroup.com": [ + "panasonic.com", + "nova.edu", + "hardrock.com" + ], + "aio.media": [ + "3dnews.ru" + ], + "aiproxies.com": [ + "panasonic.com", + "nova.edu", + "hardrock.com" + ], + "airpr.com": [ + "equifax.com", + "savethechildren.org", + "solarwinds.com" + ], + "aismo.ru": [ + "mosreg.ru" + ], + "aj1015.online": [ + "bbb.org" + ], + "aj1431.online": [ + "gazetaexpress.com" + ], + "aj2031.online": [ + "ap7am.com" + ], + "aj2208.online": [ + "filmix.co" + ], + "ajax.googleapis.com": [ + "mercurynews.com", + "denverpost.com", + "ocregister.com" + ], + "akamaihd.net": [ + "gizmodo.com", + "lifehacker.com", + "foxbusiness.com" + ], + "akamaized.net": [ + "typeform.com", + "ucdavis.edu", + "rutgers.edu" + ], + "akstat.io": [ + "hotwire.com" + ], + "albacross.com": [ + "anydesk.com", + "bidtheatre.com", + "widespace.com" + ], + "alcmpn.com": [ + "consequenceofsound.net", + "art.com", + "oakley.com" + ], + "alexametrics.com": [ + "okezone.com", + "bongacams.com", + "tianya.cn" + ], + "alfasense.com": [ + "tass.ru", + "iz.ru", + "yaplakal.com" + ], + "aliapp.org": [ + "ih5.cn", + "ywart.com" + ], + "alibaba.com": [ + "informationweek.com", + "daraz.pk", + "ywart.com" + ], + "alicdn.com": [ + "ih5.cn", + "informationweek.com", + "daraz.pk" + ], + "aliexpress.com": [ + "informationweek.com" + ], + "alifafdlnjeruif.com": [ + "porntrex.com" + ], + "alipay.com": [ + "daraz.pk" + ], + "aliyun.com": [ + "gmw.cn", + "mojifen.com", + "122.gov.cn" + ], + "aliyuncs.com": [ + "66law.cn" + ], + "all-cod.com": [ + "kinokrad.co" + ], + "allure.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "almamedia.fi": [ + "iltalehti.fi" + ], + "alocdn.com": [ + "realclearpolitics.com", + "euroluxhome.com", + "valuewalk.com" + ], + "alphonso.tv": [ + "dashlane.com" + ], + "alsa.org": [ + "als.org" + ], + "alwasela.com": [ + "copts-united.com" + ], + "am15.net": [ + "fastpic.ru" + ], + "amap.com": [ + "zhaopin.com", + "kdslife.com", + "tom.com" + ], + "amazon-adsystem.com": [ + "amazon.com", + "reddit.com", + "msn.com" + ], + "amazon.com": [ + "gucci.com", + "reason.com", + "boxofficemojo.com" + ], + "amazonaws.com": [ + "abplive.com" + ], + "amcdn.vn": [ + "laodong.vn", + "vtv.vn", + "kenh14.vn" + ], + "ameba.jp": [ + "ameblo.jp", + "amebaownd.com" + ], + "amnet.tw": [ + "thenewslens.com" + ], + "amunx.de": [ + "computerbase.de" + ], + "analytics-egain.com": [ + "hpe.com", + "jcpenney.com", + "td.com" + ], + "analytics-sm.com": [ + "gotomeeting.com", + "monster.com", + "hbomax.com" + ], + "anandabazar.com": [ + "telegraphindia.com" + ], + "and.co.uk": [ + "dailymail.co.uk", + "thisismoney.co.uk" + ], + "andertoons.com": [ + "washingtonsharedparenting.com" + ], + "aniview.com": [ + "rediff.com", + "mydramalist.com", + "mobafire.com" + ], + "anm.co.uk": [ + "dailymail.co.uk" + ], + "anquan.org": [ + "afzhan.com", + "400.cn", + "9r.cn" + ], + "ansira.com": [ + "petfinder.com" + ], + "answerscloud.com": [ + "barclays.co.uk", + "oakley.com" + ], + "anura.io": [ + "techtimes.com" + ], + "anvato.net": [ + "chinatimes.com", + "kxan.com", + "ktvu.com" + ], + "anyclip.com": [ + "venturebeat.com", + "wowhead.com" + ], + "anz.com": [ + "anz.com.au" + ], + "aparat.com": [ + "agah.com", + "tasnimnews.com", + "ponisha.ir" + ], + "apeartalb.site": [ + "1377x.to" + ], + "apester.com": [ + "deadline.com", + "indiewire.com", + "firstpost.com" + ], + "apihotels.net": [ + "hotels.com" + ], + "app-us1.com": [ + "seekingalpha.com", + "jpost.com", + "lse.ac.uk" + ], + "app.link": [ + "twitch.tv", + "medium.com", + "marriott.com" + ], + "apparmor.com": [ + "fiu.edu", + "dal.ca", + "ryerson.ca" + ], + "appconsent.io": [ + "lefigaro.fr", + "commentcamarche.net", + "journaldunet.com" + ], + "appdynamics.com": [ + "cisco.com", + "jstor.org", + "thomsonreuters.com" + ], + "appier.net": [ + "kompas.com", + "ettoday.net", + "grid.id" + ], + "apple.com": [ + "apple.news", + "wyndhamhotels.com", + "minds.com" + ], + "appmifile.com": [ + "mi.com" + ], + "appsflyer.com": [ + "farfetch.com", + "eonline.com", + "kitco.com" + ], + "apvdr.com": [ + "sportingnews.com", + "soccerway.com", + "clicrbs.com.br" + ], + "aralego.com": [ + "youm7.com", + "mydramalist.com", + "discuss.com.hk" + ], + "arc.io": [ + "animeflv.net", + "cuevana3.io" + ], + "architecturaldigest.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "ard.de": [ + "ardmediathek.de" + ], + "arrivalist.com": [ + "artic.edu" + ], + "arte.tv": [ + "politico.eu" + ], + "artipbox.net": [ + "globes.co.il" + ], + "aruba.it": [ + "pec.it" + ], + "as.com": [ + "eluniverso.com" + ], + "asadcdn.com": [ + "businessinsider.de", + "bild.de", + "welt.de" + ], + "asapp.com": [ + "spectrum.net", + "rcn.com", + "verizon.com" + ], + "ascap.com": [ + "elgenero.com" + ], + "ascpqnj-oam.global.ssl.fastly.net": [ + "harborfreight.com" + ], + "asianmedia.com": [ + "ltn.com.tw" + ], + "ask.com": [ + "excite.com" + ], + "askvamygov-ui.azurewebsites.net": [ + "my.gov.au" + ], + "aso1.net": [ + "cima4u.io", + "gayboystube.com", + "akwam.co" + ], + "aspencore.com": [ + "eetimes.com" + ], + "associates-amazon.com": [ + "amazon.com", + "usatoday.com", + "wired.com" + ], + "asteannunci.it": [ + "gazzettadelsud.it" + ], + "atdmt.com": [ + "facebook.com", + "netflix.com", + "slack.com" + ], + "atgsvcs.com": [ + "mysql.com", + "oracle.com", + "lenovo.com" + ], + "ati-host.net": [ + "huawei.com", + "rte.ie", + "ovhcloud.com" + ], + "atlassian.net": [ + "blackboard.com" + ], + "atp.io": [ + "udemy.com", + "upwork.com", + "aarp.org" + ], + "atsptp.com": [ + "nutaku.net", + "brazzers.com" + ], + "att.com": [ + "yahoo.com" + ], + "attentivemobile.com": [ + "artstation.com", + "uniqlo.com", + "zazzle.com" + ], + "audiencerun.com": [ + "unblog.fr" + ], + "audioboom.com": [ + "thisismoney.co.uk" + ], + "audioburst.com": [ + "sportzbonanza.com" + ], + "aufp.io": [ + "dailymotion.com" + ], + "auone.jp": [ + "au.com" + ], + "auth0.com": [ + "mercurynews.com", + "denverpost.com", + "makezine.com" + ], + "authorize.net": [ + "reason.com" + ], + "autoimg.cn": [ + "autohome.com.cn" + ], + "autonom8.com": [ + "sandiegozoo.org" + ], + "autopilothq.com": [ + "viglink.com", + "doodlekit.com", + "skimlinks.com" + ], + "avangate.com": [ + "hola.org", + "wps.com" + ], + "avantisvideo.com": [ + "stripes.com", + "miaminewtimes.com", + "washingtonian.com" + ], + "avmws.com": [ + "wondershare.com", + "rei.com", + "patagonia.com" + ], + "aweber.com": [ + "informationweek.com" + ], + "axisbank.co.in": [ + "axisbank.com" + ], + "ayads.co": [ + "newscientist.com", + "lequipe.fr", + "cronica.com.ar" + ], + "ayc0zsm69431gfebd.xyz": [ + "statesman.com", + "oklahoman.com", + "pressdemocrat.com" + ], + "ayo.co.id": [ + "bola.com" + ], + "azet.sk": [ + "aktuality.sk" + ], + "azureedge.net": [ + "secureworks.com", + "ajc.com", + "tampabay.com", + "gazette.com" + ], + "azurefd.net": [ + "toyota.com" + ], + "b0e8.com": [ + "zend.com", + "vmware.com", + "udel.edu" + ], + "b1img.com": [ + "threadless.com", + "saatchiart.com" + ], + "b9i7.net": [ + "caesars.com" + ], + "bablic.com": [ + "nationalgeographic.org", + "powtoon.com", + "camp-fire.jp" + ], + "baidu.com": [ + "sohu.com", + "sina.com.cn", + "csdn.net" + ], + "baidustatic.com": [ + "sina.com.cn" + ], + "baikalize.com": [ + "gmarket.co.kr", + "auction.co.kr" + ], + "baixing.net": [ + "baixing.com" + ], + "baiying.cn": [ + "lenovo.com.cn" + ], + "bam-x.com": [ + "macys.com", + "iherb.com", + "yoox.com" + ], + "bancogalicia.com.ar": [ + "bancogalicia.com" + ], + "banggood.com": [ + "newchic.com" + ], + "barchart.com": [ + "kitco.com" + ], + "barilliance.net": [ + "euromonitor.com" + ], + "bashirian.biz": [ + "filmix.co" + ], + "basspro.com": [ + "cabelas.com" + ], + "bayan.ir": [ + "blog.ir" + ], + "baynote.net": [ + "springer.com", + "jcrew.com", + "theoutnet.com" + ], + "bazaarvoice.com": [ + "lg.com", + "lww.com", + "discover.com", + "bathandbodyworks.com" + ], + "bbelements.com": [ + "ceskatelevize.cz" + ], + "bcicdn.com": [ + "bongacams.com" + ], + "bcn.cat": [ + "barcelona.cat" + ], + "bd4travel.com": [ + "emirates.com" + ], + "bdash-cloud.com": [ + "onamae.com" + ], + "bdg-analytics.appspot.com": [ + "bustle.com", + "elitedaily.com", + "inverse.com" + ], + "bebi.com": [ + "animeflv.net", + "gogoanime.so", + "igg-games.com" + ], + "become.co.jp": [ + "tok2.com" + ], + "beian.gov.cn": [ + "gusuwang.com", + "chem17.com" + ], + "benchmarkemail.com": [ + "helpguide.org" + ], + "berush.com": [ + "semrush.com" + ], + "bestyang.cn": [ + "9lkandianying.com" + ], + "betgorebysson.club": [ + "4anime.to", + "opensubtitles.org", + "fakaza.com" + ], + "betweendigital.com": [ + "aliexpress.ru", + "rambler.ru", + "gismeteo.ru" + ], + "bf-tools.net": [ + "focus.de" + ], + "bfmio.com": [ + "techradar.com", + "livescience.com", + "matterport.com" + ], + "bhphotovideo.com": [ + "informationweek.com" + ], + "bibox360.com": [ + "bibox.com" + ], + "bidgear.com": [ + "manganelo.com", + "dramacool.movie", + "kickassanime.rs" + ], + "bidr.io": [ + "adobe.com", + "okezone.com", + "digicert.com" + ], + "bidstreamserver.com": [ + "spin.com" + ], + "bidswitch.net": [ + "amazon.com", + "msn.com", + "okezone.com" + ], + "bidvertiser.com": [ + "washingtonsharedparenting.com" + ], + "bigmining.com": [ + "kakaku.com", + "tabelog.com", + "sony.jp" + ], + "bigo.tv": [ + "bigolive.tv" + ], + "bing.com": [ + "adobe.com", + "godaddy.com", + "weebly.com" + ], + "binstats.com": [ + "id-binomo.com" + ], + "bithumb.com": [ + "mk.co.kr" + ], + "bitninja.io": [ + "wendyssubway.com", + "lumenlearning.com", + "corpscorp.online" + ], + "bitrix.info": [ + "timeweb.com", + "msu.ru", + "bitrix24.ru" + ], + "bizbuysell.com": [ + "allbusiness.com" + ], + "bizfly.vn": [ + "admicro.vn" + ], + "bizible.com": [ + "dropbox.com", + "cloudflare.com", + "nginx.com" + ], + "bizibly.com": [ + "dropbox.com", + "cloudflare.com", + "nginx.com" + ], + "bizographics.com": [ + "opendns.com", + "huawei.com", + "ox.ac.uk" + ], + "bizrate.com": [ + "people.com", + "allrecipes.com", + "ew.com" + ], + "bizspring.co.kr": [ + "dothome.co.kr" + ], + "bizspring.net": [ + "dothome.co.kr" + ], + "bjcathay.com": [ + "cctv.com" + ], + "blisspointmedia.com": [ + "joinhoney.com" + ], + "blogsky.com": [ + "picofile.com" + ], + "bluecava.com": [ + "rosettastone.com" + ], + "blueconic.net": [ + "nationalgeographic.com", + "britannica.com", + "merriam-webster.com" + ], + "bluekai.com": [ + "marketwatch.com", + "nypost.com", + "thesun.co.uk" + ], + "bn-web.com": [ + "barnesandnoble.com" + ], + "bnidx.com": [ + "bravenet.com", + "jigsy.com" + ], + "bnpparibas.fr": [ + "mabanque.bnpparibas" + ], + "boldchat.com": [ + "gotomeeting.com", + "globalsign.com", + "cancer.org" + ], + "bonappetit.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "bongacams.com": [ + "informationweek.com" + ], + "bonnier-subscriptions.com": [ + "popsci.com" + ], + "booking.com": [ + "southwest.com" + ], + "boostingads.com": [ + "radikal.ru" + ], + "bounceexchange.com": [ + "cnn.com", + "cnbc.com", + "wired.com" + ], + "bouncex.net": [ + "cnn.com", + "cnbc.com" + ], + "boxx.ai": [ + "thestar.com.my", + "100kpj.com" + ], + "brand-display.com": [ + "wyndhamhotels.com", + "2banh.vn" + ], + "brandcdn.com": [ + "appstate.edu", + "papajohns.com" + ], + "brandonsun.com": [ + "winnipegfreepress.com" + ], + "brdmin.com": [ + "kinogo.by", + "1plus1tv.ru", + "kinogo.zone" + ], + "breaktime.com.tw": [ + "newtalk.tw", + "businesstoday.com.tw" + ], + "brightcove.com": [ + "webex.com", + "nike.com", + "digitaltrends.com", + "rsa.com" + ], + "brightedge.com": [ + "vmware.com" + ], + "broadstreetads.com": [ + "arthritis.org", + "prospect.org", + "mondaq.com" + ], + "brsrvr.com": [ + "barnesandnoble.com", + "shutterfly.com", + "farfetch.com" + ], + "bttrack.com": [ + "msn.com", + "forbes.com", + "surveymonkey.com" + ], + "btttag.com": [ + "marriott.com", + "homedepot.com", + "patch.com" + ], + "buckridge.link": [ + "filmix.co" + ], + "bugsnag.com": [ + "indigo.ca" + ], + "bullionyield.com": [ + "porntrex.com" + ], + "bumlam.com": [ + "aif.ru", + "alfabank.ru" + ], + "burly.io": [ + "braze.com" + ], + "businessclick.com": [ + "money.pl" + ], + "businessinsider.com": [ + "insider.com" + ], + "buysellads.net": [ + "dynamicdrive.com" + ], + "buzzfeed.com": [ + "buzzfeednews.com" + ], + "buzzoola.com": [ + "rambler.ru", + "lenta.ru", + "gazeta.ru" + ], + "byteoversea.com": [ + "tiktok.com" + ], + "c-ctrip.com": [ + "qunar.com", + "idianfa.com" + ], + "c212.net": [ + "prnewswire.com", + "prweb.com", + "sas.com" + ], + "c3tag.com": [ + "shutterstock.com", + "panasonic.com", + "usbank.com" + ], + "c8.net.ua": [ + "yotpo.com" + ], + "calendly.com": [ + "n.rich" + ], + "canliskor.com.tr": [ + "fanatik.com.tr" + ], + "capterra.com": [ + "softwareadvice.com" + ], + "capturehighered.net": [ + "sc.edu", + "sjsu.edu", + "msstate.edu" + ], + "carfax.com": [ + "kia.com" + ], + "caroda.io": [ + "csfd.cz", + "aktualne.cz" + ], + "casalemedia.com": [ + "yahoo.com", + "amazon.com", + "okezone.com" + ], + "caspio.com": [ + "wfaa.com", + "11alive.com" + ], + "castbox.fm": [ + "rosbalt.ru" + ], + "castle.io": [ + "trello.com", + "farfetch.com", + "reverb.com" + ], + "cbs.com": [ + "informationweek.com" + ], + "cbsi.com": [ + "maxpreps.com" + ], + "cctv.com": [ + "hupu.com", + "npc.gov.cn" + ], + "cdeledu.com": [ + "chinaacc.com" + ], + "cdn-net.com": [ + "grubhub.com", + "qvc.com" + ], + "cdn-payscale.com": [ + "payscale.com" + ], + "cdninstagram.com": [ + "sony.com" + ], + "cdnpub.info": [ + "iqoption.com" + ], + "cdnvideo.mobi": [ + "sexu.com" + ], + "cdnwidget.com": [ + "mercari.com", + "eset.com", + "activecampaign.com" + ], + "ceet.co": [ + "eltiempo.com" + ], + "cengage.com": [ + "gale.com" + ], + "center.io": [ + "leadpages.com", + "goodmenproject.com" + ], + "centerdigitaled.com": [ + "govtech.com" + ], + "centrum.cz": [ + "aktualne.cz" + ], + "cern.ch": [ + "home.cern", + "zenodo.org" + ], + "cfzu.net": [ + "logitech.com", + "logitechg.com" + ], + "channelnewsasia.com": [ + "todayonline.com" + ], + "charlotteobserver.com": [ + "newsobserver.com", + "mcclatchydc.com" + ], + "chartbeat.net": [ + "nytimes.com", + "cnn.com", + "forbes.com" + ], + "chase.com": [ + "ecwid.com" + ], + "chatdealer.jp": [ + "sakura.ne.jp" + ], + "chatplus.jp": [ + "lolipop.jp", + "kingtime.jp" + ], + "chatra.io": [ + "ko-fi.com", + "yourbrideglobal.com" + ], + "chaturbate.com": [ + "informationweek.com" + ], + "chegg.com": [ + "citationmachine.net", + "easybib.com" + ], + "cheqzone.com": [ + "woolworths.com.au", + "newcastle.edu.au", + "getyourguide.com" + ], + "cheyisou.com": [ + "bitauto.com" + ], + "childsplayclothing.co.uk": [ + "next.co.uk" + ], + "chipweb.azurewebsites.net": [ + "lacity.org" + ], + "choozle.com": [ + "addthis.com", + "denverpost.com", + "amnh.org" + ], + "cian.site": [ + "cian.ru" + ], + "cint.com": [ + "mainichi.jp" + ], + "cintnetworks.com": [ + "disney.com", + "cint.com", + "starwars.com" + ], + "cisco.com": [ + "webex.com", + "duo.com", + "netacad.com" + ], + "citi.com": [ + "paho.org", + "citigroup.com" + ], + "citiservi.es": [ + "eleconomista.es" + ], + "citrix.com": [ + "sharefile.com" + ], + "clarivate.com": [ + "webofknowledge.com" + ], + "classistatic.com": [ + "gumtree.co.za" + ], + "clcknads.pro": [ + "tubesafari.com" + ], + "clearbit.com": [ + "intercom.com", + "elastic.co" + ], + "clerk.io": [ + "grifo210.com", + "alducadaosta.com" + ], + "clevernt.com": [ + "makeleio.gr", + "sportzwiki.com", + "themoscowtimes.com" + ], + "clickability.com": [ + "govtech.com", + "governing.com" + ], + "clickagy.com": [ + "desktopnexus.com" + ], + "clickcertain.com": [ + "shapeways.com" + ], + "clickfuse.com": [ + "azlyrics.com" + ], + "clickondetroit.com": [ + "clickorlando.com" + ], + "clicktale.net": [ + "microsoft.com", + "intel.com", + "gotomeeting.com" + ], + "clicktripz.com": [ + "tripadvisor.com", + "nypost.com", + "tripadvisor.co.uk" + ], + "clientgear.com": [ + "dx.com" + ], + "clinch.co": [ + "chewy.com", + "nespresso.com" + ], + "clink.cn": [ + "feishu.cn" + ], + "clive.cloud": [ + "ualberta.ca", + "nmsu.edu", + "umt.edu" + ], + "clmbtech.com": [ + "wattpad.com", + "hindnow.com", + "businessinsider.in" + ], + "cloob.com": [ + "mihanblog.com" + ], + "cloud-iq.com": [ + "newscientist.com", + "empireonline.com" + ], + "cloudflare.com": [ + "boohoo.com", + "cityheaven.net" + ], + "clublibertaddigital.com": [ + "libertaddigital.com" + ], + "cluep.com": [ + "penguinrandomhouse.com", + "tidal.com" + ], + "cmanager-prometeo.appspot.com": [ + "20minutos.es" + ], + "cnmo-img.com.cn": [ + "cnmo.com" + ], + "cnnd.vn": [ + "vtv.vn" + ], + "cnrs.fr": [ + "archives-ouvertes.fr" + ], + "cntraveler.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "cntv.cn": [ + "cctv.com" + ], + "cnyes.cool": [ + "cnyes.com" + ], + "cnzz.com": [ + "huanqiu.com", + "jrj.com.cn", + "rednet.cn" + ], + "cobaltgroup.com": [ + "edmunds.com", + "chevrolet.com" + ], + "coccusadmanlob.com": [ + "cimaclub.io" + ], + "codon.vn": [ + "x2convert.com" + ], + "coherentpath.com": [ + "neimanmarcus.com", + "llbean.com" + ], + "cohesionapps.com": [ + "healthline.com", + "medicalnewstoday.com", + "frontier.com" + ], + "coinmama.com": [ + "informationweek.com" + ], + "cointiply.com": [ + "informationweek.com" + ], + "collectandgather.com": [ + "williams-sonoma.com", + "potterybarn.com", + "westelm.com" + ], + "collegenet.com": [ + "gmu.edu" + ], + "colossusssp.com": [ + "usatoday.com", + "azcentral.com", + "freep.com" + ], + "comm100.com": [ + "a2hosting.com" + ], + "comm100.io": [ + "blibli.com" + ], + "commander1.com": [ + "yoox.com", + "ovh.com", + "ovhcloud.com" + ], + "commitchange.com": [ + "metrotimes.com", + "riverfronttimes.com", + "orlandoweekly.com" + ], + "company-target.com": [ + "adobe.com", + "digicert.com", + "ibm.com" + ], + "complex.com": [ + "allmusic.com" + ], + "condenastdigital.com": [ + "wired.com", + "newyorker.com", + "arstechnica.com" + ], + "connatix.com": [ + "gizmodo.com", + "thegatewaypundit.com", + "jpost.com" + ], + "connectad.io": [ + "w3schools.com", + "pastebin.com", + "idnes.cz" + ], + "connecto.io": [ + "cardekho.com", + "zigwheels.com" + ], + "connexity.net": [ + "sourceforge.net", + "slashdot.org" + ], + "connextra.com": [ + "mlb.com", + "cbs.com", + "nbcsports.com" + ], + "consent.is": [ + "bugsnag.com" + ], + "consentag.eu": [ + "boohoo.com" + ], + "constantcontact.com": [ + "rs6.net" + ], + "consumerreports.org": [ + "consumerist.com" + ], + "contentabc.com": [ + "bravotube.net" + ], + "contentexchange.me": [ + "b92.net", + "blic.rs", + "dnevnik.hr" + ], + "contentinsights.com": [ + "niemanlab.org" + ], + "contentive.com": [ + "searchenginewatch.com", + "clickz.com" + ], + "contentsfeed.com": [ + "asahi.com", + "donga.com", + "mainichi.jp" + ], + "contentsquare.net": [ + "salesforce.com", + "shutterstock.com", + "bestbuy.com" + ], + "contextads.live": [ + "okaz.com.sa", + "aawsat.com", + "haibunda.com" + ], + "contextweb.com": [ + "forbes.com", + "sourceforge.net", + "imgur.com" + ], + "contobox.com": [ + "homedepot.ca" + ], + "conversantmedia.com": [ + "epsilon.com" + ], + "conversionlogic.net": [ + "rottentomatoes.com" + ], + "convertkit.com": [ + "valuewalk.com" + ], + "convertlanguage.com": [ + "t-mobile.com" + ], + "convio.net": [ + "convio.com", + "alsa.org" + ], + "coremetrics.com": [ + "ibm.com", + "abebooks.com", + "thermofisher.com" + ], + "corus.ca": [ + "globalnews.ca" + ], + "costco.com": [ + "costco.ca" + ], + "cotsta.ru": [ + "kino-teatr.ru" + ], + "coupang.com": [ + "hani.co.kr" + ], + "coupons.net": [ + "coupons.com" + ], + "coveo.com": [ + "bell.ca" + ], + "coxbusiness.com": [ + "cox.com" + ], + "cpmstar.com": [ + "hi.ru", + "armorgames.com", + "pcgamesn.com" + ], + "cpx.to": [ + "dailymotion.com", + "livescience.com", + "express.co.uk" + ], + "cquotient.com": [ + "uniqlo.com", + "puma.com", + "boohoo.com" + ], + "creative-serving.com": [ + "swarovski.com" + ], + "creativecdn.com": [ + "msn.com", + "booking.com", + "tokopedia.com" + ], + "creativelive.com": [ + "photo.net" + ], + "creativemarket.com": [ + "informationweek.com" + ], + "crentgate.com": [ + "livejasmin.com" + ], + "cretgate.com": [ + "spankbang.com", + "livejasmin.com" + ], + "criteo.com": [ + "dropbox.com", + "cnn.com", + "forbes.com" + ], + "crsspxl.com": [ + "sourceforge.net", + "slashdot.org", + "las2orillas.co" + ], + "crwdcntrl.net": [ + "oregonlive.com", + "nzherald.co.nz", + "umass.edu" + ], + "cryptobrowser.site": [ + "cryptotabbrowser.com" + ], + "cszz.ru": [ + "drom.ru" + ], + "ctags.cn": [ + "bitauto.com" + ], + "ctnsnet.com": [ + "reading.ac.uk", + "lancaster.ac.uk", + "highlow.com" + ], + "ctrip.com": [ + "idianfa.com" + ], + "cuberoot.co": [ + "indiatoday.in", + "aajtak.in" + ], + "culturaltracking.ru": [ + "culture.ru" + ], + "curalate.com": [ + "jcpenney.com", + "crateandbarrel.com", + "williams-sonoma.com" + ], + "custhelp.com": [ + "lenovo.com" + ], + "customer.io": [ + "codecademy.com", + "buffer.com", + "smore.com" + ], + "custora.com": [ + "patagonia.com", + "domestika.org", + "jcrew.com" + ], + "cvent.com": [ + "stlouisfed.org" + ], + "cvshealth.com": [ + "cvs.com" + ], + "cxense.com": [ + "wsj.com", + "businessinsider.com", + "independent.co.uk" + ], + "cyol.net": [ + "cyol.com" + ], + "d-bi.fr": [ + "boohoo.com", + "worldoftanks.eu" + ], + "d-markets.net": [ + "cityheaven.net" + ], + "d1af033869koo7.cloudfront.net": [ + "marriott.com", + "bestbuy.com", + "siriusxm.com" + ], + "d1d3jupgwm7m5r.cloudfront.net": [ + "defensenews.com" + ], + "d1dns4zpgsd7rz.cloudfront.net": [ + "rthk.hk" + ], + "d1epsz32winqbo.cloudfront.net": [ + "startribune.com" + ], + "d1rv23qj5kas56.cloudfront.net": [ + "webnode.com", + "webnode.cz" + ], + "d226aj4ao1t61q.cloudfront.net": [ + "activecampaign.com" + ], + "d2t77mnxyo7adj.cloudfront.net": [ + "trello.com", + "saatchiart.com" + ], + "d32blsbofe2158.cloudfront.net": [ + "247wallst.com" + ], + "d32hpx6p5we0tx.cloudfront.net": [ + "espncricinfo.com" + ], + "d38xvr37kwwhcm.cloudfront.net": [ + "anthropologie.com", + "fashionnova.com" + ], + "d395dw5zk780j2.cloudfront.net": [ + "nationalpost.com", + "canada.com", + "financialpost.com" + ], + "d41.co": [ + "hpe.com", + "3m.com", + "cio.com" + ], + "d5nxst8fruw4z.cloudfront.net": [ + "alexa.com" + ], + "d9jj3mjthpub.cloudfront.net": [ + "people.com", + "allrecipes.com", + "eatthis.com" + ], + "dable.io": [ + "ettoday.net", + "jpnn.com", + "republika.co.id" + ], + "dadcdigital.com": [ + "funimation.com" + ], + "dadicinema.com": [ + "300.cn" + ], + "dailymail.co.uk": [ + "metro.co.uk", + "inews.co.uk", + "thisismoney.co.uk" + ], + "dailymotion.com": [ + "heraldodemexico.com.mx", + "01net.com", + "asiaone.com" + ], + "dam-broadcast.com": [ + "orange.com" + ], + "danv01ao0kdr2.cloudfront.net": [ + "jabra.com" + ], + "dapadobeproxyql.azurewebsites.net": [ + "microsoft.com" + ], + "dapadobeproxytest.azurewebsites.net": [ + "microsoft.com" + ], + "datamind.ru": [ + "tinkoff.ru", + "skyeng.ru" + ], + "dataplusmath.com": [ + "liveramp.com" + ], + "dataprev.gov.br": [ + "inss.gov.br" + ], + "datasteam.io": [ + "arthritis.org", + "oakley.com" + ], + "dataxpand.com": [ + "las2orillas.co", + "taringa.net", + "rpp.pe" + ], + "daum.net": [ + "ettoday.net", + "tistory.com", + "kakaocorp.com" + ], + "dc-storm.com": [ + "alibabacloud.com", + "udemy.com", + "coursera.org" + ], + "dc-tag.jp": [ + "navitime.co.jp" + ], + "dcmn.io": [ + "idealo.de", + "babbel.com" + ], + "dditscdn.com": [ + "livejasmin.com" + ], + "dditservices.com": [ + "spankbang.com" + ], + "ddos-guard.net": [ + "hse.ru", + "ngs.ru" + ], + "deadline.com": [ + "indiewire.com" + ], + "deadlinefunnel.com": [ + "copyblogger.com" + ], + "dealerinspire.com": [ + "cars.com" + ], + "deema.agency": [ + "khabaronline.ir" + ], + "deep.bi": [ + "rappler.com", + "sme.sk" + ], + "deepintent.com": [ + "wired.com", + "patheos.com", + "patient.info" + ], + "dell.com": [ + "rsa.com", + "delltechnologies.com" + ], + "demdex.net": [ + "microsoft.com", + "linkedin.com", + "yahoo.com" + ], + "denakop.com": [ + "metropoles.com" + ], + "denverpost.com": [ + "bostonherald.com", + "twincities.com" + ], + "deployads.com": [ + "tinyurl.com", + "sciencedaily.com", + "myanimelist.net" + ], + "deqwas.net": [ + "rakuten.co.jp", + "suumo.jp", + "syosetu.com" + ], + "desipearl.com": [ + "oneindia.com", + "filmibeat.com" + ], + "detik.com": [ + "cnnindonesia.com", + "cnbcindonesia.com", + "insertlive.com" + ], + "dezeenjobs.com": [ + "dezeen.com" + ], + "dfapvmql-q.global.ssl.fastly.net": [ + "zappos.com", + "jcpenney.com", + "ulta.com" + ], + "dfcfw.com": [ + "eastmoney.com" + ], + "dhgate.com": [ + "informationweek.com" + ], + "di-dtaectolog-us-prod-1.appspot.com": [ + "go.com", + "disney.com", + "starwars.com" + ], + "dialogtech.com": [ + "findlaw.com", + "ringcentral.com", + "iit.edu" + ], + "diginetica.net": [ + "citilink.ru", + "eldorado.ru" + ], + "digitalaudienz.com": [ + "estadao.com.br" + ], + "digitalbee.al": [ + "balkanweb.com" + ], + "digitalbox.ru": [ + "zaycev.net" + ], + "digitalfirstmedia.com": [ + "bostonherald.com" + ], + "digitalkites.com": [ + "bollywoodshaadis.com" + ], + "digitaloceanspaces.com": [ + "vox.com" + ], + "digitalriver.com": [ + "poly.com" + ], + "digitaltarget.ru": [ + "rambler.ru", + "iz.ru", + "aif.ru" + ], + "digitru.st": [ + "imgur.com", + "speedtest.net", + "op.gg" + ], + "diqp43fm0w6zs.cloudfront.net": [ + "wwnorton.com" + ], + "discord.com": [ + "bulbagarden.net", + "lectortmo.com" + ], + "districtm.ca": [ + "royalgazette.com" + ], + "districtm.io": [ + "okezone.com", + "forbes.com", + "imgur.com" + ], + "djiops.com": [ + "dji.com" + ], + "dkuim.de": [ + "giga.de" + ], + "dl1d2m8ri9v3j.cloudfront.net": [ + "smartrecruiters.com" + ], + "dmgmediaprivacy.co.uk": [ + "dailymail.co.uk", + "metro.co.uk", + "inews.co.uk" + ], + "dmm.com": [ + "dmm.co.jp" + ], + "dmpxs.com": [ + "ktla.com", + "wgntv.com", + "kdvr.com" + ], + "dmxleo.com": [ + "dailymotion.com", + "heraldodemexico.com.mx", + "01net.com" + ], + "docomo.ne.jp": [ + "suumo.jp", + "hulu.jp", + "allabout.co.jp" + ], + "doga.cm": [ + "ferret-plus.com" + ], + "donorbox.org": [ + "truthout.org" + ], + "dotmetrics.net": [ + "avaz.ba", + "scotsman.com", + "birminghammail.co.uk" + ], + "dotomi.com": [ + "yahoo.com", + "okezone.com", + "forbes.com" + ], + "doubleclick.net": [ + "youtube.com", + "linkedin.com", + "netflix.com" + ], + "doublepimp.com": [ + "spankbang.com", + "efukt.com", + "gotporn.com" + ], + "douyucdn.cn": [ + "douyu.com" + ], + "dowjoneson.com": [ + "wsj.com", + "marketwatch.com", + "dowjones.com" + ], + "dpgmedia.net": [ + "dpgmedia.be", + "dpgmedia.nl", + "volkskrant.nl" + ], + "dpmsrv.com": [ + "boston.com", + "techtarget.com", + "adweek.com" + ], + "drcareers.ca": [ + "cmaj.ca" + ], + "dreamlab.pl": [ + "onet.pl" + ], + "dropbox.com": [ + "smallseotools.com", + "tinypng.com", + "getcloudapp.com" + ], + "dropboxusercontent.com": [ + "rewardstyle.com" + ], + "dsp.com": [ + "zhibo8.cc" + ], + "dsspn.com": [ + "newchic.com" + ], + "dtprofit.com": [ + "drtuber.com" + ], + "dtscdn.com": [ + "otvfoco.com.br", + "las2orillas.co" + ], + "dtscout.com": [ + "alnaharegypt.com", + "otvfoco.com.br", + "las2orillas.co" + ], + "dttq.net": [ + "acehardware.com" + ], + "duba.com": [ + "newduba.cn" + ], + "dugout.com": [ + "thethao247.vn", + "indosport.com" + ], + "duoyi.com": [ + "sina.com.cn" + ], + "dxcdn.com": [ + "dx.com" + ], + "dynad.net": [ + "uol.com.br" + ], + "dynadot.com": [ + "informationweek.com" + ], + "dynamics.com": [ + "edelman.com" + ], + "dynamicyield.com": [ + "washingtonexaminer.com", + "urbanoutfitters.com", + "dior.com" + ], + "dyntrk.com": [ + "imgur.com", + "retargetly.com" + ], + "e-contenta.com": [ + "ozon.ru" + ], + "e-himart.co.kr": [ + "hani.co.kr" + ], + "e-planning.net": [ + "youm7.com", + "softonic.com", + "geeksforgeeks.org" + ], + "easemob.com": [ + "iliangcang.com", + "loex.io" + ], + "eb.com": [ + "britannica.com" + ], + "ebay.com": [ + "businessinsider.com.au" + ], + "ebayimg.com": [ + "marktplaats.nl" + ], + "ebis.ne.jp": [ + "so-net.ne.jp", + "thebase.in", + "doda.jp" + ], + "ebu.io": [ + "dw.com" + ], + "ecbsn.com": [ + "rakuten.com" + ], + "eccmp.com": [ + "newegg.com", + "popsci.com", + "cabelas.com" + ], + "echoban.ru": [ + "svoboda.org", + "ng.ru" + ], + "ecustomeropinions.com": [ + "skysports.com" + ], + "ecwid.ru": [ + "ecwid.com" + ], + "edge-cdn.net": [ + "biomedcentral.com", + "springeropen.com" + ], + "edigitalsurvey.com": [ + "bbc.com", + "formula1.com" + ], + "editor80.com": [ + "heraldodemexico.com.mx" + ], + "editorx.com": [ + "wix.com" + ], + "eestatic.com": [ + "elespanol.com" + ], + "effectivemeasure.net": [ + "bbc.com", + "manoramaonline.com", + "abs-cbn.com" + ], + "egain.cloud": [ + "lego.com", + "jcpenney.com" + ], + "el-mundo.net": [ + "marca.com", + "elmundo.es", + "expansion.com" + ], + "eland-tech.com": [ + "buzzorange.com" + ], + "elfsight.com": [ + "afsp.org" + ], + "elmercurio.com": [ + "emol.com" + ], + "eloqua.com": [ + "alibabacloud.com", + "addthis.com", + "intel.com" + ], + "elpais.com": [ + "as.com", + "cadenaser.com" + ], + "elsevier.com": [ + "thelancet.com", + "ssrn.com", + "cell.com" + ], + "elsevierhealth.com": [ + "thelancet.com", + "cell.com" + ], + "eltiempo.co": [ + "eltiempo.com" + ], + "eltiempo.digital": [ + "eltiempo.com" + ], + "embedly.com": [ + "uservoice.com" + ], + "emxdgt.com": [ + "forbes.com", + "usatoday.com", + "dailymotion.com" + ], + "enamad.ir": [ + "digikala.com", + "divar.ir", + "mofidonline.com" + ], + "ename.cn": [ + "ename.com", + "ename.net" + ], + "engageclick.com": [ + "marriott.com" + ], + "engageya.com": [ + "memurlar.net", + "sozcu.com.tr", + "haberler.com" + ], + "ens.fr": [ + "psl.eu" + ], + "ensighten.com": [ + "aljazeera.com", + "britishairways.com" + ], + "entertainow.com": [ + "dailydot.com" + ], + "entrust.net": [ + "rkdms.com" + ], + "envoke.com": [ + "wildapricot.com" + ], + "epicurious.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "episerver.net": [ + "iata.org", + "bsigroup.com" + ], + "eqads.com": [ + "autotrader.ca" + ], + "equalstyle.com": [ + "hubpages.com" + ], + "erepublic.com": [ + "govtech.com", + "governing.com" + ], + "essayassist.com": [ + "eliteessaywriters.com" + ], + "essayprofit.com": [ + "masterpapers.com", + "payforessay.net", + "samedayessay.com" + ], + "estadao-bi-ga360.appspot.com": [ + "estadao.com.br" + ], + "estat.com": [ + "over-blog.com", + "lefigaro.fr", + "eklablog.com" + ], + "etracker.de": [ + "unibe.ch", + "muenchen.de" + ], + "eum-appdynamics.com": [ + "webex.com", + "intuit.com", + "jstor.org" + ], + "everesttech.net": [ + "adobe.com", + "msn.com", + "okezone.com" + ], + "evergage.com": [ + "cisco.com", + "ti.com", + "adorama.com" + ], + "everyaction.com": [ + "ewg.org", + "ucsusa.org", + "audubon.org" + ], + "everzones.com": [ + "cleanpng.com" + ], + "evise.com": [ + "thelancet.com", + "cell.com" + ], + "evo.company": [ + "prom.ua", + "tiu.ru" + ], + "evolok.net": [ + "realclearpolitics.com", + "newstatesman.com", + "nation.africa" + ], + "evsuite.com": [ + "thrivecart.com" + ], + "ewrvdi.net": [ + "alamy.com" + ], + "exactag.com": [ + "t-online.de", + "bahn.de" + ], + "exacttarget.com": [ + "uschamber.com" + ], + "excite.co.jp": [ + "exblog.jp" + ], + "exdynsrv.com": [ + "manganelo.com", + "veoh.com", + "lectortmo.com" + ], + "exelator.com": [ + "amazon.com", + "msn.com", + "okezone.com" + ], + "exitintel.com": [ + "harpercollins.com", + "simonandschuster.com" + ], + "exoclick.com": [ + "manganelo.com", + "txxx.com", + "stripchat.com" + ], + "exosrv.com": [ + "spankbang.com", + "sxyprn.com", + "txxx.com" + ], + "exoticads.com": [ + "chaturbate.com" + ], + "expedia.com": [ + "informationweek.com", + "fstoppers.com" + ], + "expediapartnercentral.com": [ + "vrbo.com" + ], + "experiancs.com": [ + "experian.com" + ], + "expertrec.com": [ + "livecareer.com" + ], + "exponea.com": [ + "ozon.ru", + "id-binomo.com", + "patient.info" + ], + "eyeota.net": [ + "msn.com", + "forbes.com", + "detik.com" + ], + "eyereturn.com": [ + "thestar.com", + "queensu.ca", + "eyereturnmarketing.com" + ], + "ezoic.net": [ + "smallbiztrends.com", + "mensjournal.com", + "broadwayworld.com" + ], + "f1272serve.xyz": [ + "youporn.com" + ], + "f5.com": [ + "nginx.com" + ], + "fabled.com": [ + "next.co.uk" + ], + "facebook.com": [ + "instagram.com", + "netflix.com", + "amazon.com" + ], + "fairfaxregional.com.au": [ + "canberratimes.com.au" + ], + "faisys.com": [ + "qhnmdb.com" + ], + "fang.com": [ + "soufun.com" + ], + "farfetch-contents.com": [ + "farfetch.com" + ], + "farfetch.net": [ + "farfetch.com" + ], + "faromen.online": [ + "hclips.com" + ], + "fastapi.net": [ + "ifeng.com" + ], + "fastcounter.de": [ + "directupload.net" + ], + "fcglcdn.com": [ + "firstcry.com" + ], + "feathr.co": [ + "asm.org", + "nutrition.org", + "contentmarketinginstitute.com" + ], + "feedify.net": [ + "jagonews24.com", + "newstrend.news", + "tv9marathi.com" + ], + "felmat.net": [ + "techacademy.jp", + "lolipop.jp" + ], + "fengimg.com": [ + "feng.com" + ], + "fengkongcloud.com": [ + "ccidnet.com", + "56.com" + ], + "ferret-one.com": [ + "ferret-plus.com" + ], + "ffmapi.com": [ + "audiomack.com" + ], + "fieldtest.cc": [ + "bloody-disgusting.com" + ], + "filmibeat.com": [ + "oneindia.com" + ], + "finam.ru": [ + "kp.ru" + ], + "financialjuice.com": [ + "zerohedge.com" + ], + "finder.com.au": [ + "finder.com" + ], + "firebaselogging.googleapis.com": [ + "vice.com", + "history.com", + "hk01.com" + ], + "firstimpression.io": [ + "wegotthiscovered.com", + "jpost.com", + "ynet.co.il" + ], + "fiverr.com": [ + "informationweek.com" + ], + "fivetran.com": [ + "wistia.com", + "kiva.org" + ], + "fkw.com": [ + "qhdsny.com", + "qhnmdb.com" + ], + "flashtalking.com": [ + "adobe.com", + "godaddy.com", + "dell.com" + ], + "flipp.com": [ + "jcpenney.com" + ], + "flocktory.com": [ + "farfetch.com", + "cian.ru", + "mvideo.ru" + ], + "flowtype.press": [ + "sciencedaily.com" + ], + "flw.li": [ + "project-syndicate.org" + ], + "focas.jp": [ + "dlsite.com", + "onamae.com" + ], + "fontplus.jp": [ + "ntv.co.jp" + ], + "fooby.ch": [ + "20min.ch" + ], + "foodnetwork.com": [ + "foodnetwork.co.uk" + ], + "force.com": [ + "bhphotovideo.com", + "akamai.com", + "rsa.com" + ], + "foreks.com": [ + "liberal.gr" + ], + "foresee.com": [ + "qualcomm.com", + "ralphlauren.com" + ], + "formstack.io": [ + "exploratorium.edu" + ], + "fospha.com": [ + "nhm.ac.uk", + "mandarinoriental.com" + ], + "foursquare.com": [ + "oliveogrill.com" + ], + "fout.jp": [ + "moneyforward.com", + "wowkorea.jp", + "alc.co.jp" + ], + "fox.com": [ + "nationalgeographic.com", + "foxsports.com" + ], + "foxycart.com": [ + "brookings.edu" + ], + "fppressa.ru": [ + "cosmo.ru" + ], + "franecki.net": [ + "filmix.co", + "rezka.ag", + "baskino.me" + ], + "franeski.net": [ + "hdrezka-ag.com" + ], + "freelancer.com": [ + "informationweek.com" + ], + "freeskreen.com": [ + "globalnews.ca", + "sfweekly.com", + "sfexaminer.com" + ], + "freespee.com": [ + "plus.net" + ], + "freevisitorcounters.com": [ + "prensa-latina.cu" + ], + "freshchat.com": [ + "freshdesk.com", + "sehatq.com", + "upstox.com" + ], + "freshdesk.com": [ + "italist.com" + ], + "freshrelevance.com": [ + "stltoday.com", + "madison.com" + ], + "fresnobee.com": [ + "idahostatesman.com" + ], + "friendbuy.com": [ + "forever21.com" + ], + "frosmo.com": [ + "helsinki.fi" + ], + "fstrk.net": [ + "forgeofempires.com" + ], + "fujitsu-webmart.com": [ + "moppy.jp" + ], + "fundraiseup.com": [ + "heart.org" + ], + "fwmrm.net": [ + "geeksforgeeks.org", + "foodnetwork.com", + "nbc.com" + ], + "fx678img.com": [ + "fx678.com" + ], + "fyi-marketing.com": [ + "tomanifesto.gr" + ], + "fyrsbckgi-c.global.ssl.fastly.net": [ + "lenovo.com", + "upwork.com", + "asics.com" + ], + "gamania.com": [ + "nownews.com" + ], + "gameanalytics.dev": [ + "gameanalytics.com" + ], + "gammaplatform.com": [ + "baomoi.com", + "indosport.com", + "2banh.vn" + ], + "garanti.com.tr": [ + "garantibbva.com.tr" + ], + "gator.io": [ + "webstarts.com" + ], + "gaug.es": [ + "crictracker.com" + ], + "gazeta.pl": [ + "wyborcza.pl" + ], + "gcimetrics.com": [ + "guitarcenter.com" + ], + "gd.gov.cn": [ + "gz.gov.cn" + ], + "gdz.work": [ + "gdz.ru" + ], + "geekbuying.com": [ + "informationweek.com" + ], + "geetest.com": [ + "zhaopin.com", + "globalsources.com", + "fnac.com" + ], + "geilicdn.com": [ + "weidian.com" + ], + "geistm.com": [ + "msn.com", + "dashlane.com", + "rosettastone.com" + ], + "gelbmann.info": [ + "w3techs.com" + ], + "geminimedia-eg.com": [ + "masrawy.com" + ], + "gemius.pl": [ + "allegro.pl", + "ensonhaber.com", + "onet.pl" + ], + "generaltracking.de": [ + "check24.de" + ], + "genieesspv.jp": [ + "eroterest.net", + "jawapos.com" + ], + "geniusmonkey.com": [ + "pdx.edu", + "fullerton.edu" + ], + "geofli.com": [ + "nokia.com" + ], + "geotrust.com": [ + "rapidssl.com" + ], + "get4click.ru": [ + "skyeng.ru" + ], + "getadmiral.com": [ + "bigthink.com", + "newatlas.com" + ], + "getapp.com": [ + "scoop.it" + ], + "getblue.io": [ + "newchic.com", + "movavi.com" + ], + "getblueshift.com": [ + "slickdeals.net", + "udacity.com", + "tiki.vn" + ], + "getclicky.com": [ + "boutell.co.uk", + "kompas.tv", + "newatlas.com" + ], + "getcreditone.com": [ + "creditonebank.com" + ], + "getdrip.com": [ + "socialmediaexaminer.com", + "leadpages.com", + "thrivecart.com" + ], + "getletterpress.com": [ + "casetify.com", + "toasttab.com", + "stitchfix.com" + ], + "getnshow.com": [ + "hani.co.kr" + ], + "getrockerbox.com": [ + "codecademy.com", + "society6.com", + "saatchiart.com" + ], + "getsmartcontent.com": [ + "pcworld.com" + ], + "getway.biz": [ + "parspack.com" + ], + "gh-base.com": [ + "ascii.jp" + ], + "gigazine.asia": [ + "gigazine.net" + ], + "gigya.com": [ + "abc.net.au", + "deloitte.com", + "abs-cbn.com" + ], + "gimp.org": [ + "flattr.com" + ], + "giraff.io": [ + "iz.ru", + "vz.ru", + "yandex.ru" + ], + "gitee.com": [ + "discuz.net" + ], + "github.com": [ + "flurry.com", + "imagemagick.com" + ], + "gixioanalytics.com": [ + "slashgear.com" + ], + "gjirafa.com": [ + "gazetaexpress.com" + ], + "glamour.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "glassboxdigital.io": [ + "marriott.com", + "creditonebank.com", + "ritzcarlton.com" + ], + "glassdoor.com": [ + "a2hosting.com", + "paychex.com" + ], + "gleam.io": [ + "macrumors.com", + "businessinsider.com.au", + "androidauthority.com" + ], + "global-e.com": [ + "forever21.com" + ], + "globalwebindex.net": [ + "people.com", + "ew.com", + "travelandleisure.com" + ], + "globo.com": [ + "techtudo.com.br" + ], + "gmossp-sp.jp": [ + "xrea.com", + "tenki.jp", + "lolipop.jp" + ], + "go.com": [ + "abc7news.com", + "abc7chicago.com", + "abc13.com" + ], + "godaddy.com": [ + "heycould.com", + "junwonsil.com", + "cdn.house" + ], + "goepson.com": [ + "epson.com" + ], + "gogocdn.net": [ + "gogoanime.so" + ], + "goinflow.com": [ + "tenable.com" + ], + "goo.ne.jp": [ + "ocn.ne.jp" + ], + "google-analytics.com": [ + "linkedin.com", + "google.com", + "godaddy.com" + ], + "google.com": [ + "linkedin.com", + "yahoo.com", + "googletagmanager.com" + ], + "google.com.pk": [ + "express.pk" + ], + "googleadservices.com": [ + "matterport.com" + ], + "goop.com": [ + "informationweek.com" + ], + "gosuslugi.ru": [ + "mosreg.ru" + ], + "gotprofits.com": [ + "gotporn.com" + ], + "goutee.top": [ + "allocine.fr" + ], + "governing.com": [ + "govtech.com" + ], + "gq.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "graizoah.com": [ + "shahid4u.io", + "clipconverter.cc" + ], + "gravito.net": [ + "iltalehti.fi" + ], + "grctech.com": [ + "grc.com" + ], + "green-red.com": [ + "jugantor.com" + ], + "gridsumdissector.com": [ + "www.gov.cn", + "pcauto.com.cn", + "cztv.com" + ], + "groovinads.com": [ + "cronica.com.ar", + "retargetly.com", + "perfil.com" + ], + "group-ib.ru": [ + "eldorado.ru" + ], + "groupondata.com": [ + "groupon.com" + ], + "growingio.com": [ + "focus.cn", + "53kf.com", + "koolearn.com" + ], + "grumft.com": [ + "otvfoco.com.br" + ], + "grupaonet.pl": [ + "onet.pl" + ], + "grupapino.pl": [ + "prv.pl" + ], + "grupoelcorteingles.es": [ + "elcorteingles.es" + ], + "gsoi.fr": [ + "sudouest.fr" + ], + "gsspat.jp": [ + "dmm.co.jp", + "lolipop.jp", + "wowkorea.jp" + ], + "gssprt.jp": [ + "sony.jp", + "eroterest.net", + "jawapos.com" + ], + "gtags.net": [ + "ctrip.com", + "suning.com", + "idianfa.com" + ], + "gumgum.com": [ + "youm7.com", + "geeksforgeeks.org", + "venturebeat.com" + ], + "guoshipartners.com": [ + "hinet.net", + "buzzorange.com" + ], + "gwdg.de": [ + "uni-goettingen.de" + ], + "gwmtracking.com": [ + "norton.com", + "proofpoint.com", + "blurb.com" + ], + "haaretz.co.il": [ + "haaretz.com" + ], + "hactar.is": [ + "opendemocracy.net" + ], + "hainanfp.com": [ + "hinews.cn" + ], + "halfclub.com": [ + "hani.co.kr" + ], + "hanmaker.com": [ + "ooopic.com", + "58pic.com" + ], + "hao123.com": [ + "skycn.com" + ], + "hao123img.com": [ + "skycn.com" + ], + "harrisinteractive.eu": [ + "olympic.org" + ], + "hasbroapps.com": [ + "hasbro.com" + ], + "hatena.ne.jp": [ + "hatenablog.com" + ], + "hbabit.com": [ + "huobi.com" + ], + "hbc.com": [ + "saksfifthavenue.com" + ], + "hcaptcha.com": [ + "bahn.de", + "cgtrader.com" + ], + "headbidder.net": [ + "christianpost.com" + ], + "healthunlocked.com": [ + "adaa.org" + ], + "heapanalytics.com": [ + "merriam-webster.com", + "calendly.com", + "slickdeals.net" + ], + "hellorf.com": [ + "zcool.com.cn" + ], + "heraldm.com": [ + "koreaherald.com" + ], + "hexagon-analytics.com": [ + "flickr.com", + "udemy.com", + "scribd.com" + ], + "hgbn.network": [ + "24video.vip" + ], + "hgtv.com": [ + "discovery.com", + "foodnetwork.com", + "diynetwork.com" + ], + "hhcdn.ru": [ + "hh.ru" + ], + "highlow.net": [ + "highlow.com" + ], + "highwire.org": [ + "pnas.org", + "diabetesjournals.org", + "aacrjournals.org" + ], + "hihainan.info": [ + "hinews.cn" + ], + "hiido.com": [ + "yy.com", + "bigolive.tv", + "duowan.com" + ], + "hilton.com": [ + "informationweek.com" + ], + "hindustantimes.com": [ + "livemint.com", + "livehindustan.com", + "shine.com" + ], + "hinet.net": [ + "xuite.net" + ], + "histats.com": [ + "alnaharegypt.com", + "sarkariresult.com", + "las2orillas.co" + ], + "hitslink.com": [ + "webstarts.com" + ], + "hive.co": [ + "complex.com" + ], + "hket.com": [ + "ulifestyle.com.hk" + ], + "hketgroup.com": [ + "hket.com", + "ulifestyle.com.hk" + ], + "hlserve.com": [ + "bestbuy.com", + "dickssportinggoods.com" + ], + "hmhost.co.uk": [ + "autocar.co.uk" + ], + "holder.com.ua": [ + "i.ua", + "bigmir.net", + "korrespondent.net" + ], + "holmesmind.com": [ + "yahoo.com", + "buzzorange.com" + ], + "homeway.com.cn": [ + "hexun.com" + ], + "hosted-inin.com": [ + "ray-ban.com" + ], + "hot-mob.com": [ + "on.cc" + ], + "hotelscombined.com": [ + "informationweek.com" + ], + "hotwire.com": [ + "informationweek.com" + ], + "hq3x.com": [ + "hdsex.org" + ], + "hsbc.com.hk": [ + "hangseng.com" + ], + "htcvive.com": [ + "htc.com" + ], + "hton.com.cn": [ + "workercn.cn" + ], + "hubpd.com": [ + "huanqiu.com", + "stcn.com" + ], + "hubspot.com": [ + "surveymonkey.com", + "freepik.com", + "disqus.com" + ], + "hujiang.com": [ + "hjenglish.com" + ], + "hulu.com": [ + "informationweek.com" + ], + "huluqa.com": [ + "hilton.com" + ], + "humcommerce.com": [ + "cyberchimps.com" + ], + "hurpass.com": [ + "hurriyet.com.tr", + "hurriyetdailynews.com" + ], + "hushly.com": [ + "teamviewer.com", + "matterport.com", + "onelogin.com" + ], + "hybrid.ai": [ + "ozon.ru", + "rezka.ag", + "drive2.ru" + ], + "hyros.com": [ + "clickfunnels.com" + ], + "i-mobile.co.jp": [ + "lolipop.jp", + "syosetu.com", + "dlsite.com" + ], + "i.ua": [ + "bigmir.net", + "korrespondent.net" + ], + "i115008.net": [ + "udacity.com" + ], + "i347961.net": [ + "canadiantire.ca" + ], + "iadvize.com": [ + "samsung.com", + "prestashop.com", + "labanquepostale.fr" + ], + "iasds01.com": [ + "zingnews.vn", + "baomoi.com" + ], + "ib-ibi.com": [ + "howstuffworks.com", + "mapquest.com" + ], + "ibclick.stream": [ + "webmd.com", + "medscape.com", + "medicinenet.com" + ], + "ibillboard.com": [ + "ceskatelevize.cz" + ], + "ibt.com": [ + "ibtimes.co.uk" + ], + "iconnode.com": [ + "anydesk.com" + ], + "id5-sync.com": [ + "okezone.com", + "imgur.com", + "dailymail.co.uk" + ], + "idealmedia.io": [ + "uptodown.com" + ], + "ideaplus.mk": [ + "time.mk" + ], + "idio.co": [ + "ibm.com", + "intel.com", + "adp.com" + ], + "iesnare.com": [ + "mercari.com", + "citi.com", + "dyn.com" + ], + "ign.com": [ + "videojs.com", + "gamespy.com" + ], + "igodigital.com": [ + "usatoday.com", + "smh.com.au", + "lowes.com" + ], + "iheart.com": [ + "theblaze.com", + "bnnbloomberg.ca" + ], + "iherb.com": [ + "informationweek.com" + ], + "ijento.com": [ + "searchenginewatch.com", + "clickz.com" + ], + "iljmp.com": [ + "stocktwits.com" + ], + "im-apps.net": [ + "kakaku.com", + "biglobe.ne.jp", + "nifty.com" + ], + "imedao.com": [ + "xueqiu.com" + ], + "imedia.cz": [ + "seznam.cz", + "idnes.cz", + "novinky.cz" + ], + "imhd.io": [ + "variety.com", + "rollingstone.com", + "wwd.com" + ], + "imi.chat": [ + "asha.org" + ], + "impact-ad.jp": [ + "yahoo.co.jp", + "rakuten.co.jp", + "nikkei.com" + ], + "impact.com": [ + "bestbuy.com" + ], + "implishing.club": [ + "shorturl.at", + "analdin.com", + "xozilla.com" + ], + "impression.link": [ + "thetrainline.com" + ], + "imrworldwide.com": [ + "yahoo.co.jp", + "cnn.com", + "twitch.tv" + ], + "imspublishergroup.com": [ + "marketbeat.com" + ], + "in-page-push.com": [ + "opensubtitles.org", + "fakaza.com", + "clipconverter.cc" + ], + "inbenta.com": [ + "credit-agricole.fr" + ], + "indacolive.com": [ + "dezeen.com" + ], + "indapass.hu": [ + "index.hu", + "blog.hu" + ], + "indeed.com": [ + "indeed.co.uk", + "wpfr.net" + ], + "india.com": [ + "dnaindia.com" + ], + "indianexpress.com": [ + "financialexpress.com" + ], + "indoleads.com": [ + "newchic.com" + ], + "infeed.id": [ + "liputan6.com", + "dream.co.id", + "bola.com" + ], + "infinigrow.com": [ + "similarweb.com" + ], + "infinity-tracking.net": [ + "telegraph.co.uk", + "gartner.com", + "waldenu.edu" + ], + "infolinks.com": [ + "prospect.org", + "cootekservice.com" + ], + "informz.net": [ + "physiology.org", + "eatright.org", + "adaa.org" + ], + "infusionsoft.app": [ + "keap.com" + ], + "infusionsoft.com": [ + "keap.com" + ], + "ingage.tech": [ + "alternet.org" + ], + "injapan.com": [ + "japantoday.com" + ], + "inmobi.net": [ + "inmobi.com" + ], + "inmoment.com": [ + "golfdigest.com" + ], + "innity.com": [ + "liputan6.com", + "merdeka.com", + "kapanlagi.com" + ], + "innocraft.cloud": [ + "thunderbird.net", + "bunnycdn.com" + ], + "innogamescdn.com": [ + "forgeofempires.com" + ], + "innologica.com": [ + "inoreader.com" + ], + "innovid.com": [ + "southwest.com", + "toyota.com", + "bet.com" + ], + "inpagepush.com": [ + "y2mate.guru", + "shahid4u.io", + "4anime.to" + ], + "inpwrd.net": [ + "twincities.com", + "dice.com" + ], + "inq.com": [ + "ups.com", + "att.com", + "tdameritrade.com" + ], + "insent.ai": [ + "sortable.com" + ], + "inside-graph.com": [ + "gucci.com", + "sephora.com", + "valentino.com" + ], + "insider.com": [ + "businessinsider.com.au" + ], + "insightexpressai.com": [ + "unsplash.com", + "experian.com", + "thrillist.com" + ], + "instabot.io": [ + "arthritis.org" + ], + "instagram.com": [ + "arizona.edu", + "nokia.com", + "tmz.com" + ], + "insticator.com": [ + "youm7.com", + "mydramalist.com", + "alternet.org" + ], + "insurads.com": [ + "corriere.it", + "abc.es", + "vocento.com" + ], + "intellitxt.com": [ + "techadvisor.co.uk" + ], + "intent-apps.com": [ + "codecademy.com", + "zappos.com" + ], + "intent.ai": [ + "news.am" + ], + "intentiq.com": [ + "usatoday.com", + "uptodown.com", + "matterport.com" + ], + "intentmedia.net": [ + "zappos.com", + "hotwire.com", + "latam.com" + ], + "intentsify.io": [ + "home.neustar" + ], + "intergient.com": [ + "collider.com", + "infoplease.com", + "letterboxd.com" + ], + "internetbrands.com": [ + "nolo.com", + "avvo.com", + "vbulletin.com" + ], + "investingchannel.com": [ + "finviz.com", + "benzinga.com", + "stocktwits.com" + ], + "investis.com": [ + "ge.com", + "informa.com", + "thewaltdisneycompany.com" + ], + "investorwords.com": [ + "businessdictionary.com" + ], + "invl.co": [ + "goody25.com" + ], + "invttjs.com.br": [ + "abril.com.br" + ], + "ioam.de": [ + "spiegel.de", + "businessinsider.de", + "t-online.de" + ], + "iocnt.net": [ + "orf.at", + "krone.at", + "kurier.at" + ], + "ip-label.net": [ + "rtve.es" + ], + "ipchaxun.com": [ + "ip138.com" + ], + "iperceptions.com": [ + "xfinity.com", + "adobe.com", + "wwe.com" + ], + "ipgeolocation.io": [ + "chathamhouse.org" + ], + "ipify.org": [ + "threatpost.com" + ], + "ipinyou.com": [ + "shangri-la.com", + "klook.com" + ], + "ipredictive.com": [ + "coinmarketcap.com", + "aarp.org", + "autozone.com" + ], + "ipvanish.com": [ + "informationweek.com" + ], + "iqoption.com": [ + "iqbroker.com" + ], + "irs03.com": [ + "mgtv.com", + "56.com", + "pcauto.com.cn" + ], + "isanook.com": [ + "sanook.com" + ], + "islamist-movements.com": [ + "albawabhnews.com" + ], + "ispot.tv": [ + "wayfair.com", + "t-mobile.com", + "experian.com" + ], + "issuu.com": [ + "metrotimes.com", + "riverfronttimes.com", + "orlandoweekly.com" + ], + "istruzione.it": [ + "miur.gov.it" + ], + "iteratehq.com": [ + "nytimes.com", + "economist.com", + "roku.com" + ], + "itmedia.co.jp": [ + "atmarkit.co.jp" + ], + "itmedia.jp": [ + "itmedia.co.jp", + "atmarkit.co.jp" + ], + "ivcbrasil.org.br": [ + "campograndenews.com.br", + "estadao.com.br", + "clicrbs.com.br" + ], + "ivideosmart.com": [ + "tribunnews.com", + "inquirer.net", + "brilio.net" + ], + "ivx.cn": [ + "ih5.cn" + ], + "ixiaa.com": [ + "aaa.com", + "equifax.com" + ], + "izooto.com": [ + "moneycontrol.com", + "inquirer.net", + "jpnn.com" + ], + "jabmo.app": [ + "sigmaaldrich.com" + ], + "jads.co": [ + "tyker.xyz", + "avgle.com" + ], + "janrainsso.com": [ + "financialpost.com", + "montrealgazette.com", + "calgaryherald.com" + ], + "jassfederal.ch": [ + "bluewin.ch" + ], + "jd.com": [ + "ifeng.com" + ], + "jhu.edu": [ + "jhsph.edu" + ], + "jilt.com": [ + "famethemes.com", + "wpzoom.com" + ], + "jiosaavn.com": [ + "jio.com" + ], + "jivosite.com": [ + "e-planning.net", + "1sept.ru" + ], + "jixie.io": [ + "grid.id" + ], + "jnqsge.net": [ + "acuityscheduling.com" + ], + "jobat.be": [ + "nieuwsblad.be" + ], + "journalmedia.ie": [ + "thejournal.ie" + ], + "jrs5.com": [ + "newegg.com" + ], + "jschina.com.cn": [ + "xhby.net" + ], + "jsdelivr.net": [ + "hops.id", + "saksfifthavenue.com", + "uns.ac.id", + "jamesclear.com" + ], + "jsrdn.com": [ + "dallasnews.com", + "realclearpolitics.com", + "sparknotes.com" + ], + "juicyads.com": [ + "e-hentai.org", + "avgle.com" + ], + "justpremium.com": [ + "techradar.com", + "inquisitr.com", + "pcgamer.com" + ], + "jwplayer.com": [ + "theregister.com", + "beinsports.com", + "stripes.com" + ], + "jwpltx.com": [ + "npr.org", + "merriam-webster.com", + "fastcompany.com" + ], + "jxtrackers.azurewebsites.net": [ + "kompas.com", + "grid.id", + "kompasiana.com" + ], + "kaipuyun.cn": [ + "hunan.gov.cn", + "hainan.gov.cn", + "stdaily.com" + ], + "kaixin001.com.cn": [ + "kaixin001.com" + ], + "kakao.com": [ + "daum.net", + "tistory.com" + ], + "kameleoon.eu": [ + "heise.de", + "awin.com", + "banquepopulaire.fr" + ], + "kampyle.com": [ + "lowes.com" + ], + "kanade-ad.net": [ + "tenki.jp", + "syosetu.com" + ], + "kaprila.com": [ + "soft98.ir", + "faradars.org", + "yasdl.com" + ], + "kaptcha.com": [ + "nerdwallet.com", + "placeit.net", + "everlane.com" + ], + "kargo.com": [ + "dailymail.co.uk", + "youm7.com", + "thehill.com" + ], + "karpishe.com": [ + "asriran.com" + ], + "kartra.com": [ + "webinarjam.com" + ], + "kaspersky-labs.com": [ + "kaspersky.com" + ], + "kaxsdc.com": [ + "papajohns.com" + ], + "kayak.com": [ + "priceline.com" + ], + "kcsfile.com": [ + "kucoin.com" + ], + "kexin001.com": [ + "babytree.com" + ], + "keywee.co": [ + "nationalgeographic.com", + "mashable.com", + "nypost.com" + ], + "kf5.com": [ + "growingio.com" + ], + "kinsta.com": [ + "informationweek.com" + ], + "kivpro.com": [ + "yenicag.az" + ], + "kl-youniverse.com": [ + "dream.co.id", + "bola.com", + "fimela.com" + ], + "klangoo.com": [ + "globalresearch.ca", + "dailyherald.com" + ], + "klarnaservices.com": [ + "jbl.com" + ], + "klarnauserservices.com": [ + "jbl.com" + ], + "kleecks.com": [ + "fendi.com" + ], + "klick2contact.com": [ + "thebodyshop.com" + ], + "knet.cn": [ + "china.com.cn", + "eastday.com", + "hexun.com" + ], + "knnlab.com": [ + "informaconnect.com" + ], + "knotch.it": [ + "aboutamazon.com" + ], + "koddi.com": [ + "hilton.com", + "wyndhamhotels.com" + ], + "kompas.com": [ + "tribunnews.com", + "grid.id", + "kompasiana.com" + ], + "kooora.ws": [ + "kooora.com" + ], + "kpcdn.net": [ + "kp.ru" + ], + "kraken.com": [ + "informationweek.com" + ], + "krxd.net": [ + "time.com", + "foxnews.com", + "salesforce.com" + ], + "ksmobile.com": [ + "duba.com", + "newduba.cn" + ], + "kwanzoo.com": [ + "treasuredata.com" + ], + "labocleo.org": [ + "hypotheses.org", + "openedition.org" + ], + "ladbible.com": [ + "sportbible.com" + ], + "ladsp.com": [ + "syosetu.com", + "sony.jp", + "sankei.com" + ], + "lan.com": [ + "latam.com" + ], + "landc.co.uk": [ + "thisismoney.co.uk" + ], + "latinongroup.com": [ + "ambito.com" + ], + "leadexpert.pl": [ + "gazeta.pl" + ], + "leadlab.click": [ + "fraunhofer.de" + ], + "leadlander.com": [ + "panasonic.com", + "servicenow.com", + "cornerstoneondemand.com" + ], + "leadquizzes.com": [ + "diariolibre.com" + ], + "leadspace.com": [ + "opendns.com" + ], + "leadsrx.com": [ + "monster.com" + ], + "leady.com": [ + "fieldengineer.com" + ], + "leafly.ca": [ + "leafly.com" + ], + "ledger.com": [ + "informationweek.com" + ], + "leju.com": [ + "7gz.com" + ], + "lemnisk.co": [ + "axisbank.com" + ], + "lennyletter.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "lenovo.com": [ + "lenovo.com.cn" + ], + "lentainform.com": [ + "uptodown.com", + "rbc.ru", + "idealmedia.io" + ], + "letv.com": [ + "le.com" + ], + "lfeeder.com": [ + "foxitsoftware.com", + "wur.nl" + ], + "liadm.com": [ + "bloomberg.com", + "cnet.com", + "usatoday.com" + ], + "liebao.cn": [ + "duba.com", + "newduba.cn" + ], + "lietou-static.com": [ + "liepin.com" + ], + "lightboxcdn.com": [ + "cnet.com", + "zdnet.com", + "fastcompany.com" + ], + "lightinthebox.com": [ + "informationweek.com" + ], + "lijit.com": [ + "simpli.fi", + "mimecast.com", + "iflscience.com" + ], + "likeevideo.com": [ + "bigolive.tv" + ], + "likr.com.tw": [ + "chinatimes.com", + "newtalk.tw", + "businesstoday.com.tw" + ], + "line.me": [ + "plala.or.jp", + "freee.co.jp", + "oppo.com" + ], + "linkconnector.com": [ + "wondershare.com", + "lww.com", + "newchic.com" + ], + "linkedin.com": [ + "adobe.com", + "amazon.com", + "msn.com" + ], + "linker.hr": [ + "jutarnji.hr", + "dnevnik.hr" + ], + "linkonlineworld.com": [ + "yallakora.com", + "masrawy.com" + ], + "linkprice.com": [ + "helpstart.co.kr" + ], + "linksynergy.com": [ + "rakuten.co.jp", + "alibabacloud.com", + "udemy.com" + ], + "list-manage.com": [ + "woocommerce.com", + "nme.com", + "lapatilla.com" + ], + "listrakbi.com": [ + "denverpost.com", + "almanac.com", + "budsgunshop.com" + ], + "literatumonline.com": [ + "thelancet.com", + "cell.com" + ], + "liuzhuni.com": [ + "huim.com" + ], + "live2support.com": [ + "proprofs.com", + "qualaroo.com" + ], + "livechatinc.com": [ + "wpengine.com", + "ning.com", + "livechat.com", + "moo.com" + ], + "livejasmin.com": [ + "spankbang.com" + ], + "liveperson.net": [ + "godaddy.com", + "virginmedia.com", + "microsoft.com" + ], + "livetex.me": [ + "cntd.ru" + ], + "livetex.ru": [ + "timeweb.com", + "cntd.ru" + ], + "lkqd.net": [ + "youm7.com", + "gizmodo.com", + "memurlar.net" + ], + "lmiutil.com": [ + "lastpass.com", + "logmein.com" + ], + "lndata.com": [ + "thenewslens.com" + ], + "loadercdn.net": [ + "ukr.net", + "gismeteo.ua", + "sinoptik.ua" + ], + "loc.gov": [ + "wdl.org" + ], + "localytics.com": [ + "passeidireto.com" + ], + "lockerdome.com": [ + "psychcentral.com", + "astrologyanswers.com" + ], + "logger.co.kr": [ + "dothome.co.kr" + ], + "loginfra.com": [ + "webtoons.com", + "vlive.tv" + ], + "loginhood.io": [ + "bigthink.com", + "iflscience.com", + "247wallst.com" + ], + "loginside.co.kr": [ + "koreaherald.com" + ], + "logitech.com": [ + "logitechg.com" + ], + "logly.co.jp": [ + "nifty.com", + "excite.co.jp", + "diamond.jp" + ], + "logsss.com": [ + "gearbest.com" + ], + "loop11.com": [ + "ato.gov.au", + "business.gov.au" + ], + "loopassets.net": [ + "uniqlo.com", + "coach.com" + ], + "loopgift.com": [ + "uniqlo.com", + "coach.com", + "michaelkors.com" + ], + "lp4.io": [ + "nrk.no", + "ilsole24ore.com", + "bluewin.ch" + ], + "lpage.co": [ + "macleans.ca" + ], + "lpoint.com": [ + "hani.co.kr" + ], + "lps.lpages.co": [ + "leadpages.com" + ], + "lsurl.cn": [ + "findlaw.cn" + ], + "ltwebstatic.com": [ + "shein.com" + ], + "lwcal.com": [ + "rice.edu" + ], + "lww.com": [ + "ahajournals.org", + "neurology.org", + "ovid.com" + ], + "lytics.io": [ + "adweek.com", + "ancestry.com", + "tableau.com" + ], + "lz-pub-ads.com": [ + "cronica.com.ar" + ], + "m6r.eu": [ + "statista.com", + "ceskatelevize.cz" + ], + "maases.com": [ + "promodj.com" + ], + "macromill.com": [ + "asahi.com", + "yomiuri.co.jp", + "hotpepper.jp" + ], + "mad-docs.azurewebsites.net": [ + "n4g.com" + ], + "maerskline.com": [ + "maersk.com" + ], + "magnetmail.net": [ + "asm.org", + "acog.org", + "jbc.org" + ], + "mail.ru": [ + "aliexpress.ru", + "rambler.ru", + "sberbank.ru", + "tutu.ru" + ], + "mailfire.io": [ + "legit.ng", + "tuko.co.ke", + "briefly.co.za" + ], + "mailmunch.co": [ + "euronews.com" + ], + "mainetodaymedia.com": [ + "pressherald.com" + ], + "mantisadnetwork.com": [ + "ultimate-guitar.com", + "tvtropes.org", + "ecowatch.com" + ], + "mapixl.com": [ + "coursera.org" + ], + "mapquestapi.com": [ + "suntrust.com" + ], + "marchex.io": [ + "kia.com", + "marist.edu" + ], + "marinsm.com": [ + "lucidchart.com", + "warriorplus.com", + "vistaprint.com" + ], + "marketdatasystems.com": [ + "ig.com" + ], + "marketingautomation.services": [ + "emxdigital.com" + ], + "marketlinc.com": [ + "teamviewer.com", + "kaspersky.com", + "eset.com" + ], + "marketo.com": [ + "appsflyer.com", + "verizonmedia.com", + "yahoo.com" + ], + "marketperf.com": [ + "unblog.fr" + ], + "marktplaats.net": [ + "marktplaats.nl" + ], + "massrelevance.com": [ + "pgatour.com" + ], + "matchtv.ru": [ + "sportbox.ru" + ], + "mateti.net": [ + "tiscali.it", + "raiplay.it" + ], + "matheranalytics.com": [ + "latimes.com", + "nypost.com", + "chicagotribune.com" + ], + "mathtag.com": [ + "yahoo.com", + "msn.com", + "okezone.com" + ], + "matomo.cloud": [ + "getyourguide.com", + "crossref.org" + ], + "maven.io": [ + "hubpages.com", + "si.com", + "biography.com" + ], + "mavencoalition.io": [ + "hubpages.com", + "si.com", + "biography.com" + ], + "maxmind.com": [ + "mediafire.com" + ], + "maxymiser.net": [ + "orange.fr", + "kaspersky.com", + "logitech.com" + ], + "mcclatchy.com": [ + "sacbee.com", + "star-telegram.com", + "thestate.com" + ], + "mdgms.com": [ + "bluewin.ch" + ], + "mea.gov.in": [ + "passportindia.gov.in" + ], + "media.net": [ + "msn.com", + "forbes.com", + "reuters.com" + ], + "media6degrees.com": [ + "bloomberg.com", + "box.com", + "acs.org" + ], + "mediaad.org": [ + "tejaratnews.com", + "parsfootball.com", + "rokna.net" + ], + "mediacategory.com": [ + "joins.com", + "zum.com" + ], + "mediacdn.vn": [ + "soha.vn" + ], + "mediacorp.sg": [ + "channelnewsasia.com", + "todayonline.com" + ], + "mediaforge.com": [ + "newegg.com" + ], + "mediafuse.com": [ + "foreignaffairs.com", + "digitalcommerce360.com", + "allbusiness.com" + ], + "mediaset.net": [ + "mediaset.it" + ], + "mediav.com": [ + "so.com", + "ctrip.com", + "duba.com" + ], + "mediavine.com": [ + "cnsnews.com" + ], + "mediawallahscript.com": [ + "sourceforge.net", + "slashdot.org", + "gopro.com" + ], + "mediawayss.com": [ + "korrespondent.net" + ], + "mediaweaver.jp": [ + "toyokeizai.net", + "diamond.jp" + ], + "medium.al": [ + "panorama.com.al", + "balkanweb.com", + "syri.net" + ], + "medium.com": [ + "towardsdatascience.com" + ], + "medtargetsystem.com": [ + "wired.com", + "mayoclinic.org", + "sciencedaily.com" + ], + "meiqia.com": [ + "ywart.com", + "guifun.com", + "koolearn.com" + ], + "meizu.cn": [ + "meizu.com" + ], + "mellowads.com": [ + "moonbit.co.in", + "moonliteco.in", + "moondoge.co.in" + ], + "mercadopago.cl": [ + "mercadolibre.cl" + ], + "meredithcorp.io": [ + "people.com", + "southernliving.com" + ], + "metricool.com": [ + "ancient.eu" + ], + "metroscubicos.com": [ + "mercadolibre.com.mx" + ], + "mfadsrvr.com": [ + "msn.com", + "forbes.com", + "thehill.com" + ], + "mgid.com": [ + "uptodown.com", + "liveinternet.ru", + "memurlar.net" + ], + "mhtr.be": [ + "independent.ie" + ], + "mia-chat.com": [ + "payforessay.net", + "papernow.org" + ], + "miamiherald.com": [ + "mcclatchydc.com" + ], + "miaozhen.com": [ + "cnbeta.com", + "autohome.com.cn", + "pchouse.com.cn" + ], + "mib.gov.in": [ + "parivahan.gov.in", + "up.gov.in" + ], + "micpn.com": [ + "lenovo.com", + "barnesandnoble.com", + "nbcsports.com" + ], + "microad.jp": [ + "rakuten.co.jp", + "hatena.ne.jp", + "tenki.jp" + ], + "microadinc.com": [ + "lolipop.jp", + "syosetu.com", + "moppy.jp" + ], + "microcontenidos.com": [ + "excelsior.com.mx" + ], + "microsoft.com": [ + "quizizz.com", + "minecraft.net", + "flipgrid.com" + ], + "microsofttranslator.com": [ + "iyiou.com" + ], + "midas-network.com": [ + "b92.net" + ], + "mimilcnf.pro": [ + "hdsex.org" + ], + "mindbox.cloud": [ + "semrush.com" + ], + "mindbox.ru": [ + "citilink.ru", + "cosmo.ru", + "vseinstrumenti.ru" + ], + "minibc.com": [ + "euroluxhome.com" + ], + "miniclip.com": [ + "agar.io" + ], + "miniclippt.com": [ + "agar.io" + ], + "miniinthebox.com": [ + "informationweek.com" + ], + "mirror.co.uk": [ + "dailystar.co.uk", + "manchestereveningnews.co.uk", + "dailyrecord.co.uk" + ], + "mituo.cn": [ + "metinfo.cn" + ], + "mixcloud.com": [ + "b92.net" + ], + "mixi.media": [ + "realclearpolitics.com", + "newsmax.com", + "valuewalk.com" + ], + "mktoresp.com": [ + "taboola.com", + "mimecast.com", + "topuniversities.com" + ], + "ml314.com": [ + "cnn.com", + "forbes.com", + "sourceforge.net" + ], + "mlsys.xyz": [ + "inquisitr.com" + ], + "mmonline.io": [ + "manoramaonline.com" + ], + "mmstat.com": [ + "sohu.com", + "sina.com.cn", + "huanqiu.com" + ], + "mmtro.com": [ + "lacoste.com" + ], + "moatads.com": [ + "forbes.com", + "bloomberg.com", + "cnet.com" + ], + "mobizone.mobi": [ + "almasryalyoum.com" + ], + "mobvista.com": [ + "rayjump.com" + ], + "modlily.com": [ + "informationweek.com" + ], + "moe.video": [ + "yaplakal.com" + ], + "moevideo.biz": [ + "yaplakal.com" + ], + "monetate.net": [ + "nationalgeographic.com", + "marriott.com", + "newegg.com" + ], + "monohost.com": [ + "pdf2doc.com", + "compressjpeg.com", + "jpg2pdf.com" + ], + "monsido.com": [ + "uga.edu", + "utk.edu", + "nature.org" + ], + "mookie1.com": [ + "newsweek.com", + "howstuffworks.com", + "in.gr" + ], + "moovit.com": [ + "undip.ac.id" + ], + "mopinion.com": [ + "tomtom.com", + "sncf.com" + ], + "motorsport.com": [ + "motor1.com" + ], + "mox.tv": [ + "filgoal.com" + ], + "moxielinks.com": [ + "banggood.com" + ], + "mpeasylink.com": [ + "t-mobile.com", + "ford.com", + "cox.com" + ], + "mpianalytics.com": [ + "subito.it", + "milanuncios.com", + "willhaben.at" + ], + "mpio.io": [ + "art.com" + ], + "mpshark.com": [ + "9anime.to" + ], + "mrelko.com": [ + "rutor.info" + ], + "mrpfd.com": [ + "citrix.com" + ], + "mrtnsvr.com": [ + "thebodyshop.com" + ], + "msgapp.com": [ + "post-gazette.com" + ], + "msn.com": [ + "wsj.com", + "ninemsn.com.au" + ], + "mtgroup.kr": [ + "mt.co.kr" + ], + "mtmo.cc": [ + "flvto.biz", + "2conv.com" + ], + "mts.ru": [ + "aliexpress.ru", + "rambler.ru", + "lenta.ru" + ], + "mtvnservices.com": [ + "nick.com", + "bet.com", + "cc.com" + ], + "muji.net": [ + "muji.com" + ], + "mulesoft.com": [ + "programmableweb.com" + ], + "musthird.com": [ + "airbnb.com", + "airbnb.co.uk", + "airbnb.ca" + ], + "mxapis.com": [ + "localbitcoins.com" + ], + "mxplay.com": [ + "mxplayer.in" + ], + "myfinance.com": [ + "moneycrashers.com" + ], + "mykhel.com": [ + "oneindia.com" + ], + "myopenads.com": [ + "channelmyanmar.org" + ], + "myshopify.com": [ + "eero.com", + "iqair.com" + ], + "myvisualiq.net": [ + "amazon.com", + "samsung.com", + "walmart.com" + ], + "myvoicenation.com": [ + "miaminewtimes.com", + "westword.com" + ], + "n1272serv.xyz": [ + "youporn.com" + ], + "n2.hk": [ + "discuss.com.hk" + ], + "nakamasweb.com": [ + "lectortmo.com" + ], + "nakanohito.jp": [ + "backlog.com", + "freee.co.jp", + "diamond.jp" + ], + "namebrightstatic.com": [ + "namebright.com" + ], + "nanda.vn": [ + "zingnews.vn", + "laodong.vn", + "vtv.vn" + ], + "nanigans.com": [ + "llbean.com", + "snhu.edu" + ], + "nanorep.co": [ + "icicibank.com", + "lastpass.com", + "nordvpn.com" + ], + "nanosemantics.ru": [ + "hh.ru" + ], + "narrative.io": [ + "bigthink.com", + "iflscience.com", + "247wallst.com" + ], + "nativendo.de": [ + "freenet.de", + "giga.de", + "morgenpost.de" + ], + "nativeroll.tv": [ + "yaplakal.com", + "adme.ru", + "brightside.me" + ], + "navdmp.com": [ + "magazineluiza.com.br", + "techtudo.com.br", + "thenewslens.com" + ], + "naver.com": [ + "op.gg", + "unity.com", + "flaticon.com" + ], + "nbc.com": [ + "bravotv.com" + ], + "nbcuni.com": [ + "cnbc.com", + "nbcnews.com", + "today.com" + ], + "nc0.co": [ + "ensighten.com", + "williamhill.com" + ], + "nch.com.au": [ + "nchsoftware.com" + ], + "neodatagroup.com": [ + "ilfattoquotidiano.it" + ], + "neppa-dsp-ad.com": [ + "cityheaven.net" + ], + "netdna-ssl.com": [ + "dazeddigital.com" + ], + "netmng.com": [ + "lowes.com", + "mimecast.com", + "geotrust.com" + ], + "netrk.net": [ + "dkb.de" + ], + "networkad.net": [ + "eksisozluk.com" + ], + "newaircloud.com": [ + "workercn.cn" + ], + "newmedia.az": [ + "oxu.az", + "qafqazinfo.az", + "report.az" + ], + "newrelic.com": [ + "afternic.com" + ], + "news-network.ru": [ + "vazhno.ru" + ], + "news.cn": [ + "xinhuanet.com" + ], + "newscgp.com": [ + "marketwatch.com", + "nypost.com", + "thesun.co.uk" + ], + "newshub.id": [ + "liputan6.com" + ], + "newsmaxwidget.com": [ + "thehill.com", + "newsmax.com" + ], + "newsmemory.com": [ + "abqjournal.com" + ], + "newsobserver.com": [ + "mcclatchydc.com" + ], + "newyorker.com": [ + "wired.com", + "vanityfair.com", + "vogue.com" + ], + "newzit.com": [ + "dailymail.co.uk", + "metro.co.uk" + ], + "nextclick.pl": [ + "joemonster.org" + ], + "nextelection.app": [ + "scoop.co.nz" + ], + "ngpvan.com": [ + "ewg.org", + "ucsusa.org", + "audubon.org" + ], + "ngs.ru": [ + "fontanka.ru" + ], + "nicequest.com": [ + "cadenaser.com" + ], + "nikon-cdn.com": [ + "nikonusa.com" + ], + "nikonsso.com": [ + "nikonusa.com" + ], + "nimbleswan.io": [ + "sharethis.com", + "skimlinks.com" + ], + "ninahale.net": [ + "uhc.com" + ], + "nine.com.au": [ + "smh.com.au", + "theage.com.au", + "businessinsider.com.au" + ], + "njih.net": [ + "adidas.com" + ], + "norstatsurveys.com": [ + "vg.no" + ], + "norton.com": [ + "informationweek.com" + ], + "nosto.com": [ + "gymshark.com", + "fashionnova.com", + "jomashop.com" + ], + "notifyvisitors.com": [ + "axisbank.com", + "1mg.com" + ], + "noxgroup.com": [ + "bignox.com" + ], + "nperf.com": [ + "ovh.net" + ], + "npo.nl": [ + "nos.nl" + ], + "npohosting.nl": [ + "nos.nl" + ], + "nr-data.net": [ + "chaturbate.com", + "instructure.com", + "sciencedirect.com" + ], + "nsaudience.pl": [ + "interia.pl" + ], + "ntnu.edu": [ + "ntnu.no" + ], + "ntvk1.ru": [ + "aif.ru" + ], + "nuggad.net": [ + "iefimerida.gr" + ], + "nxtck.com": [ + "newegg.com" + ], + "o-s.io": [ + "souq.com", + "daraz.pk" + ], + "o333o.com": [ + "hdsex.org" + ], + "oadz.com": [ + "qiku.com" + ], + "ocdn.eu": [ + "onet.pl", + "blic.rs" + ], + "octclck.xyz": [ + "radikal.ru" + ], + "octivid.com": [ + "alaraby.co.uk" + ], + "oddcast.com": [ + "washingtonsharedparenting.com" + ], + "odoocdn.com": [ + "odoo.com" + ], + "offlinx.com": [ + "indigo.ca" + ], + "ojrq.net": [ + "shutterstock.com", + "lenovo.com", + "hostgator.com" + ], + "ok.ru": [ + "narod.ru", + "iz.ru", + "labirint.ru" + ], + "okccdn.com": [ + "okcupid.com" + ], + "okezone.com": [ + "sindonews.com" + ], + "okt.to": [ + "globalsign.com", + "cvent.com", + "anu.edu.au" + ], + "okta.com": [ + "servicenow.com", + "bcg.com", + "mgmresorts.com" + ], + "olark.com": [ + "matterport.com", + "microsoft.com", + "cloudinary.com" + ], + "olnl.net": [ + "kino-teatr.ru" + ], + "olx-st.com": [ + "olx.pl", + "olx.ua", + "olx.in" + ], + "omchanseyr.com": [ + "4anime.to" + ], + "omgpm.com": [ + "gradeup.co" + ], + "omguk.com": [ + "banggood.com", + "newchic.com" + ], + "omniscientai.com": [ + "edh.tw" + ], + "omnitagjs.com": [ + "imgur.com", + "dailymail.co.uk", + "salon.com" + ], + "omny.fm": [ + "foxnews.com", + "haaretz.com", + "geekwire.com" + ], + "omtrdc.net": [ + "amazon.com", + "virginmedia.com", + "digicert.com" + ], + "onaudience.com": [ + "khaberni.com", + "alwakeelnews.com" + ], + "oncueapp.appspot.com": [ + "pewtrusts.org" + ], + "one.gov.hk": [ + "www.gov.hk" + ], + "onecms.io": [ + "eatingwell.com" + ], + "onecount.net": [ + "newrepublic.com", + "triblive.com" + ], + "oneindia.com": [ + "filmibeat.com", + "goodreturns.in" + ], + "onelink.me": [ + "appsflyer.com", + "farfetch.com" + ], + "onesignal.com": [ + "elconfidencial.com" + ], + "onet.pl": [ + "blic.rs" + ], + "onevision.com.tw": [ + "ltn.com.tw", + "chinatimes.com", + "hinet.net" + ], + "online-metrix.net": [ + "fidelity.com", + "citi.com", + "discover.com" + ], + "onlyred.net": [ + "rednet.cn" + ], + "onrcx.com": [ + "intel.com" + ], + "onsugar.com": [ + "popsugar.com" + ], + "onthe.io": [ + "inquirer.net", + "express.co.uk", + "rbc.ru" + ], + "ooyala.com": [ + "dalet.com" + ], + "opecloud.com": [ + "businessinsider.de", + "sabq.org", + "kooora.com" + ], + "open.com.cn": [ + "imooc.com" + ], + "openstat.net": [ + "aif.ru" + ], + "openx.net": [ + "yahoo.com", + "amazon.com", + "msn.com" + ], + "opinionstage.com": [ + "nobelprize.org" + ], + "optaim.com": [ + "sohu.com" + ], + "optimahub.com": [ + "aaa.com" + ], + "optimix.cn": [ + "bshare.cn", + "foodmate.net", + "xhby.net" + ], + "optimizely.com": [ + "bbc.com", + "bitly.com", + "xbox.com" + ], + "optimove.events": [ + "jdsports.com" + ], + "oracle.com": [ + "addthis.com", + "moat.com", + "dyn.com" + ], + "oraclecloud.com": [ + "nationalacademies.org" + ], + "oracleimg.com": [ + "oracle.com", + "moat.com", + "dyn.com" + ], + "orange-business.com": [ + "orange.com" + ], + "orangeads.fr": [ + "orange.fr" + ], + "orbita.cloud": [ + "redcrossblood.org" + ], + "oreillystatic.com": [ + "oreilly.com" + ], + "osano.com": [ + "ocregister.com", + "figma.com", + "dailynews.com" + ], + "otaserve.net": [ + "sankakucomplex.com" + ], + "otm-r.com": [ + "liveinternet.ru", + "kp.ru", + "rg.ru" + ], + "outbrain.com": [ + "msn.com", + "cnn.com", + "sourceforge.net" + ], + "outlookhindi.com": [ + "outlookindia.com" + ], + "outstream.today": [ + "academic.ru" + ], + "ow5a.net": [ + "norton.com" + ], + "owneriq.net": [ + "lycos.com", + "msi.com", + "scholastic.com" + ], + "ownpage.fr": [ + "20minutes.fr" + ], + "paddle.com": [ + "snapwidget.com" + ], + "padletcdn.com": [ + "padlet.com" + ], + "pages02.net": [ + "prestashop.com", + "bbt.com" + ], + "pages03.net": [ + "smithsonianmag.com", + "turkishairlines.com", + "marketingprofs.com" + ], + "pages04.net": [ + "scientificamerican.com", + "techsmith.com" + ], + "pages06.net": [ + "ibtimes.co.uk" + ], + "pages07.net": [ + "asahi.com" + ], + "pages08.net": [ + "military.com" + ], + "panet.eu": [ + "panet.co.il" + ], + "pardot.com": [ + "cpanel.net", + "slack.com", + "tandfonline.com" + ], + "parsely.com": [ + "bloomberg.com", + "usatoday.com", + "cnbc.com" + ], + "parsons.edu": [ + "newschool.edu" + ], + "particularaudience.com": [ + "jbhifi.com.au" + ], + "patreon.com": [ + "warcraftlogs.com" + ], + "paxful.com": [ + "informationweek.com" + ], + "paycom.com": [ + "paycomonline.com" + ], + "paypal.com": [ + "mercari.com", + "smashballoon.com", + "doxygen.nl" + ], + "pb.ua": [ + "privat24.ua" + ], + "pbbl.co": [ + "hilton.com", + "chron.com", + "fool.com" + ], + "pbstck.com": [ + "ldoceonline.com" + ], + "pc.com.cn": [ + "pcauto.com.cn" + ], + "pcmag.com": [ + "techspot.com", + "slashgear.com", + "betanews.com" + ], + "pconline.com.cn": [ + "pcbaby.com.cn", + "pchouse.com.cn", + "pcauto.com.cn" + ], + "pdvacde.com": [ + "rezka.ag", + "baskino.me" + ], + "pelcro.com": [ + "insidehighered.com", + "miaminewtimes.com" + ], + "pelmorex.com": [ + "theweathernetwork.com" + ], + "pendo.io": [ + "sciencedirect.com", + "thelancet.com", + "cell.com" + ], + "people.com.cn": [ + "people.cn", + "peopledaily.com.cn" + ], + "percycle.com": [ + "magazineluiza.com.br" + ], + "performancefirst.jp": [ + "moppy.jp" + ], + "performi.com": [ + "fitsmallbusiness.com" + ], + "permutive.app": [ + "theverge.com", + "vox.com", + "nymag.com" + ], + "petametrics.com": [ + "telegraph.co.uk", + "scmp.com", + "thestar.com" + ], + "pgtb.me": [ + "hawaiinewsnow.com" + ], + "philips.co.uk": [ + "philips.com" + ], + "philips.com": [ + "philips-hue.com" + ], + "photorank.me": [ + "vistaprint.com", + "jdsports.com", + "coach.com" + ], + "piano.io": [ + "japantimes.co.jp", + "canberratimes.com.au" + ], + "pinduoduo.com": [ + "yangkeduo.com" + ], + "pingan.com": [ + "autohome.com.cn" + ], + "pinterest.com": [ + "godaddy.com", + "spotify.com", + "etsy.com" + ], + "piri.net": [ + "yenisafak.com" + ], + "pitchfork.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "piwik.pro": [ + "aarp.org", + "xs4all.nl", + "simplesite.com" + ], + "pixlee.co": [ + "puma.com", + "michaels.com" + ], + "pixlee.com": [ + "puma.com", + "michaels.com", + "forever21.com" + ], + "pixnet.cc": [ + "pixnet.net" + ], + "placed.com": [ + "simon.com" + ], + "planalto.gov.br": [ + "www.gov.br" + ], + "playbuzz.com": [ + "perezhilton.com" + ], + "playreplay.me": [ + "yaplakal.com" + ], + "playreplay.net": [ + "yaplakal.com" + ], + "plezi.co": [ + "we-are-adot.com" + ], + "plista.com": [ + "freenet.de", + "9news.com.au", + "nine.com.au" + ], + "poemsdeucewee.com": [ + "kickasstorrents.to" + ], + "pointmediatracker.com": [ + "udemy.com", + "nerdwallet.com", + "squareup.com" + ], + "polarbyte.com": [ + "collinsdictionary.com" + ], + "poll-maker.com": [ + "eztv.io" + ], + "poll.fm": [ + "crowdsignal.com" + ], + "poool.fr": [ + "ladepeche.fr", + "sudouest.fr" + ], + "popin.cc": [ + "idntimes.com", + "itmedia.co.jp", + "edh.tw" + ], + "popt.in": [ + "poynter.org", + "alphonso.tv" + ], + "port.hu": [ + "index.hu" + ], + "portalinmobiliario.com": [ + "mercadolibre.cl" + ], + "postaffiliatepro.com": [ + "pandasecurity.com", + "solarwinds.com" + ], + "postrelease.com": [ + "reuters.com", + "usnews.com", + "sfgate.com" + ], + "powerlinks.com": [ + "msn.com", + "digicert.com", + "imgur.com" + ], + "powerreviews.com": [ + "citi.com" + ], + "pplive.com": [ + "pptv.com" + ], + "prcdn.co": [ + "nationalpost.com", + "pressreader.com", + "vancouversun.com" + ], + "prensaiberica.es": [ + "sport.es", + "elperiodico.com" + ], + "prfct.co": [ + "theglobeandmail.com", + "lifehack.org", + "artnet.com" + ], + "priceline.com": [ + "informationweek.com" + ], + "primead.jp": [ + "allabout.co.jp" + ], + "primecaster.net": [ + "tenki.jp", + "infoseek.co.jp" + ], + "printful.com": [ + "informationweek.com" + ], + "prisasd.com": [ + "elpais.com" + ], + "prismamedia.com": [ + "programme-tv.net" + ], + "privacymanager.io": [ + "theodysseyonline.com", + "diepresse.com" + ], + "privally.io": [ + "colaboraread.com.br" + ], + "privymktg.com": [ + "myfonts.com", + "arabnews.com", + "macleans.ca" + ], + "prixa.net": [ + "ratopati.com" + ], + "prixacdn.net": [ + "ratopati.com" + ], + "prlog.org": [ + "markethive.com" + ], + "pro-market.net": [ + "sourceforge.net", + "time.com", + "slashdot.org" + ], + "prod-ajc-proxy-connext.azurewebsites.net": [ + "ajc.com", + "daytondailynews.com" + ], + "prod-anchorage-proxy-connext.azurewebsites.net": [ + "adn.com" + ], + "prod-cosprings-proxy-connext.azurewebsites.net": [ + "gazette.com" + ], + "prod-dfm-proxy-connext.azurewebsites.net": [ + "mercurynews.com", + "denverpost.com" + ], + "prod-mng-proxy-connext.azurewebsites.net": [ + "ocregister.com", + "bostonherald.com", + "twincities.com" + ], + "prod-newsday-proxy-connext.azurewebsites.net": [ + "newsday.com" + ], + "prod-review-journal-proxy-connext.azurewebsites.net": [ + "reviewjournal.com" + ], + "prod-smi-proxy-connext.azurewebsites.net": [ + "pressdemocrat.com" + ], + "prod-spokesman-proxy-connext.azurewebsites.net": [ + "spokesman.com" + ], + "prod-tampabay-proxy-connext.azurewebsites.net": [ + "tampabay.com" + ], + "producebreed.com": [ + "1377x.to" + ], + "programattik.com": [ + "hurriyet.com.tr", + "milliyet.com.tr", + "memurlar.net" + ], + "project1service.com": [ + "brazzers.com" + ], + "prometeo-media-service.com": [ + "20minutos.es" + ], + "proofpoint.com": [ + "gulfnews.com", + "unh.edu", + "weightwatchers.com" + ], + "prosumsit.com": [ + "songatak.com" + ], + "provenexpert.com": [ + "wbs-law.de" + ], + "provenpixel.com": [ + "shopify.com" + ], + "proxad.net": [ + "free.fr" + ], + "psakdin.co.il": [ + "mako.co.il" + ], + "pswec.com": [ + "medscape.com" + ], + "ptgncdn.com": [ + "spankbang.com" + ], + "pub.network": [ + "aljazeera.com", + "boingboing.net", + "realclearpolitics.com" + ], + "pubble.io": [ + "teamwork.com" + ], + "publicradio.org": [ + "marketplace.org" + ], + "publir.com": [ + "bizpacreview.com" + ], + "publishme.se": [ + "blogg.se" + ], + "pubmatic.com": [ + "amazon.com", + "okezone.com", + "forbes.com" + ], + "pubstack.io": [ + "laposte.fr", + "ccm.net", + "ldoceonline.com" + ], + "pulsembed.eu": [ + "blic.rs" + ], + "purechat.com": [ + "wwd.com" + ], + "push.world": [ + "banggood.com" + ], + "pushbird.com": [ + "sammobile.com" + ], + "pushe.co": [ + "digiato.com", + "mediaad.org" + ], + "pushnami.com": [ + "ibtimes.com", + "metacafe.com", + "alternet.org" + ], + "pvxt.net": [ + "stockx.com" + ], + "px-cloud.net": [ + "homedepot.com" + ], + "pxf.io": [ + "fanduel.com" + ], + "pymx5.com": [ + "thedenverchannel.com", + "spokesman.com", + "abc15.com" + ], + "qchannel03.cn": [ + "ximalaya.com" + ], + "qhupdate.com": [ + "so.com", + "360kuai.com" + ], + "qiyukf.com": [ + "to8to.com", + "smzdm.com" + ], + "qlitics.com": [ + "prothomalo.com", + "bloombergquint.com" + ], + "qoo10.in": [ + "shopclues.com" + ], + "qq.com": [ + "heytapmobi.com", + "douyu.com", + "heytapdownload.com" + ], + "qqjar.ru": [ + "manganelo.com", + "gogoanime.so" + ], + "qs.com": [ + "topuniversities.com" + ], + "qsstats.com": [ + "webopedia.com", + "eweek.com" + ], + "qualtrics.com": [ + "realtor.com", + "autodesk.com", + "unity.com" + ], + "quantad.io": [ + "gmarket.co.kr", + "auction.co.kr" + ], + "quantserve.com": [ + "reddit.com", + "msn.com", + "okezone.com" + ], + "quantumdex.io": [ + "legit.ng", + "tuko.co.ke", + "briefly.co.za" + ], + "quantummetric.com": [ + "homedepot.com", + "att.com", + "xfinity.com" + ], + "queryly.com": [ + "postandcourier.com" + ], + "questionpro.com": [ + "mta.info" + ], + "queue-it.net": [ + "bestbuy.ca", + "swarovski.com", + "next.co.uk", + "kmart.com.au", + "doterra.com" + ], + "quickkoala.io": [ + "viglink.com", + "1stdibs.com" + ], + "quiq-api.com": [ + "westelm.com" + ], + "quitzon.net": [ + "filmix.co" + ], + "quora.com": [ + "bloomberg.com", + "latimes.com", + "shopify.com" + ], + "qy.net": [ + "iqiyi.com" + ], + "r-ad.ne.jp": [ + "hotpepper.jp", + "jalan.net", + "suumo.jp" + ], + "radissonhotels.com": [ + "radissonblu.com" + ], + "rainbowred.com": [ + "realme.com" + ], + "rakuten.co.jp": [ + "rakuten.com", + "rakuten-sec.co.jp", + "rakuten-card.co.jp" + ], + "rakuten.com": [ + "hilton.com", + "newegg.com", + "teespring.com" + ], + "rambler.ru": [ + "livejournal.com", + "lenta.ru", + "gazeta.ru" + ], + "randomhouse.com": [ + "penguinrandomhouse.com" + ], + "rating-widget.com": [ + "bilasport.net" + ], + "raxcdn.com": [ + "japantoday.com" + ], + "raycommedia.com": [ + "hawaiinewsnow.com" + ], + "razorpay.com": [ + "bloombergquint.com" + ], + "rcapiuseridexchange.azurewebsites.net": [ + "radio-canada.ca" + ], + "rcrsv.io": [ + "tdameritrade.com" + ], + "rcs.it": [ + "corriere.it" + ], + "rcsmetrics.it": [ + "corriere.it", + "gazzetta.it" + ], + "rctiplus.com": [ + "okezone.com", + "inews.id" + ], + "rdcdn.com": [ + "weightwatchers.com" + ], + "reachmax.cn": [ + "bshare.cn", + "foodmate.net", + "xhby.net" + ], + "reactful.com": [ + "brightcove.com", + "zscaler.com" + ], + "realclick.co.kr": [ + "hani.co.kr" + ], + "realite.id": [ + "brilio.net", + "bola.net", + "dream.co.id" + ], + "realsrv.com": [ + "spankbang.com", + "manganelo.com", + "eporner.com" + ], + "realtime.email": [ + "autismspeaks.org" + ], + "rec-engine.com": [ + "paychex.com" + ], + "recobell.io": [ + "hani.co.kr" + ], + "recommendationengine.googleapis.com": [ + "newsweek.com", + "g2a.com", + "saatchiart.com" + ], + "recreativ.ru": [ + "ukr.net", + "meta.ua" + ], + "recruitics.com": [ + "governmentjobs.com" + ], + "redbubble.com": [ + "informationweek.com" + ], + "redcross.org": [ + "redcrossblood.org" + ], + "reddit.com": [ + "godaddy.com", + "spotify.com", + "bloomberg.com", + "hudl.com" + ], + "redhat.com": [ + "opensource.com" + ], + "redintelligence.net": [ + "swarovski.com" + ], + "redlink.com": [ + "ahajournals.org", + "annualreviews.org" + ], + "refocus.ru": [ + "eldorado.ru" + ], + "regroup.com": [ + "csus.edu" + ], + "reichelcormier.bid": [ + "filmix.co", + "rezka.ag", + "baskino.me" + ], + "relap.io": [ + "mail.ru", + "ria.ru", + "tass.ru" + ], + "relateddigital.com": [ + "ntv.com.tr", + "kariyer.net" + ], + "remarqable.com": [ + "ahajournals.org" + ], + "rentracks.jp": [ + "techacademy.jp", + "lolipop.jp", + "ocnk.net" + ], + "republer.com": [ + "khaberni.com", + "alwakeelnews.com", + "aif.ru" + ], + "research-int.se": [ + "aftonbladet.se", + "svt.se", + "expressen.se" + ], + "researchintel.com": [ + "intel.com" + ], + "researchnow.com": [ + "go.com", + "disney.com", + "starwars.com" + ], + "resniks.pro": [ + "sexu.com" + ], + "reson8.com": [ + "nydailynews.com", + "startribune.com", + "baltimoresun.com" + ], + "retailrocket.net": [ + "eldorado.ru", + "dns-shop.ru", + "vseinstrumenti.ru" + ], + "retargetly.com": [ + "perfil.com", + "excelsior.com.mx", + "ambito.com" + ], + "retentioneering.com": [ + "eldorado.ru" + ], + "revcontent.com": [ + "thegatewaypundit.com", + "tampabay.com", + "nationalreview.com" + ], + "reverb-assets.com": [ + "reverb.com" + ], + "revive-adserver.net": [ + "indiebound.org", + "defimedia.info" + ], + "revjet.com": [ + "businessinsider.com", + "homedepot.com", + "yahoo.com" + ], + "rezync.com": [ + "williams-sonoma.com", + "spectrum.com", + "potterybarn.com" + ], + "rferl.org": [ + "svoboda.org" + ], + "rfihub.com": [ + "usatoday.com", + "dailymotion.com", + "youm7.com" + ], + "rfksrv.com": [ + "ulta.com", + "bloomingdales.com", + "tommy.com" + ], + "rfvk.net": [ + "adorama.com" + ], + "ria.ru": [ + "sputniknews.com", + "rian.ru", + "inosmi.ru" + ], + "richaudience.com": [ + "softonic.com", + "marca.com", + "las2orillas.co" + ], + "richrelevance.com": [ + "rei.com", + "saksfifthavenue.com", + "williams-sonoma.com" + ], + "rightinthebox.com": [ + "lightinthebox.com" + ], + "rightmessage.com": [ + "problogger.com" + ], + "rightnowtech.com": [ + "lenovo.com" + ], + "rijksoverheid.nl": [ + "rivm.nl" + ], + "riotgames.com": [ + "op.gg", + "u.gg", + "mobalytics.gg" + ], + "riskified.com": [ + "wayfair.com", + "zara.com", + "farfetch.com" + ], + "riverhit.com": [ + "xozilla.com", + "sexu.com", + "hdsex.org" + ], + "rkdms.com": [ + "cnn.com", + "washingtonpost.com", + "wsj.com" + ], + "rktch.com": [ + "aif.ru", + "vfsglobal.com" + ], + "rlcdn.com": [ + "godaddy.com", + "digicert.com", + "tandfonline.com" + ], + "rmtag.com": [ + "udemy.com", + "coursera.org", + "hulu.com" + ], + "rmulus.com": [ + "juniper.net" + ], + "rnengage.com": [ + "mysql.com", + "rightnow.com", + "chewy.com" + ], + "rockcontent.com": [ + "comcasttechnologysolutions.com" + ], + "roku.com": [ + "experian.com" + ], + "rollingstone.com": [ + "indiewire.com" + ], + "rosewe.com": [ + "informationweek.com" + ], + "rotita.com": [ + "informationweek.com" + ], + "rstbtmd.com": [ + "rezka.ag", + "hdrezka-ag.com" + ], + "rsz.sk": [ + "aktuality.sk" + ], + "rt.ru": [ + "aif.ru" + ], + "rtbsuperhub.com": [ + "cam4.com" + ], + "rtk.io": [ + "post-gazette.com", + "elwatannews.com", + "dostor.org" + ], + "rtm.com": [ + "landsend.com" + ], + "rtmark.net": [ + "4shared.com", + "wplay.co", + "manganelo.com" + ], + "rtr-vesti.ru": [ + "vesti.ru", + "russia.tv" + ], + "rubiconproject.com": [ + "yahoo.com", + "amazon.com", + "msn.com" + ], + "rumble.com": [ + "makeleio.gr" + ], + "rumiview.com": [ + "asm.org", + "greenhouse.io", + "comptia.org" + ], + "run-syndicate.com": [ + "manganelo.com" + ], + "russia.tv": [ + "vesti.ru" + ], + "rutarget.ru": [ + "aliexpress.ru", + "rambler.ru", + "sberbank.ru" + ], + "ryvx.net": [ + "dickssportinggoods.com" + ], + "rzk-m.com": [ + "rozetka.com.ua" + ], + "s5o.ru": [ + "sports.ru" + ], + "sabavision.com": [ + "aparat.com", + "asriran.com", + "parsfootball.com" + ], + "sabay.com": [ + "sabay.com.kh" + ], + "sacbee.com": [ + "kansascity.com", + "charlotteobserver.com", + "newsobserver.com" + ], + "sagetalk.io": [ + "rosettastone.com" + ], + "sajari.com": [ + "lockheedmartin.com", + "activecampaign.com" + ], + "salecycle.com": [ + "qatarairways.com", + "bestwestern.com", + "valentino.com" + ], + "salemwebnetwork.com": [ + "biblestudytools.com" + ], + "salesforce.com": [ + "bestbuy.ca", + "anthropologie.com", + "michaels.com" + ], + "salesforceliveagent.com": [ + "digicert.com", + "prnewswire.com", + "constantcontact.com" + ], + "salesloft.com": [ + "wpengine.com", + "newrelic.com", + "upwork.com" + ], + "samandehi.ir": [ + "digikala.com", + "divar.ir", + "beytoote.com" + ], + "samba.tv": [ + "theverge.com", + "vox.com", + "xfinity.com" + ], + "sanjagh.com": [ + "rokna.net", + "tarafdari.com", + "khabaronline.ir" + ], + "sanoma.fi": [ + "nu.nl" + ], + "sape.ru": [ + "aif.ru" + ], + "sas.com": [ + "next.co.uk" + ], + "sc-static.net": [ + "spotify.com", + "bloomberg.com", + "booking.com" + ], + "scarabresearch.com": [ + "bitdefender.com", + "tate.org.uk", + "puma.com" + ], + "scatec.io": [ + "pitchbook.com" + ], + "scene7.com": [ + "pnc.com", + "poly.com" + ], + "scenepass.com": [ + "gayboystube.com" + ], + "schibsted.com": [ + "vg.no", + "aftonbladet.se", + "finn.no" + ], + "scholarlyiq.com": [ + "oup.com" + ], + "sciencedirect.com": [ + "thelancet.com", + "cell.com" + ], + "sciencemag.org": [ + "aaas.org" + ], + "sciencex.com": [ + "phys.org", + "medicalxpress.com" + ], + "scmp.com": [ + "alanba.com.kw" + ], + "scoop.it": [ + "psl.eu" + ], + "scorecardresearch.com": [ + "linkedin.com", + "yahoo.com", + "reddit.com" + ], + "scribblelive.com": [ + "ctvnews.ca", + "startribune.com" + ], + "scupio.com": [ + "shopee.tw", + "udn.com", + "shopee.com" + ], + "sddan.com": [ + "europe1.fr" + ], + "sdlcdn.com": [ + "snapdeal.com" + ], + "searchforce.net": [ + "ecwid.com" + ], + "searchiq.co": [ + "comingsoon.net" + ], + "secrank.cn": [ + "www.edu.cn" + ], + "section.io": [ + "yourtango.com" + ], + "secureaddisplay.com": [ + "newadvent.org" + ], + "securedtouch.com": [ + "asos.com", + "wish.com", + "agoda.com" + ], + "securedvisit.com": [ + "homedepot.com", + "cafepress.com", + "peta.org" + ], + "secureserver.net": [ + "afternic.com", + "gamessu.com", + "sucuri.net" + ], + "securetve.com": [ + "tsn.ca", + "bnnbloomberg.ca" + ], + "seedr.com": [ + "gazeta.ru", + "championat.com", + "yaplakal.com" + ], + "seedtag.com": [ + "ccm.net", + "milenio.com", + "elperiodico.com" + ], + "segment.com": [ + "travelandleisure.com", + "angel.co", + "marthastewart.com" + ], + "segs.jp": [ + "cybozu.com", + "valuecommerce.ne.jp" + ], + "sekindo.com": [ + "mako.co.il", + "ynetnews.com", + "primis.tech" + ], + "selectmedia.asia": [ + "onegreenplanet.org" + ], + "self.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "sellpoints.com": [ + "costco.com", + "costco.ca" + ], + "semasio.net": [ + "yahoo.com", + "lifo.gr", + "eksisozluk.com" + ], + "sembox.it": [ + "italist.com" + ], + "semrush.com": [ + "informationweek.com" + ], + "senseforth.com": [ + "hdfcbank.com" + ], + "sensic.net": [ + "krone.at" + ], + "sensorsdata.cn": [ + "36kr.com", + "iliangcang.com", + "zhaoshang.net" + ], + "sensorsdatavip.com": [ + "canva.cn" + ], + "sep.gob.mx": [ + "www.gob.mx" + ], + "servebom.com": [ + "techradar.com", + "livescience.com", + "howtogeek.com" + ], + "servedbyadbutler.com": [ + "vanguardngr.com" + ], + "servenobid.com": [ + "geeksforgeeks.org", + "mathrubhumi.com", + "sakshi.com" + ], + "serverbid.com": [ + "usatoday.com", + "vox.com", + "ask.com" + ], + "serving-sys.com": [ + "dropbox.com", + "news.com.au", + "asu.edu" + ], + "sessioncam.com": [ + "hootsuite.com", + "braze.com", + "ama-assn.org" + ], + "seznam.cz": [ + "idnes.cz" + ], + "sf14g.com": [ + "panasonic.com", + "cornerstoneondemand.com", + "freshbooks.com" + ], + "sfegypt.com": [ + "elfagr.com" + ], + "sfn.org": [ + "jneurosci.org" + ], + "sgkrehberi.com": [ + "memurlar.net" + ], + "sgsme.sg": [ + "businesstimes.com.sg" + ], + "shanghai.gov.cn": [ + "sh.gov.cn" + ], + "shaqm.com": [ + "mop.com" + ], + "shareaholic.com": [ + "worldstarhiphop.com", + "earthsky.org" + ], + "sharecare.com": [ + "dailystrength.org" + ], + "sharethis.com": [ + "unicef.org", + "businessnewsdaily.com", + "freeimages.com" + ], + "sharethrough.com": [ + "msn.com", + "forbes.com", + "webmd.com" + ], + "shbdn.com": [ + "sahibinden.com" + ], + "shinobi.jp": [ + "ninja.co.jp", + "cityheaven.net" + ], + "shinystat.com": [ + "dezeen.com", + "sworld.co.uk" + ], + "shld.net": [ + "kmart.com" + ], + "shoagnie.com": [ + "clipconverter.cc" + ], + "shop.app": [ + "fashionnova.com" + ], + "shop.pe": [ + "casetify.com", + "digitalcommerce360.com", + "jabra.com" + ], + "shopbop.com": [ + "informationweek.com" + ], + "shopnetic.com": [ + "rambler.ru", + "lenta.ru", + "ozon.ru" + ], + "shoprunner.com": [ + "saksfifthavenue.com" + ], + "shopsocially.com": [ + "score.org" + ], + "shuidi.cn": [ + "xuexila.com" + ], + "sibautomation.com": [ + "yektanet.com", + "dndbeyond.com", + "simplecast.com" + ], + "sift.com": [ + "udemy.com", + "meetup.com", + "wish.com" + ], + "siftscience.com": [ + "flickr.com", + "scribd.com", + "shutterstock.com" + ], + "signify.com": [ + "philips-hue.com" + ], + "signifyd.com": [ + "ssense.com", + "colourpop.com", + "fashionnova.com" + ], + "simility.com": [ + "offerup.com" + ], + "simpli.fi": [ + "okezone.com", + "matterport.com", + "rakuten.com" + ], + "sina.com.cn": [ + "cnad.com", + "ccidnet.com" + ], + "sindonews.com": [ + "okezone.com", + "inews.id" + ], + "sinoptik.ua": [ + "ukr.net" + ], + "site24x7rum.com": [ + "myfonts.com", + "cambridgeenglish.org", + "celine.com" + ], + "sitecore-prod-cd-westus2.azurewebsites.net": [ + "alaskaair.com" + ], + "sitedataprocessing.com": [ + "clickagy.com" + ], + "siteimproveanalytics.io": [ + "mailchimp.com", + "opendns.com", + "berkeley.edu" + ], + "sitelock.com": [ + "rapidgator.net", + "centos-webpanel.com" + ], + "sitescout.com": [ + "okezone.com", + "imgur.com", + "aol.com" + ], + "skimresources.com": [ + "businessinsider.com", + "dailymail.co.uk", + "nbcnews.com" + ], + "skplanet.com": [ + "11st.co.kr", + "dothome.co.kr" + ], + "sky.com": [ + "skysports.com" + ], + "sky.it": [ + "tiscali.it" + ], + "slashdotmedia.com": [ + "sourceforge.net", + "slashdot.org" + ], + "smaato.net": [ + "imgur.com" + ], + "smadex.com": [ + "realtor.com", + "taringa.net", + "rpp.pe" + ], + "smartadserver.com": [ + "okezone.com", + "imgur.com", + "dailymotion.com" + ], + "smartclick.net": [ + "bravotube.net" + ], + "smartnews-ads.com": [ + "rakuten.co.jp", + "moneyforward.com", + "freee.co.jp" + ], + "smartocto.com": [ + "tweakers.net", + "volkskrant.nl" + ], + "smartsurvey.co.uk": [ + "fifa.com" + ], + "smct.co": [ + "rhs.org.uk" + ], + "smi2.net": [ + "rbc.ru", + "kp.ru", + "vz.ru" + ], + "smi2.ru": [ + "kp.ru", + "kommersant.ru", + "iz.ru" + ], + "smilewanted.com": [ + "caradisiac.com" + ], + "smithsonian.museum": [ + "si.edu", + "smithsonianmag.com" + ], + "snapchat.com": [ + "spotify.com", + "bloomberg.com", + "booking.com" + ], + "snapdeal.biz": [ + "snapdeal.com" + ], + "snapwidget.com": [ + "unh.edu", + "tulane.edu", + "theoatmeal.com" + ], + "snplow.net": [ + "lapresse.ca" + ], + "snrbox.com": [ + "onaudience.com" + ], + "snssdk.com": [ + "toutiao.com", + "ixigua.com", + "bytedance.com" + ], + "so.com": [ + "360kuai.com" + ], + "sobot.com": [ + "shimo.im", + "51cto.com", + "jinshuju.net" + ], + "socdm.com": [ + "au.com" + ], + "socialintents.com": [ + "alphonso.tv" + ], + "soflopxl.com": [ + "webcrawler.com", + "dogpile.com", + "info.com" + ], + "softspace.mobi": [ + "analdin.com", + "xozilla.com" + ], + "sogei.it": [ + "agenziaentrate.gov.it" + ], + "sogou.com": [ + "soso.com", + "ifeng.com" + ], + "sohu.com": [ + "56.com", + "yicai.com" + ], + "sojern.com": [ + "marriott.com", + "metmuseum.org", + "wyndhamhotels.com" + ], + "sol-data.com": [ + "seek.com.au" + ], + "solarwinds.com": [ + "pingdom.com" + ], + "solosegment.com": [ + "ul.com", + "asme.org", + "deere.com" + ], + "solvemedia.com": [ + "moonbit.co.in", + "moonliteco.in", + "moondoge.co.in" + ], + "somoydigital.com": [ + "somoynews.tv" + ], + "sonobi.com": [ + "cnet.com", + "usatoday.com", + "dailymotion.com" + ], + "soundcloud.com": [ + "ucl.ac.uk", + "irishtimes.com", + "seriouseats.com" + ], + "soundestlink.com": [ + "cettire.com" + ], + "sp-prod.net": [ + "businessinsider.com", + "gizmodo.com", + "lifehacker.com" + ], + "sp-trk.com": [ + "lolipop.jp" + ], + "speakol.com": [ + "dostor.org", + "almasryalyoum.com" + ], + "spectate.com": [ + "emory.edu", + "nova.edu", + "utsa.edu" + ], + "speee-ad.jp": [ + "alc.co.jp" + ], + "sphereup.com": [ + "abs-cbn.com", + "venturebeat.com", + "jpost.com" + ], + "sphlabs.com": [ + "zaobao.com.sg", + "businesstimes.com.sg" + ], + "spiceworks.com": [ + "slack.com", + "sophos.com", + "seagate.com" + ], + "spider.af": [ + "jalan.net" + ], + "spokenlayer.com": [ + "dailyherald.com", + "mcall.com", + "pilotonline.com" + ], + "sportradarserving.com": [ + "bet9ja.com" + ], + "sportrecs.com": [ + "championat.com" + ], + "spot.im": [ + "aol.com", + "realclearpolitics.com", + "elespanol.com" + ], + "spoteffects.net": [ + "123milhas.com", + "ionos.fr" + ], + "spotify.com": [ + "hurriyet.com.tr", + "biobiochile.cl", + "premierleague.com" + ], + "spotim.market": [ + "aol.com" + ], + "spotxchange.com": [ + "tribunnews.com", + "tinyurl.com", + "dailymail.co.uk" + ], + "spreadshirt.net": [ + "spreadshirt.com" + ], + "spreaker.com": [ + "eltiempo.com", + "ellitoral.com" + ], + "springserve.com": [ + "venturebeat.com", + "wowhead.com", + "nexusmods.com" + ], + "sputnik.ru": [ + "pochta.ru", + "1sept.ru", + "permkrai.ru" + ], + "square-enix.com": [ + "square-enix-games.com" + ], + "squren.com": [ + "gayboystube.com" + ], + "srvtrck.com": [ + "commentcamarche.net", + "linternaute.com" + ], + "srx.com.sg": [ + "straitstimes.com", + "businesstimes.com.sg" + ], + "ssense.com": [ + "informationweek.com" + ], + "ssg.com": [ + "hani.co.kr" + ], + "sspinc.io": [ + "nordstromrack.com", + "ssense.com" + ], + "st8fm.com": [ + "statefarm.com" + ], + "stack-sonar.com": [ + "entrepreneur.com", + "venturebeat.com", + "slashdot.org" + ], + "stackadapt.com": [ + "dropbox.com", + "youm7.com", + "hbr.org" + ], + "stackoverflow.com": [ + "askubuntu.com", + "serverfault.com", + "codinghorror.com" + ], + "stackpathcdn.com": [ + "telugustop.com" + ], + "stat-rock.com": [ + "elwatannews.com" + ], + "stat.media": [ + "kp.ru", + "gazeta.ru", + "realclearpolitics.com" + ], + "statad.ru": [ + "sberbank.ru", + "hh.ru", + "labirint.ru" + ], + "statcounter.com": [ + "freepik.com", + "hugedomains.com", + "flaticon.com" + ], + "state.nj.us": [ + "nj.gov" + ], + "staticcache.org": [ + "williamhill.com" + ], + "staticworld.net": [ + "csoonline.com" + ], + "statsy.net": [ + "rarbg.to" + ], + "statuspage.io": [ + "ghost.org", + "postman.com" + ], + "stdout.cz": [ + "aktualne.cz" + ], + "steelcentral.net": [ + "wireshark.org" + ], + "steelhousemedia.com": [ + "salesforce.com", + "stockx.com", + "careerbuilder.com" + ], + "stickyadstv.com": [ + "okezone.com", + "aol.com", + "youm7.com" + ], + "stockdio.com": [ + "newsbeast.gr" + ], + "storage.googleapis.com": [ + "reviewjournal.com", + "campograndenews.com.br", + "clicrbs.com.br", + "texasmonthly.com" + ], + "stores-bloomingdales.com": [ + "bloomingdales.com" + ], + "storygize.net": [ + "bostonglobe.com", + "heart.org" + ], + "stream.ne.jp": [ + "yomiuri.co.jp" + ], + "streamingddigital.com": [ + "bbva.es" + ], + "streamtheworld.com": [ + "spreaker.com", + "eltiempo.com", + "cadenaser.com" + ], + "stripchat.com": [ + "informationweek.com" + ], + "stripe.com": [ + "npr.org", + "feedly.com", + "newsweek.com" + ], + "stripe.network": [ + "feedly.com", + "artstation.com", + "stitcher.com" + ], + "stripst.com": [ + "xhamsterlive.com", + "stripchat.com" + ], + "striveme.com": [ + "kooora.com" + ], + "stucki.io": [ + "unibas.ch" + ], + "studybreakmedia.com": [ + "citationmachine.net", + "easybib.com" + ], + "stylight.net": [ + "yoox.com" + ], + "subservis.com": [ + "hurriyet.com.tr", + "milliyet.com.tr", + "cnnturk.com" + ], + "summerhamster.com": [ + "cnn.com", + "weather.com", + "zdnet.com" + ], + "sumo.com": [ + "freshdesk.com", + "popsugar.com", + "thrillist.com" + ], + "sumologic.com": [ + "levi.com" + ], + "sundaysky.com": [ + "dell.com", + "cox.com", + "staples.com" + ], + "suning.cn": [ + "pptv.com" + ], + "suning.com": [ + "pptv.com" + ], + "sunrtb.com": [ + "eccn.com" + ], + "supplyframe.com": [ + "arduino.cc", + "ti.com", + "hackaday.com" + ], + "surfcountor.com": [ + "kenh14.vn" + ], + "survata.com": [ + "tripadvisor.com" + ], + "svd.se": [ + "aftonbladet.se" + ], + "svtrd.com": [ + "tnt.com" + ], + "swiftype.com": [ + "adage.com", + "techsmith.com", + "indiewire.com" + ], + "swisscom.ch": [ + "bluewin.ch" + ], + "swisspass.ch": [ + "sbb.ch" + ], + "symantec.com": [ + "budsgunshop.com", + "jbl.com" + ], + "synchronycredit.com": [ + "carecredit.com" + ], + "syndigo.cloud": [ + "costco.com", + "costco.ca" + ], + "syr.edu": [ + "syracuse.edu" + ], + "syuh.net": [ + "squarespace.com" + ], + "szzbmy.com": [ + "rabbitpre.com" + ], + "t-mobilemoney.com": [ + "t-mobile.com" + ], + "t-x.io": [ + "livenation.com" + ], + "t.co": [ + "wsj.com" + ], + "taboola.com": [ + "msn.com", + "okezone.com", + "sourceforge.net" + ], + "tacdn.com": [ + "visitlondon.com" + ], + "tag4arm.com": [ + "stockx.com", + "web.com" + ], + "tagboard.com": [ + "ucsd.edu", + "activision.com", + "scu.edu" + ], + "tagcommander.com": [ + "hotels.com", + "yoox.com" + ], + "tagtic.cn": [ + "a9vg.com" + ], + "tailtarget.com": [ + "uol.com.br", + "globo.com", + "metropoles.com" + ], + "talkable.com": [ + "blurb.com", + "society6.com" + ], + "tam.by": [ + "tut.by" + ], + "tamedia.com.tw": [ + "momoshop.com.tw" + ], + "tamgrt.com": [ + "wyndhamhotels.com", + "priceline.com", + "bestwestern.com" + ], + "tanx.com": [ + "sohu.com" + ], + "taobao.com": [ + "sm.cn" + ], + "tapad.com": [ + "amazon.com", + "godaddy.com", + "okezone.com" + ], + "taplytics.com": [ + "foxnews.com", + "foxbusiness.com" + ], + "tapnative.com": [ + "dailystrength.org" + ], + "targetspot.com": [ + "spreaker.com", + "eltiempo.com", + "ellitoral.com" + ], + "tavoos.net": [ + "parsfootball.com", + "shomanews.com", + "rasadeghtesadi.com" + ], + "tawk.to": [ + "affordable-papers.net", + "essayswriting.org", + "cba.pl" + ], + "taylorandfrancis.com": [ + "tandfonline.com" + ], + "tazabek.kg": [ + "akipress.org" + ], + "tchibo.de": [ + "t-online.de" + ], + "tctm.co": [ + "tapjoy.com" + ], + "tdefender.net": [ + "canadiantire.ca" + ], + "teads.tv": [ + "grid.id", + "tokopedia.com", + "theatlantic.com" + ], + "tealiumiq.com": [ + "cnet.com", + "ibm.com", + "shopify.com" + ], + "techlab-cdn.com": [ + "yoox.com", + "gucci.com", + "mxc.com" + ], + "technical-service.net": [ + "stern.de", + "rtl.de", + "chefkoch.de" + ], + "technologyadvice.com": [ + "serverwatch.com" + ], + "technoratimedia.com": [ + "youm7.com", + "ask.com", + "venturebeat.com" + ], + "techonline.com": [ + "eetimes.com" + ], + "techtarget.com": [ + "slack.com", + "newrelic.com", + "gotomeeting.com" + ], + "techweb.com": [ + "informationweek.com", + "gamasutra.com", + "darkreading.com" + ], + "teenvogue.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "telekom.de": [ + "telekom.com" + ], + "teleport.media": [ + "vesti.ru", + "russia.tv" + ], + "televebion.net": [ + "telewebion.com" + ], + "tend-table.com": [ + "donga.com", + "koreaherald.com" + ], + "tenmax.io": [ + "ruten.com.tw", + "xuite.net" + ], + "terminus.services": [ + "wpengine.com", + "unity.com", + "gotomeeting.com" + ], + "tfaforms.net": [ + "teamusa.org", + "und.edu", + "aamc.org" + ], + "theadex.com": [ + "t-online.de", + "mobile.de", + "messefrankfurt.com" + ], + "thebrighttag.com": [ + "kohls.com", + "sephora.com", + "gopro.com" + ], + "theglobeandmail.ca": [ + "theglobeandmail.com" + ], + "thehindu.com": [ + "thehindubusinessline.com" + ], + "theice.com": [ + "nyse.com" + ], + "thejobnetwork.com": [ + "timesfreepress.com" + ], + "them.us": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "themarker.com": [ + "haaretz.com" + ], + "thenewstribune.com": [ + "idahostatesman.com" + ], + "theregister.co.uk": [ + "theregister.com" + ], + "thesame.tv": [ + "yaplakal.com" + ], + "thesun.co.uk": [ + "talksport.com" + ], + "thinkpad.com": [ + "lenovo.com.cn" + ], + "threewave.jp": [ + "moppy.jp" + ], + "thron.com": [ + "ferrari.com" + ], + "thrtle.com": [ + "variety.com", + "rollingstone.com", + "medscape.com" + ], + "thunderhead.com": [ + "forever21.com", + "telstra.com.au", + "banco.bradesco" + ], + "ti.com.cn": [ + "ti.com" + ], + "tidaltv.com": [ + "okezone.com", + "imgur.com", + "geeksforgeeks.org" + ], + "tij.co.jp": [ + "ti.com" + ], + "timecommerce.net": [ + "people.com", + "allrecipes.com", + "ew.com" + ], + "timewarnercable.com": [ + "spectrumlocalnews.com", + "ny1.com" + ], + "tinkoffinsurance.ru": [ + "tinkoff.ru" + ], + "tinypass.com": [ + "forbes.com", + "reuters.com", + "bloomberg.com" + ], + "tiqcdn.com": [ + "marketwatch.com", + "wsj.com", + "oakley.com" + ], + "titoaktop.com": [ + "kickasstorrents.to" + ], + "tmall.ru": [ + "aliexpress.com" + ], + "tmobile.com": [ + "t-mobile.com" + ], + "tns-counter.ru": [ + "vk.com", + "mail.ru", + "ok.ru" + ], + "tns-cs.net": [ + "nrk.no", + "yr.no" + ], + "tns-ua.com": [ + "i.ua", + "ria.com", + "bigmir.net" + ], + "toast.com": [ + "ettoday.net", + "jpnn.com", + "dothome.co.kr" + ], + "tombot.ai": [ + "rosettastone.com" + ], + "tomtop.com": [ + "informationweek.com" + ], + "tongdun.cn": [ + "tongdun.net" + ], + "top100.ru": [ + "livejournal.com", + "rambler.ru", + "lenta.ru" + ], + "top4top.io": [ + "cutt.us" + ], + "toplist.cz": [ + "opensubtitles.org" + ], + "toutapp.com": [ + "newswire.com" + ], + "tq.cn": [ + "idianfa.com" + ], + "trackad.cz": [ + "idnes.cz", + "aktualne.cz" + ], + "trackalyzer.com": [ + "servicenow.com" + ], + "tradablebits.com": [ + "sundance.org" + ], + "tradedoubler.com": [ + "marca.com", + "elmundo.es", + "expansion.com" + ], + "tradelab.fr": [ + "eklablog.com", + "canalblog.com", + "icrc.org" + ], + "tradingview.com": [ + "investopedia.com", + "entrepreneur.com", + "kitco.com" + ], + "traffic-media.co.uk": [ + "kinokrad.co", + "1plus1tv.ru" + ], + "trafficbass.com": [ + "filmix.co", + "radikal.ru", + "1plus1tv.ru" + ], + "trafficdok.com": [ + "filmix.co" + ], + "trafficgate.net": [ + "rakuten.co.jp" + ], + "trafficguard.ai": [ + "nerdwallet.com", + "westernunion.com", + "williamhill.com" + ], + "trafficjunky.net": [ + "pornhub.com", + "redtube.com", + "nhentai.net" + ], + "trafficlide.com": [ + "filmix.co" + ], + "trafficsan.com": [ + "kickassanime.rs" + ], + "trafmag.com": [ + "rezka.ag", + "ukr.net", + "prom.ua" + ], + "transferwise.com": [ + "informationweek.com" + ], + "travelaudience.com": [ + "thetrainline.com" + ], + "trbna.com": [ + "sports.ru" + ], + "treasuredata.com": [ + "goo.ne.jp", + "kakaku.com", + "asahi.com" + ], + "tremorhub.com": [ + "dailymail.co.uk", + "aol.com", + "youm7.com" + ], + "trendemon.com": [ + "tenable.com", + "walkme.com", + "panasonic.jp" + ], + "trendmd.com": [ + "sciencedaily.com" + ], + "tribalfusion.com": [ + "walmart.com", + "realtor.com", + "xe.com" + ], + "tribl.io": [ + "ada.support", + "meltwater.com", + "jobvite.com" + ], + "trinitymedia.ai": [ + "stripes.com" + ], + "trip.com": [ + "informationweek.com" + ], + "tripadvisor.com": [ + "radissonblu.com" + ], + "tripcdn.com": [ + "trip.com" + ], + "trkn.us": [ + "unsplash.com", + "newyorker.com", + "usps.com" + ], + "trs.cn": [ + "gxzf.gov.cn", + "xhby.net" + ], + "truefitcorp.com": [ + "landsend.com" + ], + "truehits.in.th": [ + "sanook.com", + "kapook.com", + "thairath.co.th" + ], + "truepush.com": [ + "eenadu.net", + "3isk.tv", + "sarvgyan.com" + ], + "trumba.com": [ + "ucdavis.edu", + "okstate.edu", + "royalgazette.com" + ], + "truoptik.com": [ + "wowhead.com" + ], + "trustarc.com": [ + "redhat.com", + "medscape.com", + "philips.com" + ], + "trustcommander.net": [ + "mytheresa.com", + "lcl.fr" + ], + "trustedsite.com": [ + "myus.com" + ], + "trustivity.es": [ + "movistar.es" + ], + "trustspot.io": [ + "cognitoforms.com" + ], + "trvl-px.com": [ + "hotels.com", + "vrbo.com" + ], + "trwl1.com": [ + "avgle.com" + ], + "trysera.com": [ + "realclearpolitics.com", + "adorama.com" + ], + "tsyndicate.com": [ + "drtuber.com", + "stripchat.com", + "xhamster.desi" + ], + "tucarro.com.co": [ + "mercadolibre.com.co" + ], + "tucarro.com.ve": [ + "mercadolibre.com.ve" + ], + "tuinmueble.com.ve": [ + "mercadolibre.com.ve" + ], + "tumoto.com.co": [ + "mercadolibre.com.co" + ], + "tumoto.com.ve": [ + "mercadolibre.com.ve" + ], + "turn.com": [ + "okezone.com", + "forbes.com", + "sourceforge.net" + ], + "tutu.travel": [ + "tutu.ru" + ], + "tvinsider.com": [ + "gazette.com" + ], + "tvopen.gr": [ + "ethnos.gr" + ], + "tvpage.com": [ + "bedbathandbeyond.com" + ], + "tvpixel.com": [ + "nbcnews.com", + "vmware.com", + "today.com" + ], + "tvsquared.com": [ + "godaddy.com", + "coursera.org", + "hulu.com" + ], + "tw.cx": [ + "justwatch.com" + ], + "twimg.com": [ + "epfl.ch", + "nice.org.uk", + "royalsociety.org" + ], + "twitch.tv": [ + "xataka.com", + "dndbeyond.com", + "fextralife.com" + ], + "twitter.com": [ + "linkedin.com", + "amazon.com", + "adobe.com" + ], + "twnmm.com": [ + "theweathernetwork.com" + ], + "tynt.com": [ + "ettoday.net", + "inquirer.net", + "alnaharegypt.com" + ], + "typekit.net": [ + "illinois.edu", + "acs.org", + "jotform.com", + "pixar.com" + ], + "u7u9.com": [ + "sina.com.cn" + ], + "uadexchange.com": [ + "uzone.id" + ], + "ubic.tech": [ + "mos.ru" + ], + "uc.se": [ + "jalbum.net" + ], + "ucfly.com": [ + "9game.cn" + ], + "ucgstatic.eu": [ + "unicredit.it" + ], + "uciservice.com": [ + "hotels.com", + "hotwire.com" + ], + "udemy.com": [ + "informationweek.com" + ], + "udesk.cn": [ + "kuaidi100.com", + "zb.com", + "bitz.ai" + ], + "udimg.com": [ + "urbandictionary.com" + ], + "udmserve.net": [ + "timesofisrael.com", + "nationalinterest.org", + "freebeacon.com" + ], + "ufpcdn.com": [ + "eztv.io" + ], + "uicdn.net": [ + "ionos.com", + "ionos.de", + "ionos.fr" + ], + "uikc.net": [ + "qvc.com" + ], + "uimserv.net": [ + "ionos.com", + "ionos.fr" + ], + "ukr.net": [ + "sinoptik.ua" + ], + "ukw.jp": [ + "peatix.com" + ], + "ulb.ac.be": [ + "ulb.be" + ], + "ulclick.ru": [ + "aif.ru", + "revopush.com" + ], + "ulogin.ru": [ + "aif.ru", + "revopush.com" + ], + "ultainc.com": [ + "ulta.com" + ], + "ultimedia.com": [ + "lesoir.be", + "libertaddigital.com" + ], + "unbxdapi.com": [ + "hsn.com" + ], + "uncn.jp": [ + "hulu.jp" + ], + "uncrate.supply": [ + "uncrate.com" + ], + "undertone.com": [ + "variety.com", + "rollingstone.com", + "lastpass.com" + ], + "uni-frankfurt.de": [ + "goethe-university-frankfurt.de" + ], + "unicc.org": [ + "ohchr.org" + ], + "unidata.ai": [ + "storm.mg" + ], + "unisender.com": [ + "hse.ru", + "forbes.ru" + ], + "unite.com": [ + "freedownloadmanager.org" + ], + "unsplash.com": [ + "pinterest.com", + "pinimg.com", + "pinterest.ca" + ], + "uol.com.br": [ + "magazineluiza.com.br" + ], + "uplift-platform.com": [ + "caesars.com" + ], + "upravel.com": [ + "kp.ru", + "aif.ru", + "citilink.ru" + ], + "upsellit.com": [ + "ccleaner.com" + ], + "uptime.com": [ + "thingiverse.com", + "storyblocks.com", + "weedmaps.com" + ], + "uq.net.au": [ + "uq.edu.au" + ], + "uqhv.net": [ + "hsn.com" + ], + "urbandictionary.store": [ + "urbandictionary.com" + ], + "us-central1-ah-acemarketingteam.cloudfunctions.net": [ + "acehardware.com" + ], + "us-central1-zendesk-functions.cloudfunctions.net": [ + "yubico.com" + ], + "usaa360.com": [ + "usaa.com" + ], + "useinsider.com": [ + "idntimes.com", + "mynet.com", + "blibli.com" + ], + "user-red.com": [ + "alfabank.ru" + ], + "usercentrics.eu": [ + "adac.de", + "sennheiser.com", + "steinberg.net" + ], + "usergram.info": [ + "ocn.ne.jp", + "sony.jp", + "hulu.jp" + ], + "userreplay.net": [ + "containerstore.com", + "papajohns.com", + "bathandbodyworks.com" + ], + "userreport.com": [ + "memurlar.net", + "blogg.se", + "iltalehti.fi" + ], + "uservoice.com": [ + "scoop.it", + "adobe.com", + "slader.com" + ], + "userzoom.com": [ + "statefarm.com" + ], + "usocial.pro": [ + "narod.ru" + ], + "usonar.jp": [ + "sakura.ne.jp", + "sakura.ad.jp" + ], + "uspech.sk": [ + "sme.sk" + ], + "utarget.ru": [ + "radikal.ru", + "utarget.pro" + ], + "uuidksinc.net": [ + "rezka.ag", + "aif.ru" + ], + "uxfeedback.ru": [ + "cian.ru", + "mvideo.ru", + "eldorado.ru" + ], + "vads.net.vn": [ + "vietnamnet.vn" + ], + "valkirum.com": [ + "kinogo.zone" + ], + "valuecommerce.com": [ + "hotpepper.jp", + "alc.co.jp", + "techacademy.jp" + ], + "valuecommerce.ne.jp": [ + "moppy.jp" + ], + "vanityfair.com": [ + "wired.com", + "newyorker.com", + "vogue.com" + ], + "veinteractive.com": [ + "lesoir.be" + ], + "velaro.com": [ + "adp.com" + ], + "vendemore.com": [ + "suse.com", + "splunk.com" + ], + "vergic.com": [ + "aicpa.org" + ], + "vertebrae-axis.com": [ + "coach.com" + ], + "verticalhealth.net": [ + "psychcentral.com" + ], + "vgtrk.com": [ + "vesti.ru", + "russia.tv" + ], + "vgwort.de": [ + "wbs-law.de" + ], + "viafoura.co": [ + "cbc.ca", + "mirror.co.uk", + "mercurynews.com" + ], + "viatorinc.com": [ + "viator.com" + ], + "vidads.gr": [ + "newsbeast.gr" + ], + "vidazoo.com": [ + "washingtonian.com" + ], + "video-cdn.net": [ + "messefrankfurt.com" + ], + "videohub.tv": [ + "colorado.edu", + "wsj.com", + "dashlane.com" + ], + "vidgrid.com": [ + "paylocity.com" + ], + "vidible.tv": [ + "huffpost.com", + "huffingtonpost.ca", + "edh.tw" + ], + "vidio.com": [ + "liputan6.com", + "bola.net" + ], + "vidyard.com": [ + "izooto.com", + "ultimatesoftware.com", + "clarivate.com" + ], + "vietid.net": [ + "soha.vn" + ], + "vietnamnettv.vn": [ + "vietnamnet.vn" + ], + "viglink.com": [ + "cnet.com", + "zdnet.com", + "techrepublic.com" + ], + "vihub.ru": [ + "rezka.ag", + "baskino.me", + "litres.ru" + ], + "viki.io": [ + "viki.com" + ], + "vindicosuite.com": [ + "jpost.com", + "zappos.com", + "medallia.com" + ], + "viostream.com": [ + "ato.gov.au" + ], + "vip.com": [ + "idianfa.com" + ], + "vipstatic.com": [ + "vip.com" + ], + "viqeo.tv": [ + "rg.ru" + ], + "viralize.tv": [ + "ilfattoquotidiano.it" + ], + "virgul.com": [ + "yemek.com", + "tureng.com" + ], + "virtuoussoftware.com": [ + "lifesitenews.com" + ], + "visa.com": [ + "authorize.net", + "cybersource.com" + ], + "visilabs.net": [ + "kariyer.net" + ], + "visitor-track.com": [ + "hivestreaming.com", + "prnewswire.com" + ], + "visualstudio.com": [ + "dior.com", + "seriouseats.com", + "techopedia.com" + ], + "visualwebsiteoptimizer.com": [ + "instructure.com", + "okta.com", + "plesk.com" + ], + "vivino.com": [ + "informationweek.com" + ], + "vivocha.com": [ + "insee.fr" + ], + "vizergy.com": [ + "hardrock.com" + ], + "vizury.com": [ + "adorama.com" + ], + "vk.com": [ + "livejournal.com", + "aliexpress.ru", + "asos.com" + ], + "vnecdn.net": [ + "vnexpress.net" + ], + "vodgc.net": [ + "tn.com.ar" + ], + "vogue.com": [ + "wired.com", + "newyorker.com", + "vanityfair.com" + ], + "voidboost.net": [ + "baskino.me" + ], + "volvelle.tech": [ + "lesoir.be" + ], + "voxmedia.com": [ + "theverge.com", + "vox.com", + "polygon.com" + ], + "vporn.com": [ + "pornone.com" + ], + "vroom.be": [ + "standaard.be" + ], + "vrtzads.com": [ + "thehindu.com" + ], + "vstocklab.com": [ + "hani.co.kr" + ], + "vupulse.com": [ + "dailywire.com" + ], + "vzew.net": [ + "lenovo.com" + ], + "w55c.net": [ + "forbes.com", + "addthis.com", + "pbs.org" + ], + "w8.com.cn": [ + "zol.com.cn", + "cnmo.com" + ], + "walkme.com": [ + "moodys.com" + ], + "wallkit.net": [ + "thewrap.com" + ], + "watertu.com": [ + "gusuwang.com" + ], + "wbtrk.net": [ + "goethe.de", + "telekom.com", + "swissinfo.ch" + ], + "wcfbc.net": [ + "repubblica.it", + "telekom.com", + "messefrankfurt.com" + ], + "wdsvc.net": [ + "alz.org", + "nature.org", + "taxfoundation.org" + ], + "webankieta.pl": [ + "certum.pl" + ], + "webantenna.info": [ + "coconala.com", + "hulu.jp", + "onamae.com" + ], + "webengage.com": [ + "testbook.com", + "deccanherald.com", + "angelbroking.com" + ], + "webeyez.com": [ + "similarweb.com" + ], + "webforms-here.com": [ + "here.com" + ], + "webmd.com": [ + "avvo.com" + ], + "webnode.com": [ + "webnode.cz" + ], + "weborama.fr": [ + "ivi.tv", + "kino-teatr.ru", + "aif.ru" + ], + "webpush.jp": [ + "asahi.com", + "sankei.com", + "sponichi.co.jp" + ], + "webs.com": [ + "freewebs.com" + ], + "webspectator.com": [ + "metropoles.com", + "goal.com", + "otvfoco.com.br" + ], + "webterren.com": [ + "china.com.cn", + "eastday.com", + "rednet.cn" + ], + "webtracker.jp": [ + "ascii.jp", + "famitsu.com" + ], + "webtrafficsource.com": [ + "newchic.com", + "dx.com" + ], + "webtrekk.net": [ + "springer.com", + "hepsiburada.com", + "goethe.de" + ], + "webtrendslive.com": [ + "aaa.com", + "ingrammicro.com" + ], + "webturn.ru": [ + "domclick.ru" + ], + "webullfintech.com": [ + "webull.com" + ], + "webvisor.org": [ + "tribunnews.com", + "inquirer.net", + "narod.ru" + ], + "weekli.de": [ + "rp-online.de" + ], + "weibo.com": [ + "cnad.com", + "ccidnet.com", + "19888.tv" + ], + "wellsmedia.com": [ + "insurancejournal.com" + ], + "wemfbox.ch": [ + "swissinfo.ch", + "nzz.ch", + "20min.ch" + ], + "wemorefun.com": [ + "appgame.com" + ], + "west.cn": [ + "idianfa.com" + ], + "whistleout.com": [ + "dslreports.com" + ], + "wi-fi.ru": [ + "ntv.ru", + "yaplakal.com", + "zaycev.net" + ], + "widengle.com": [ + "caesars.com" + ], + "wikia-services.com": [ + "gamepedia.com" + ], + "wikipedia.org": [ + "flattr.com" + ], + "wiqhit.com": [ + "eur.nl" + ], + "wired.com": [ + "newyorker.com", + "vanityfair.com", + "vogue.com" + ], + "wishabi.com": [ + "globalnews.ca", + "nationalpost.com", + "baltimoresun.com", + "edmontonjournal.com" + ], + "wisokykulas.bid": [ + "filmix.co" + ], + "wistia.com": [ + "magento.com", + "getflywheel.com" + ], + "wistia.net": [ + "uservoice.com", + "pendo.io", + "pardot.com" + ], + "wix.com": [ + "deviantart.com" + ], + "wkxppshj-qx.global.ssl.fastly.net": [ + "jcpenney.com", + "ulta.com", + "argos.co.uk" + ], + "wnyc.org": [ + "newyorker.com" + ], + "wo-cloud.com": [ + "wetteronline.de" + ], + "wondershare.com": [ + "wondershare.net" + ], + "workplace.tools": [ + "workplace.com" + ], + "wp.com": [ + "akismet.com", + "jetpack.com", + "crowdsignal.com" + ], + "wpmudev.com": [ + "curtin.edu.au", + "familydoctor.org" + ], + "wsod.com": [ + "reuters.com", + "cnbc.com", + "ft.com" + ], + "wt-eu02.net": [ + "libero.it", + "virgilio.it", + "telekom.com" + ], + "wufoo.com": [ + "redcrossblood.org" + ], + "wzrkt.com": [ + "indianexpress.com", + "thehindu.com", + "espncricinfo.com" + ], + "xesimg.com": [ + "xueersi.com" + ], + "xg4ken.com": [ + "williams-sonoma.com", + "courier-journal.com", + "logitech.com" + ], + "xhuc.net": [ + "cabelas.com" + ], + "xinhuanet.com": [ + "news.cn" + ], + "xinnet.com": [ + "idianfa.com" + ], + "xiti.com": [ + "dw.com", + "accor.com", + "ovh.com" + ], + "xiu123.cn": [ + "6.cn" + ], + "xlisting.jp": [ + "rakuten.co.jp", + "goo.ne.jp", + "ocn.ne.jp" + ], + "xspadvertising.com": [ + "sourceforge.net", + "deloitte.com", + "knowyourmeme.com" + ], + "xtremepush.com": [ + "digikala.com", + "rte.ie", + "premierbet.co.ao" + ], + "xunlei.com": [ + "sandai.net" + ], + "xxxlutz.de": [ + "t-online.de" + ], + "yad2.co.il": [ + "walla.co.il" + ], + "yadro.ru": [ + "mail.ru", + "ok.ru", + "rt.com" + ], + "yahoo.co.jp": [ + "dropbox.com", + "rakuten.co.jp", + "slack.com" + ], + "yahoo.com": [ + "amazon.com", + "tumblr.com", + "msn.com" + ], + "yahoo.net": [ + "paulgraham.com" + ], + "yandex.ru": [ + "tribunnews.com", + "mail.ru", + "aparat.com" + ], + "yapfiles.ru": [ + "yaplakal.com" + ], + "yccdn.com": [ + "bitauto.com" + ], + "yektanet.com": [ + "varzesh3.com", + "donya-e-eqtesad.com", + "tejaratnews.com" + ], + "yellowblue.io": [ + "aol.com" + ], + "yiche.com": [ + "bitauto.com" + ], + "yieldify.com": [ + "teespring.com" + ], + "yieldlab.net": [ + "okezone.com", + "statista.com", + "businessinsider.de" + ], + "yieldmanager.com": [ + "ipage.com", + "tsite.jp" + ], + "yieldmo.com": [ + "foreignpolicy.com", + "mobafire.com", + "woot.com" + ], + "yieldoptimizer.com": [ + "marriott.com", + "united.com", + "fourseasons.com" + ], + "yodasoft.in": [ + "sakshi.com" + ], + "yomedia.vn": [ + "thethao247.vn" + ], + "yonhapnews.co.kr": [ + "yna.co.kr" + ], + "yoox.it": [ + "yoox.com", + "mrporter.com", + "theoutnet.com" + ], + "yotpo.com": [ + "threadless.com", + "colourpop.com", + "splice.com" + ], + "youdemai.com": [ + "lenovo.com.cn" + ], + "youku.com": [ + "bshare.cn" + ], + "youplay.se": [ + "thelocal.se" + ], + "youtube-nocookie.com": [ + "drupal.org", + "last.fm", + "tmz.com" + ], + "youtube.com": [ + "apache.org", + "github.com", + "who.int", + "jabra.com", + "hirufm.lk" + ], + "youvisit.com": [ + "fsu.edu", + "uh.edu", + "vcu.edu" + ], + "yumpu.com": [ + "vanguardngr.com" + ], + "yunaq.com": [ + "eqxiu.com", + "bt.cn", + "youzan.com" + ], + "yystatic.com": [ + "yy.com" + ], + "z-analytics.net": [ + "zmags.com" + ], + "z6rjha.net": [ + "techsmith.com" + ], + "zadn.vn": [ + "zingnews.vn" + ], + "zaius.com": [ + "sothebys.com" + ], + "zalo.me": [ + "zingnews.vn", + "baomoi.com", + "zingmp3.vn" + ], + "zaloapp.com": [ + "zingnews.vn", + "baomoi.com" + ], + "zara.net": [ + "zara.com" + ], + "zarabotkipro.ru": [ + "vz.ru" + ], + "zdbb.net": [ + "speedtest.net", + "mashable.com", + "pcmag.com" + ], + "zdmimg.com": [ + "smzdm.com" + ], + "zebestof.com": [ + "webself.net", + "journaldunet.com" + ], + "zedo.com": [ + "alwafd.news", + "thehindu.com", + "indiatoday.in" + ], + "zemanta.com": [ + "thehill.com", + "farfetch.com", + "newsmax.com" + ], + "zendesk.com": [ + "neilpatel.com", + "bugsnag.com", + "folgory.com" + ], + "zengenti.com": [ + "nottingham.ac.uk" + ], + "zeotap.com": [ + "amazon.com", + "geeksforgeeks.org", + "skyrock.com" + ], + "zergnet.com": [ + "marketwatch.com", + "wegotthiscovered.com", + "knowyourmeme.com" + ], + "zero.kz": [ + "kundelik.kz", + "egov.kz" + ], + "zeronaught.com": [ + "chipotle.com" + ], + "zg-api.com": [ + "trulia.com" + ], + "zhugeapi.net": [ + "processon.com" + ], + "zhugeio.com": [ + "tmtpost.com" + ], + "ziffdavis.com": [ + "extremetech.com" + ], + "ziftsolutions.com": [ + "netacad.com" + ], + "zimmo.be": [ + "nieuwsblad.be", + "standaard.be" + ], + "zineone.com": [ + "kohls.com" + ], + "zippyfrog.co": [ + "bitly.com" + ], + "zipwiresw.com": [ + "metopera.org" + ], + "zoho.com": [ + "runsignup.com", + "xmission.com" + ], + "zoho.in": [ + "zoho.com" + ], + "zol.com.cn": [ + "cnmo.com" + ], + "zonebourse.com": [ + "marketscreener.com" + ], + "zoomanalytics.co": [ + "technion.ac.il" + ], + "zoominfo.com": [ + "appsflyer.com", + "eset.com", + "onelogin.com" + ], + "zoomph.com": [ + "uga.edu", + "eatright.org" + ], + "zopim.com": [ + "clockify.me" + ], + "zprk.io": [ + "straitstimes.com", + "oneindia.com", + "thewrap.com" + ], + "ztsrv.com": [ + "fullerton.edu" + ], + "zucks.net": [ + "au.com" + ] + }, + "version": "2020.10.2" +} \ No newline at end of file diff --git a/src/data/socialwidgets.json b/src/data/socialwidgets.json new file mode 100644 index 0000000..a09893e --- /dev/null +++ b/src/data/socialwidgets.json @@ -0,0 +1,266 @@ +{ + "AddThis": { + "domain": "s7.addthis.com", + "buttonSelectors": [ + "div.addthis_toolbox:not(:empty)" + ], + "replacementButton": { + "details": "
", + "unblockDomains": [ + "s7.addthis.com", + "ct1.addthis.com", + "api-public.addthis.com" + ], + "imagePath": "AddThis.svg", + "type": 2 + } + }, + "Coub Player": { + "domain": "coub.com", + "buttonSelectors": [ + "iframe[src^='//coub.com/embed/']" + ], + "replacementButton": { + "unblockDomains": [ + "coub.com" + ], + "type": 3 + } + }, + "Digg": { + "domain": "widgets.digg.com", + "buttonSelectors": [ + ".DiggThisButton" + ], + "replacementButton": { + "details": "http://www.digg.com/submit?url=", + "imagePath": "Digg.svg", + "type": 0 + } + }, + "Disqus": { + "domains": [ + "disqus.com", + "*.disqus.com" + ], + "buttonSelectors": [ + "div#disqus_thread" + ], + "scriptSelectors": [ + "script[src*='.disqus.com/embed.js']" + ], + "replacementButton": { + "unblockDomains": [ + "*.disqus.com", + "disqus.com" + ], + "type": 4 + } + }, + "Facebook Comments": { + "domain": "www.facebook.com", + "buttonSelectors": [ + "div.fb-comments.fb_iframe_widget" + ], + "replacementButton": { + "unblockDomains": [ + "www.facebook.com" + ], + "type": 3 + } + }, + "Facebook Like": { + "domain": "www.facebook.com", + "buttonSelectors": [ + "fb\\:like", + "iframe[src*='://www.facebook.com/plugins/like.php']", + "iframe[src*='://www.facebook.com/v2.0/plugins/like.php']", + ".fb-like" + ], + "replacementButton": { + "details": "https://www.facebook.com/plugins/like.php?href=", + "unblockDomains": [ + "www.facebook.com" + ], + "imagePath": "FacebookLike.svg", + "type": 1 + } + }, + "Facebook Share": { + "domain": "www.facebook.com", + "buttonSelectors": [ + "fb\\:share_button", + "iframe[src*='://www.facebook.com/plugins/share_button.php']", + "iframe[src*='://www.facebook.com/v2.0/plugins/share_button.php']", + ".fb-share-button" + ], + "replacementButton": { + "details": "https://www.facebook.com/plugins/share_button.php?href=", + "unblockDomains": [ + "www.facebook.com" + ], + "imagePath": "FacebookShare.svg", + "type": 1 + } + }, + "Facebook Video": { + "domain": "www.facebook.com", + "buttonSelectors": [ + "iframe[src^='https://www.facebook.com/plugins/video.php?']" + ], + "replacementButton": { + "unblockDomains": [ + "www.facebook.com" + ], + "type": 3 + } + }, + "Google reCAPTCHA": { + "domains": [ + "google.com", + "www.google.com" + ], + "buttonSelectors": [ + "div.g-recaptcha", + "div#g-recaptcha", + "fieldset#g-recaptcha" + ], + "scriptSelectors": [ + "script[src^='//google.com/recaptcha/api.js']", + "script[src^='https://google.com/recaptcha/api.js']", + "script[src^='https://www.google.com/recaptcha/api.js']" + ], + "fallbackScriptUrl": "//google.com/recaptcha/api.js", + "replacementButton": { + "unblockDomains": [ + "google.com", + "www.google.com" + ], + "type": 4 + } + }, + "LinkedIn": { + "domain": "platform.linkedin.com", + "buttonSelectors": [ + "script[type='in/share']" + ], + "replacementButton": { + "details": "http://www.linkedin.com/shareArticle?mini=true&url=", + "imagePath": "LinkedIn.svg", + "type": 0 + } + }, + "Pinterest": { + "domain": "assets.pinterest.com", + "buttonSelectors": [ + "script[src='//assets.pinterest.com/js/pinit.js']", + ".pin-it-button" + ], + "replacementButton": { + "details": "http://pinterest.com/pin/create/button/?url=", + "imagePath": "Pinterest.svg", + "type": 0 + } + }, + "SoundCloud": { + "domain": "w.soundcloud.com", + "buttonSelectors": [ + "iframe[src^='https://w.soundcloud.com/player']" + ], + "replacementButton": { + "unblockDomains": [ + "w.soundcloud.com" + ], + "type": 3 + } + }, + "Spotify Player": { + "domains": [ + "embed.spotify.com", + "open.spotify.com" + ], + "buttonSelectors": [ + "iframe[src^='https://embed.spotify.com/']", + "iframe[src^='https://open.spotify.com/embed']" + ], + "replacementButton": { + "unblockDomains": [ + "embed.spotify.com", + "open.spotify.com" + ], + "type": 3 + } + }, + "Streamable Player": { + "domain": "streamable.com", + "buttonSelectors": [ + "iframe[src^='https://streamable.com/']" + ], + "replacementButton": { + "unblockDomains": [ + "streamable.com" + ], + "type": 3 + } + }, + "Twitch Player": { + "domain": "player.twitch.tv", + "buttonSelectors": [ + "iframe[src^='https://player.twitch.tv/']", + "iframe[src^='//player.twitch.tv/']" + ], + "replacementButton": { + "unblockDomains": [ + "player.twitch.tv" + ], + "type": 3 + } + }, + "Twitter": { + "domain": "platform.twitter.com", + "buttonSelectors": [ + ".twitter-share-button" + ], + "replacementButton": { + "details": "https://twitter.com/intent/tweet?url=", + "imagePath": "Twitter.svg", + "type": 0 + } + }, + "Vimeo": { + "domain": "player.vimeo.com", + "buttonSelectors": [ + "iframe[src^='https://player.vimeo.com/video/']:not([src*='background=1'])", + "iframe[src^='//player.vimeo.com/video/']:not([src*='background=1'])" + ], + "replacementButton": { + "unblockDomains": [ + "player.vimeo.com" + ], + "type": 3 + } + }, + "YouTube": { + "domains": [ + "youtube.com", + "www.youtube.com", + "www.youtube-nocookie.com" + ], + "buttonSelectors": [ + "iframe[src^='//www.youtube.com/embed/']", + "iframe[src^='http://www.youtube.com/embed/']", + "iframe[src^='https://www.youtube.com/embed/']", + "iframe[src^='https://youtube.com/embed/']", + "iframe[src^='//www.youtube-nocookie.com/embed/']", + "iframe[src^='https://www.youtube-nocookie.com/embed/']" + ], + "replacementButton": { + "unblockDomains": [ + "youtube.com", + "www.youtube.com", + "www.youtube-nocookie.com" + ], + "type": 3 + } + } +} diff --git a/src/data/surrogates.js b/src/data/surrogates.js new file mode 100644 index 0000000..eb46d1b --- /dev/null +++ b/src/data/surrogates.js @@ -0,0 +1,474 @@ +/* + * + * This file is part of Privacy Badger + * Copyright (C) 2016 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +require.scopes.surrogatedb = (function() { + +/** + * A hostname can have one or more surrogate scripts. + * + * "hostnames" maps hostnames to surrogate pattern tokens. + * + * Surrogate pattern tokens are used to look up the actual + * surrogate script code (stored in "surrogates" object below). + * + * There are currently two types of surrogate pattern tokens: + * + * - {Array} one or more suffix tokens: + * Does the script URL (querystring excluded) end with the token? + * + * - {String} wildcard token: + * Matches any script URL for the hostname. + */ +const hostnames = { + 'b.scorecardresearch.com': [ + '/beacon.js', + '/c2/plugins/streamsense_plugin_html5.js', + ], + 'sb.scorecardresearch.com': [ + '/beacon.js', + '/c2/plugins/streamsense_plugin_html5.js', + ], + 'ssl.google-analytics.com': [ + '/ga.js', + '/analytics.js', + ], + 'www.google-analytics.com': [ + '/analytics.js', + '/ga.js', + ], + 'www.googletagservices.com': [ + '/gpt.js', + ], + 'api.youneeq.ca': [ + '/app/yqmin', + ], + 'cdn.krxd.net': 'noopjs', + 'widgets.outbrain.com': '/outbrain.js', +}; + +/** + * "surrogates" maps surrogate pattern tokens to surrogate script code. + */ +const surrogates = { + /* eslint-disable no-extra-semi, space-in-parens */ + + // Google Analytics (legacy ga.js) + // + // sourced from https://github.com/uBlockOrigin/uAssets/ under GPLv3 + // https://github.com/uBlockOrigin/uAssets/blob/2dfeece7cfe671e93573db6d176901cf2df37623/filters/resources.txt#L162-L260 + // + // test cases: + // http://checkin.avianca.com/ + // https://www.vmware.com/support/pubs/ws_pubs.html (release notes links) + // + // API reference: + // https://developers.google.com/analytics/devguides/collection/gajs/methods/ + '/ga.js': '(' + + function() { + var noopfn = function() { + ; + }; + // + var Gaq = function() { + ; + }; + Gaq.prototype.Na = noopfn; + Gaq.prototype.O = noopfn; + Gaq.prototype.Sa = noopfn; + Gaq.prototype.Ta = noopfn; + Gaq.prototype.Va = noopfn; + Gaq.prototype._createAsyncTracker = noopfn; + Gaq.prototype._getAsyncTracker = noopfn; + Gaq.prototype._getPlugin = noopfn; + Gaq.prototype.push = function(a) { + if ( typeof a === 'function' ) { + a(); return; + } + if ( Array.isArray(a) === false ) { + return; + } + // https://twitter.com/catovitch/status/776442930345218048 + // https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiDomainDirectory#_gat.GA_Tracker_._link + if ( a[0] === '_link' && typeof a[1] === 'string' ) { + window.location.assign(a[1]); + } + // https://github.com/gorhill/uBlock/issues/2162 + if ( a[0] === '_set' && a[1] === 'hitCallback' && typeof a[2] === 'function' ) { + a[2](); + } + }; + // + var tracker = (function() { + var out = {}; + var api = [ + '_addIgnoredOrganic _addIgnoredRef _addItem _addOrganic', + '_addTrans _clearIgnoredOrganic _clearIgnoredRef _clearOrganic', + '_cookiePathCopy _deleteCustomVar _getName _setAccount', + '_getAccount _getClientInfo _getDetectFlash _getDetectTitle', + '_getLinkerUrl _getLocalGifPath _getServiceMode _getVersion', + '_getVisitorCustomVar _initData _link _linkByPost', + '_setAllowAnchor _setAllowHash _setAllowLinker _setCampContentKey', + '_setCampMediumKey _setCampNameKey _setCampNOKey _setCampSourceKey', + '_setCampTermKey _setCampaignCookieTimeout _setCampaignTrack _setClientInfo', + '_setCookiePath _setCookiePersistence _setCookieTimeout _setCustomVar', + '_setDetectFlash _setDetectTitle _setDomainName _setLocalGifPath', + '_setLocalRemoteServerMode _setLocalServerMode _setReferrerOverride _setRemoteServerMode', + '_setSampleRate _setSessionTimeout _setSiteSpeedSampleRate _setSessionCookieTimeout', + '_setVar _setVisitorCookieTimeout _trackEvent _trackPageLoadTime', + '_trackPageview _trackSocial _trackTiming _trackTrans', + '_visitCode' + ].join(' ').split(/\s+/); + var i = api.length; + while ( i-- ) { + out[api[i]] = noopfn; + } + out._getLinkerUrl = function(a) { + return a; + }; + return out; + })(); + // + var Gat = function() { + ; + }; + Gat.prototype._anonymizeIP = noopfn; + Gat.prototype._createTracker = noopfn; + Gat.prototype._forceSSL = noopfn; + Gat.prototype._getPlugin = noopfn; + Gat.prototype._getTracker = function() { + return tracker; + }; + Gat.prototype._getTrackerByName = function() { + return tracker; + }; + Gat.prototype._getTrackers = noopfn; + Gat.prototype.aa = noopfn; + Gat.prototype.ab = noopfn; + Gat.prototype.hb = noopfn; + Gat.prototype.la = noopfn; + Gat.prototype.oa = noopfn; + Gat.prototype.pa = noopfn; + Gat.prototype.u = noopfn; + var gat = new Gat(); + window._gat = gat; + // + var gaq = new Gaq(); + (function() { + var aa = window._gaq || []; + if ( Array.isArray(aa) ) { + while ( aa[0] ) { + gaq.push(aa.shift()); + } + } + })(); + window._gaq = gaq.qf = gaq; + } + ')();', + + // https://github.com/gorhill/uBlock/issues/1265 + // https://github.com/uBlockOrigin/uAssets/blob/581f2c93eeca0e55991aa331721b6942f3162615/filters/resources.txt#L736-L746 + /* eslint-disable no-undef */ + '/beacon.js': '(' + + function() { + window.COMSCORE = { + purge: function() { + _comscore = []; + }, + beacon: function() { + ; + } + }; + } + ')();', + /* eslint-enable no-undef */ + + // http://www.dplay.se/ett-jobb-for-berg/ (videos) + '/c2/plugins/streamsense_plugin_html5.js': '(' + + function() { + } + ')();', + + // https://github.com/EFForg/privacybadger/issues/993 + // https://github.com/uBlockOrigin/uAssets/blob/2bc97541b3b9a9380b3ce8bd2242375925df293c/filters/resources.txt#L436-L567 + /* eslint-disable no-empty */ + '/gpt.js': '(' + + function() { + var p; + // https://developers.google.com/doubleclick-gpt/reference + var noopfn = function() { + ; + }.bind(); + var noopthisfn = function() { + return this; + }; + var noopnullfn = function() { + return null; + }; + var nooparrayfn = function() { + return []; + }; + var noopstrfn = function() { + return ''; + }; + // + var companionAdsService = { + addEventListener: noopthisfn, + enableSyncLoading: noopfn, + setRefreshUnfilledSlots: noopfn + }; + var contentService = { + addEventListener: noopthisfn, + setContent: noopfn + }; + var PassbackSlot = function() { + ; + }; + p = PassbackSlot.prototype; + p.display = noopfn; + p.get = noopnullfn; + p.set = noopthisfn; + p.setClickUrl = noopthisfn; + p.setTagForChildDirectedTreatment = noopthisfn; + p.setTargeting = noopthisfn; + p.updateTargetingFromMap = noopthisfn; + var pubAdsService = { + addEventListener: noopthisfn, + clear: noopfn, + clearCategoryExclusions: noopthisfn, + clearTagForChildDirectedTreatment: noopthisfn, + clearTargeting: noopthisfn, + collapseEmptyDivs: noopfn, + defineOutOfPagePassback: function() { return new PassbackSlot(); }, + definePassback: function() { return new PassbackSlot(); }, + disableInitialLoad: noopfn, + display: noopfn, + enableAsyncRendering: noopfn, + enableSingleRequest: noopfn, + enableSyncRendering: noopfn, + enableVideoAds: noopfn, + get: noopnullfn, + getAttributeKeys: nooparrayfn, + getTargeting: noopfn, + getTargetingKeys: nooparrayfn, + getSlots: nooparrayfn, + refresh: noopfn, + set: noopthisfn, + setCategoryExclusion: noopthisfn, + setCentering: noopfn, + setCookieOptions: noopthisfn, + setForceSafeFrame: noopthisfn, + setLocation: noopthisfn, + setPublisherProvidedId: noopthisfn, + setRequestNonPersonalizedAds: noopthisfn, + setSafeFrameConfig: noopthisfn, + setTagForChildDirectedTreatment: noopthisfn, + setTargeting: noopthisfn, + setVideoContent: noopthisfn, + updateCorrelator: noopfn + }; + var SizeMappingBuilder = function() { + ; + }; + p = SizeMappingBuilder.prototype; + p.addSize = noopthisfn; + p.build = noopnullfn; + var Slot = function() { + ; + }; + p = Slot.prototype; + p.addService = noopthisfn; + p.clearCategoryExclusions = noopthisfn; + p.clearTargeting = noopthisfn; + p.defineSizeMapping = noopthisfn; + p.get = noopnullfn; + p.getAdUnitPath = nooparrayfn; + p.getAttributeKeys = nooparrayfn; + p.getCategoryExclusions = nooparrayfn; + p.getDomId = noopstrfn; + p.getSlotElementId = noopstrfn; + p.getSlotId = noopthisfn; + p.getTargeting = nooparrayfn; + p.getTargetingKeys = nooparrayfn; + p.set = noopthisfn; + p.setCategoryExclusion = noopthisfn; + p.setClickUrl = noopthisfn; + p.setCollapseEmptyDiv = noopthisfn; + p.setTargeting = noopthisfn; + // + var gpt = window.googletag || {}; + var cmd = gpt.cmd || []; + gpt.apiReady = true; + gpt.cmd = []; + gpt.cmd.push = function(a) { + try { + a(); + } catch (ex) { + } + return 1; + }; + gpt.companionAds = function() { return companionAdsService; }; + gpt.content = function() { return contentService; }; + gpt.defineOutOfPageSlot = function() { return new Slot(); }; + gpt.defineSlot = function() { return new Slot(); }; + gpt.destroySlots = noopfn; + gpt.disablePublisherConsole = noopfn; + gpt.display = noopfn; + gpt.enableServices = noopfn; + gpt.getVersion = noopstrfn; + gpt.pubads = function() { return pubAdsService; }; + gpt.pubadsReady = true; + gpt.setAdIframeTitle = noopfn; + gpt.sizeMapping = function() { return new SizeMappingBuilder(); }; + window.googletag = gpt; + while ( cmd.length !== 0 ) { + gpt.cmd.push(cmd.shift()); + } + } + ')();', + /* eslint-enable no-empty */ + + // https://github.com/EFForg/privacybadger/issues/1014 + /* eslint-disable no-unused-expressions */ + '/app/yqmin': '(' + + function() { + var noopfn = function() { + ; + }; + function YqClass() { + this.observe = noopfn; + this.observeMin = noopfn; + this.scroll_event = noopfn; + this.onready = noopfn; + this.yq_panel_click = noopfn; + this.titleTrim = noopfn; + } + window.Yq || (window.Yq = new YqClass); + } + ')();', + /* eslint-enable no-unused-expressions */ + + // https://github.com/uBlockOrigin/uAssets/blob/0e225402b40db0983faf8b4ce13c73d57fb257d7/filters/resources.txt#L354-L403 + /* eslint-disable no-empty */ + '/analytics.js': '(' + + function() { + // https://developers.google.com/analytics/devguides/collection/analyticsjs/ + var noopfn = function() { + ; + }; + var noopnullfn = function() { + return null; + }; + // + var Tracker = function() { + ; + }; + var p = Tracker.prototype; + p.get = noopfn; + p.set = noopfn; + p.send = noopfn; + // + var w = window, + gaName = w.GoogleAnalyticsObject || 'ga'; + var ga = function() { + var len = arguments.length; + if ( len === 0 ) { + return; + } + var f = arguments[len-1]; + if ( typeof f !== 'object' || f === null || typeof f.hitCallback !== 'function' ) { + return; + } + try { + f.hitCallback(); + } catch (ex) { + } + }; + ga.create = function() { + return new Tracker(); + }; + ga.getByName = noopnullfn; + ga.getAll = function() { + return []; + }; + ga.remove = noopfn; + // https://github.com/uBlockOrigin/uAssets/issues/2107 + ga.loaded = true; + w[gaName] = ga; + // https://github.com/gorhill/uBlock/issues/3075 + var dl = w.dataLayer; + if ( dl instanceof Object && dl.hide instanceof Object && typeof dl.hide.end === 'function' ) { + dl.hide.end(); + } + } + ')();', + /* eslint-enable no-empty */ + + // https://github.com/uBlockOrigin/uAssets/blob/d7d4836638dcf227938b4cead66ad9d01b6166ba/filters/resources.txt#L843-L868 + '/outbrain.js': '(' + + function() { + var noopfn = function() { + ; + }; + var obr = {}; + var methods = [ + 'callClick', 'callLoadMore', 'callRecs', 'callUserZapping', + 'callWhatIs', 'cancelRecommendation', 'cancelRecs', 'closeCard', + 'closeModal', 'closeTbx', 'errorInjectionHandler', 'getCountOfRecs', + 'getStat', 'imageError', 'manualVideoClicked', 'onOdbReturn', + 'onVideoClick', 'pagerLoad', 'recClicked', 'refreshSpecificWidget', + 'refreshWidget', 'reloadWidget', 'researchWidget', 'returnedError', + 'returnedHtmlData', 'returnedIrdData', 'returnedJsonData', 'scrollLoad', + 'showDescription', 'showRecInIframe', 'userZappingMessage', 'zappingFormAction' + ]; + obr.extern = { + video: { + getVideoRecs: noopfn, + videoClicked: noopfn + } + }; + methods.forEach(function(a) { + obr.extern[a] = noopfn; + }); + window.OBR = window.OBR || obr; + } + ')();', + + // https://github.com/uBlockOrigin/uAssets/blob/0efcadb2ecc2a9f0daa5a1df79841d794b83860f/filters/resources.txt#L38-L41 + 'noopjs': '(' + + function() { + ; + } + ')();', + + /* eslint-enable no-extra-semi, space-in-parens */ +}; + +// aliases +// for example: +// surrogates['/JS/socialize.js'] = surrogates['/JS/gigya.js'] = surrogates['/js/gigya.js']; + +// reformat surrogate strings to exactly match formatting in uAssets +Object.keys(surrogates).forEach(key => { + surrogates[key] = surrogates[key] + // remove space from anon function if present + .replace(/^\(function \(/, '(function(') + // fix indentation + .split(/[\r\n]/).map(str => str.replace(/^ {4}/, '')).join('\n') + // replace spaces by tabs + .replace(/ {2}/g, '\t'); +}); + +const exports = { + hostnames: hostnames, + surrogates: surrogates, +}; + +return exports; +})(); diff --git a/src/data/yellowlist.txt b/src/data/yellowlist.txt new file mode 100644 index 0000000..935a75c --- /dev/null +++ b/src/data/yellowlist.txt @@ -0,0 +1,788 @@ +nosdn.127.net +bnet.163.com +122.2o7.net +112.2o7.net +acast.com +accuweather.com +actionnetwork.org +imagesrv.adition.com +auth.adobe.com +wwwimages.adobe.com +xsdownload.adobe.com +assets.adobedtm.com +adyen.com +affirm.com +akamai.net +akamaihd.net +akamaized.net +alexa.com +alicdn.com +ally.com +amazon.com +s3.amazonaws.com +amazonaws.com +coin.amazonpay.com +coin-eu.amazonpay.com +americanexpress.com +amuniversal.com +ancestry.com +angularjs.org +up.anv.bz +anvato.net +tkx-acc.apis.anvato.net +cdn.anvato.net +tkx2-prod.anvato.net +mcp-media5.anvato.net +aol.com +aolcdn.com +ap.org +apnewsregistry.com +apple.com +hiroservers.appspot.com +snapabug.appspot.com +appspot.com +arcgis.com +arcgisonline.com +archive.org +secure5.arcot.com +arcot.com +arcpublishing.com +arkoselabs.com +cdn.arstechnica.net +art19.com +aspnetcdn.com +c64.assets-yammer.com +assetfiles.com +assets-cdk.com +auth0.com +authorize.net +azureedge.net +bac-assets.com +hiphotos.baidu.com +imgsa.baidu.com +imgsrc.baidu.com +api.map.baidu.com +sapi.map.baidu.com +bandcamp.com +bankid.no +bankrate.com +secure.barclaycard.co.uk +verifiedbyvisa.barclays.co.uk +bazaarvoice.com +bcbits.com +maponline0.bdimg.com +maponline1.bdimg.com +maponline2.bdimg.com +maponline3.bdimg.com +betterttv.net +static.beyondmenu.com +www.beyondmenu.com +bigcommerce.com +www.bing.com +bit.ly +bizrate.com +blockstack.org +blogblog.com +blogger.com +blogspot.com +bp.blogspot.com +bloxcms.com +boldchat.com +bootstrapcdn.com +braintreegateway.com +brcdn.com +breakingburner.com +brightcove.com +players.brightcove.net +bungie.net +buzzfed.com +buzzfeed.com +cachefly.net +calendly.com +cardinalcommerce.com +cbsi.com +cbsimg.net +cbsistatic.com +cdninstagram.com +cdnpk.com +cern.ch +ceros.com +charter.com +pwc.chase.com +civicscience.com +cleanprint.net +cleveland.com +cloudflare.com +cloudfront.net +cloudinary.com +bbb.org +bbc.co.uk +bbci.co.uk +w.graphiq.com +s.graphiq.com +s2.graphiq.com +s3.graphiq.com +files.graphiq.com +gr-assets.com +guardian.co.uk +media-imdb.com +mediaworks.co.nz +cc.cnetcontent.com +cdn.cnetcontent.com +ws.cnetcontent.com +codepen.io +codesandbox.io +cloudplatform.coveo.com +platform.cloud.coveo.com +static.cloud.coveo.com +creativecommons.org +cstv.com +cursecdn.com +custhelp.com +d3js.org +dailymotion.com +danid.dk +dealer.com +dealerinspire.com +delicious.com +delvenetworks.com +deviantart.com +deviantart.net +digitalriver.com +digitalrivercontent.net +cdn.discourse.org +discovery.com +disquscdn.com +dmcdn.net +dmcdn.com +screendoor.dobt.co +documentcloud.org +donorbox.org +cdn.dopc.cz +dotsub.com +dl.dropboxusercontent.com +dumpert.nl +duosecurity.com +cdn.dynamicyield.com +cdn-eu.dynamicyield.com +rcom.dynamicyield.com +rcom-eu.dynamicyield.com +static.dynamicyield.com +st.dynamicyield.com +st-eu.dynamicyield.com +ebay.com +ebayimg.com +ebayrtm.com +ebaystatic.com +ecwid.com +edgecastcdn.net +edgefcs.net +edgekey.net +editmysite.com +files.edx.org +ehc.com +elasticbeanstalk.com +eltrafiko.com +api-cdn.embed.ly +api.embed.ly +cdn.embed.ly +cdn.embedly.com +i-cdn.embed.ly +i.embed.ly +pp.ephapay.net +epoch.com +epoq.de +et4.de +ethn.io +evcdn.com +eventbrite.com +everyaction.com +s-static.ak.facebook.com +staticxx.facebook.com +www.facebook.com +fansonly.com +travis-ci-org.global.ssl.fastly.net +fastly.net +fbcdn.net +attachment.fbsbx.com +feedburner.com +filepicker.io +filestackapi.com +financialcontent.com +findnsave.com +firstlook.org +flipcause.com +framasoft.org +frankerfacez.com +freshchat.com +frz.io +build.origami.ft.com +fz.io +fzcdn.net +hello.firefox.com +flattr.com +flickr.com +fling.com +flo.uri.sh +flowplayer.org +flyertown.ca +adm.fwmrm.net +fontawesome.com +fontdeck.com +fonts.com +fonts.net +force.com +formstack.com +fuseservice.com +140cc.v.fwmrm.net +fyre.co +gannett-cdn.com +gannettonline.com +gannett-tv.com +gasbuddy.com +geenstijl.nl +geetest.com +geoplugin.net +geotrust.com +getpocket.com +giant.gfycat.com +gfycat.com +ggpht.com +gigya.com +giphy.com +gitbook.com +github.com +githubusercontent.com +gmodules.com +godatafeed.com +gogousenet.com +accounts.google.com +apis.google.com +books.google.com +calendar.google.com +checkout.google.com +clients1.google.com +clients6.google.com +consent.google.com +cse.google.com +datastudio.google.com +developers.google.com +docs.google.com +drive.google.com +feedburner.google.com +feedproxy.google.com +fonts.google.com +fusiontables.google.com +groups.google.com +kh.google.com +khms0.google.com +khms1.google.com +khms2.google.com +khms3.google.com +khms4.google.com +labs.google.com +maps-api-ssl.google.com +mapsengine.google.com +maps.google.com +mt0.google.com +mt1.google.com +mts0.google.com +mts1.google.com +mw1.google.com +mw2.google.com +pay.google.com +picasaweb.google.com +play.google.com +sites.google.com +smartlock.google.com +spreadsheets.google.com +talkgadget.google.com +translate.google.com +trends.google.com +video.google.com +www.google.com +ajax.googleapis.com +storage.googleapis.com +googleapis.com +googlecode.com +googlecommerce.com +googletagservices.com +cdn.leafletjs.com +lh4.googleusercontent.com +googleusercontent.com +googlevideo.com +governmentjobs.com +gravatar.com +greenhouse.io +rest.growinginteractive.com +gscdn.nl +gstatic.com +guildwars2.com +hackerone-user-content.com +hcaptcha.com +helium.com +herokuapp.com +code.highcharts.com +homestead.com +cdn.hometogo.net +cdn2.hometogo.net +hootsuite.com +api.hubspot.com +app.hubspot.com +cta-service-cms2.hubspot.com +forms.hubspot.com +js.hubspot.com +meetings.hubspot.com +no-cache.hubspot.com +static.hubspot.com +cdn2.hubspot.net +humblebundle.com +hwcdn.net +hypothes.is +ibsys.com +icbdr.com +mpsnare.iesnare.com +imagecorn.com +imageg.net +imagehost123.com +images-amazon.com +imageshack.us +imagetwist.com +imagevenue.com +imbox.io +www.img-bahn.de +imgchili.com +imgfarm.com +imgspice.com +imgur.com +imgix.net +imshopping.com +inergizedigital.com +inq.com +inscloudgate.net +instagram.com +instantservice.com +instapaper.com +instructure.com +intellicast.com +intensedebate.com +intercom.io +members.internetdefenseleague.org +investingchannel.com +script.ioam.de +issuu.com +iubenda.com +janrain.com +jquery.com +jquerytools.org +jsdelivr.net +jsonip.com +jtvnw.net +justin.tv +jwpcdn.com +content.jwplatform.com +cdn.jwplayer.com +entitlements.jwplayer.com +jwpltx.com +jwpsrv.com +cdnapi.kaltura.com +cdnapisec.kaltura.com +cdnbakmi.kaltura.com +cdnsecakmi.kaltura.com +cfvod.kaltura.com +www.kaltura.com +kampyle.com +kataweb.it +kickapps.com +kickstarter.com +kickstatic.com +kingfeatures.com +kinja.com +kinja-static.com +klarna.com +klarnacdn.net +klm.com +kxcdn.com +ddragon.leagueoflegends.com +libsyn.com +licdn.com +licensebuttons.net +addon.lidl.de +media.lidl.com +linkwithin.com +list-manage.com +i.lithium.com +messenger.live.com +officeapps.live.com +onedrive.live.com +livechatinc.com +livefyre.com +livehelpnow.net +liveperson.net +livestream.com +llnwd.net +loggly.com +logos.com +lphbs.com +mail.ru +mailchimp.com +mapbox.com +mapquestapi.com +marketo.com +masslive.com +mathjax.org +matterport.com +maxmind.com +mcclatchyinteractive.com +meebocdn.net +megaphone.fm +mfstatic.cz +microsoft.com +microsoftonline.com +microsofttranslator.com +mixcloud.com +mlive.com +mncdn.com +mobify.com +verify.monzo.com +loop.services.mozilla.com +mozilla.net +mozilla.org +mozu.com +mqcdn.com +msecnd.net +msn.com +mtv.com +mtvnservices.com +mycapture.com +myportfolio.com +myshopify.com +mzstatic.com +nanorep.co +nationbuilder.com +nationalgeographic.com +nbcuni.com +neighborsink.com +netdna-cdn.com +netdna-ssl.com +nos.netease.com +netflix.com +networksolutions.com +newsinc.com +newslook.com +newstogram.com +nextcloud.com +nextopiasoftware.com +nfl.com +nflcdn.com +assets.nflxext.com +cdn3.nflxext.com +nflxext.com +ngfiles.com +ngpvan.com +nj.com +nmcdn.us +nola.com +npmcdn.com +nrcdn.com +nsimg.net +media.nu.nl +nyt.com +nytimes.com +c.o0bg.com +ocdn.eu +ocsn.com +okta.com +olark.com +omroep.nl +amazoncustomerservice.d2.sc.omtrdc.net +omny.fm +attservicesinc.tt.omtrdc.net +dsw.tt.omtrdc.net +onswipe.com +api.ooyala.com +c.ooyala.com +l.ooyala.com +opf.ooyala.com +player.ooyala.com +secure-cf-c.ooyala.com +tile.opencyclemap.org +tile2.opencyclemap.org +opendesktop.org +openlayers.org +openlibrary.org +openload.co +tile.openstreetmap.fr +openstreetmap.org +optimizely.com +oregonlive.com +outlook.com +paddle.com +pandacommerce.net +parastorage.com +passwordbox.com +payments-amazon.com +paypal.com +paypalobjects.com +pdf.yt +pennlive.com +performgroup.com +pgcdn.com +phncdn.com +photobucket.com +phplist.com +piclens.com +pinimg.com +piratebay.org +pistachio-cdn.graze.com +pixietrixcomix.com +plex.tv +pling.com +plot.ly +web.poecdn.com +poll.fm +polldaddy.com +postimg.cc +postimg.org +powerreviews.com +pricegrabber.com +printfriendly.com +prismic.io +providesupport.com +psswrdbx.com +publiekeomroep.nl +img.purch.com +captcha.qq.com +photo.store.qq.com +qualtrics.com +queue-it.net +quotemedia.com +api.razorpay.com +checkout.razorpay.com +razorpay.com +rackcdn.com +rackspacecloud.com +radikal.ru +radiofrance.fr +rambler.ru +images.rapgenius.com +readability.com +readthedocs.org +recaptcha.net +recurly.com +redcdn.pl +reddit.com +redditmedia.com +redditstatic.com +redefine.pl +cdngeneral.rentcafe.com +resultspage.com +rewardstyle.com +rpxnow.com +rssinclude.com +sagepay.com +salesforce.com +salesforceliveagent.com +salsalabs.com +salsalabs.org +sbnation.com +scene7.com +schd.ws +sched.org +schibsted.com +schibsted.io +schibsted.no +schibsted.tech +scribblelive.com +scribd.com +scribdassets.com +www.searchanise.com +securesuite.co.uk +securitymetrics.com +seeclickfix.com +sgizmo.com +shopify.com +shopping.com +shop-pro.jp +shoprunner.com +sidearmsports.com +siteimprove.com +shield.sitelock.com +sketchfab.com +slidedeck.com +public.slidesharecdn.com +s-msft.com +s-msn.com +smugmug.com +snapengage.com +sndcdn.com +snipcart.com +auth.api.sonyentertainmentnetwork.com +cdn-a.sonyentertainmentnetwork.com +api.soundcloud.com +feeds.soundcloud.com +sp-prod.net +spot.im +springboardplatform.com +squarespace.com +squareup.com +squirt.io +ssl-images-amazon.com +cdn.sstatic.net +sstatic.net +stackexchange.com +stackoverflow.com +staticamzn.com +cdn.static-economist.com +staticflickr.com +steampowered.com +store.akamai.steamstatic.com +steamusercontent.com +stripe.com +m.stripe.network +stripecdn.com +surveygizmo.com +surveymonkey.com +swiftype.com +public.tableau.com +public.tableausoftware.com +c.tadst.com +taleo.net +uploads.tapatalk-cdn.com +targetimg1.com +targetimg2.com +tawk.to +technorati.com +tegna-media.com +textalk.se +theplatform.com +tile.thunderforest.com +timeinc.net +tinypass.com +tinypic.com +tinyurl.com +tiqcdn.com +torbit.com +townnews.com +cookieblock.trackersimulate.org +tradingview.com +trb.com +trbimg.com +trumba.com +privacy-policy.truste.com +trustkeeper.net +trustpilot.com +trustwave.com +ttvnw.net +tumblr.com +turner.com +turnto.com +twimg.com +api.twisto.cz +static.twisto.cz +api.twisto.pl +twitch.tv +twitter.com +platform.twitter.com +syndication.twitter.com +typeform.com +typekit.com +typekit.net +typepad.com +typography.com +assets.ubuntu.com +uicdn.com +ui-portal.de +ultimedia.com +ultraimg.com +unicornmedia.com +unsplash.com +uplynk.com +usa.gov +viafoura.net +viddler.com +videobash.com +videodelivery.net +vidible.tv +viduki.com +vidyard.com +vimeo.com +vimeocdn.com +virtualearth.net +visa.com +vmixcore.com +voxmedia.com +vox-cdn.com +w3.org +wallst.com +weather.com +weather.gov +weatherbug.com +weathernationtv.com +weatherzone.com.au +webflow.com +webs.com +websimages.com +website-start.de +webtype.com +weebly.com +where.com +widgetserver.com +wikidata.org +wikimedia.org +wikipedia.org +wildapricot.org +windows.net +windy.com +wishabi.com +wistia.net +wistia.com +wix.com +wixapps.net +gatherer.wizards.com +s.w.org +ts.w.org +ps.w.org +wnyc.org +woosmap.com +wordpress.com +worldnow.com +wp.com +wpengine.com +wufoo.com +wxc.com +wxug.com +y3.analytics.yahoo.com +pipes.yahoo.com +search.yahoo.com +yahoo.net +yahooapis.com +api-maps.yandex.ru +img-fotki.yandex.ru +yardbarker.com +yastatic.net +yellowpages.com +seatme.yelp.com +yelpcdn.com +yimg.com +yimg.jp +yotpo.com +yottaa.net +youku.com +youtube.com +youtube-nocookie.com +youwatch.org +ytimg.com +zdassets.com +zencdn.net +zendesk.com +ziplist.com +zlcdn.com +zoho.com +zoho.eu +zohopublic.com +zohostatic.com +zombaio.com +zope.net +zopim.com +zvents.com diff --git a/src/icons/UI-icons-green.svg b/src/icons/UI-icons-green.svg new file mode 100644 index 0000000..222a17c --- /dev/null +++ b/src/icons/UI-icons-green.svg @@ -0,0 +1,10 @@ + + + + UI-icons-green + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/icons/UI-icons-red.svg b/src/icons/UI-icons-red.svg new file mode 100644 index 0000000..5f4a6c3 --- /dev/null +++ b/src/icons/UI-icons-red.svg @@ -0,0 +1,10 @@ + + + + UI-icons-red + Created with Sketch. + + + + + \ No newline at end of file diff --git a/src/icons/UI-icons-yellow.svg b/src/icons/UI-icons-yellow.svg new file mode 100644 index 0000000..820b289 --- /dev/null +++ b/src/icons/UI-icons-yellow.svg @@ -0,0 +1,17 @@ + + + + UI-icons-yellow + Created with Sketch. + + + + + + + + + + + + \ No newline at end of file diff --git a/src/icons/badger-128.png b/src/icons/badger-128.png new file mode 100644 index 0000000..e64b654 Binary files /dev/null and b/src/icons/badger-128.png differ diff --git a/src/icons/badger-16.png b/src/icons/badger-16.png new file mode 100644 index 0000000..d884068 Binary files /dev/null and b/src/icons/badger-16.png differ diff --git a/src/icons/badger-19-disabled.png b/src/icons/badger-19-disabled.png new file mode 100644 index 0000000..1f0ba91 Binary files /dev/null and b/src/icons/badger-19-disabled.png differ diff --git a/src/icons/badger-19.png b/src/icons/badger-19.png new file mode 100644 index 0000000..f4febe4 Binary files /dev/null and b/src/icons/badger-19.png differ diff --git a/src/icons/badger-38-disabled.png b/src/icons/badger-38-disabled.png new file mode 100644 index 0000000..ca84697 Binary files /dev/null and b/src/icons/badger-38-disabled.png differ diff --git a/src/icons/badger-38.png b/src/icons/badger-38.png new file mode 100644 index 0000000..e839104 Binary files /dev/null and b/src/icons/badger-38.png differ diff --git a/src/icons/badger-48.png b/src/icons/badger-48.png new file mode 100644 index 0000000..57ba776 Binary files /dev/null and b/src/icons/badger-48.png differ diff --git a/src/icons/badger-64.png b/src/icons/badger-64.png new file mode 100644 index 0000000..f51708a Binary files /dev/null and b/src/icons/badger-64.png differ diff --git a/src/icons/badger-bw-noborder.svg b/src/icons/badger-bw-noborder.svg new file mode 100644 index 0000000..799daef --- /dev/null +++ b/src/icons/badger-bw-noborder.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/icons/badger-pin.png b/src/icons/badger-pin.png new file mode 100644 index 0000000..cbfe7ec Binary files /dev/null and b/src/icons/badger-pin.png differ diff --git a/src/icons/dnt-16.png b/src/icons/dnt-16.png new file mode 100644 index 0000000..840b047 Binary files /dev/null and b/src/icons/dnt-16.png differ diff --git a/src/icons/help.svg b/src/icons/help.svg new file mode 100644 index 0000000..e034e5e --- /dev/null +++ b/src/icons/help.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/icons/options.svg b/src/icons/options.svg new file mode 100644 index 0000000..6d0ca67 --- /dev/null +++ b/src/icons/options.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/icons/share.svg b/src/icons/share.svg new file mode 100644 index 0000000..8b26a62 --- /dev/null +++ b/src/icons/share.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/js/background.js b/src/js/background.js new file mode 100644 index 0000000..6cdee4c --- /dev/null +++ b/src/js/background.js @@ -0,0 +1,1148 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Derived from Adblock Plus + * Copyright (C) 2006-2013 Eyeo GmbH + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/* globals log:false */ + +var utils = require("utils"); +var constants = require("constants"); +var pbStorage = require("storage"); + +var HeuristicBlocking = require("heuristicblocking"); +var FirefoxAndroid = require("firefoxandroid"); +var webrequest = require("webrequest"); +var widgetLoader = require("widgetloader"); + +var Migrations = require("migrations").Migrations; +var incognito = require("incognito"); + +/** + * Privacy Badger initializer. + */ +function Badger() { + let self = this; + + self.isFirstRun = false; + self.isUpdate = false; + + self.webRTCAvailable = checkWebRTCBrowserSupport(); + self.firstPartyDomainPotentiallyRequired = testCookiesFirstPartyDomain(); + + self.widgetList = []; + let widgetListPromise = widgetLoader.loadWidgetsFromFile( + "data/socialwidgets.json").catch(console.error); + widgetListPromise.then(widgets => { + self.widgetList = widgets; + }); + + self.storage = new pbStorage.BadgerPen(async function (thisStorage) { + self.initializeSettings(); + // Privacy Badger settings are now fully ready + + self.setPrivacyOverrides(); + + self.heuristicBlocking = new HeuristicBlocking.HeuristicBlocker(thisStorage); + + // TODO there are async migrations + // TODO is this the right place for migrations? + self.runMigrations(); + + // kick off async initialization steps + let seedDataPromise = self.loadFirstRunSeedData().catch(console.error), + ylistPromise = self.initializeYellowlist().catch(console.error), + dntHashesPromise = self.initializeDnt().catch(console.error), + tabDataPromise = self.updateTabList().catch(console.error); + + // set badge text color to white in Firefox 63+ + // https://bugzilla.mozilla.org/show_bug.cgi?id=1474110 + // https://bugzilla.mozilla.org/show_bug.cgi?id=1424620 + if (chrome.browserAction.hasOwnProperty('setBadgeTextColor')) { + chrome.browserAction.setBadgeTextColor({ color: "#fff" }); + } + + // Show icon as page action for all tabs that already exist + chrome.tabs.query({}, function (tabs) { + for (let i = 0; i < tabs.length; i++) { + let tab = tabs[i]; + self.updateIcon(tab.id, tab.url); + } + }); + + // wait for async functions (seed data, yellowlist, ...) to resolve + await widgetListPromise; + await seedDataPromise; + await ylistPromise; + await dntHashesPromise; + await tabDataPromise; + + // block all widget domains + // only need to do this when the widget list could have gotten updated + if (badger.isFirstRun || badger.isUpdate) { + self.blockWidgetDomains(); + } + + // start the listeners + incognito.startListeners(); + webrequest.startListeners(); + HeuristicBlocking.startListeners(); + FirefoxAndroid.startListeners(); + startBackgroundListeners(); + + console.log("Privacy Badger is ready to rock!"); + console.log("Set DEBUG=1 to view console messages."); + self.INITIALIZED = true; + + // get the latest yellowlist from eff.org + self.updateYellowlist(err => { + if (err) { + console.error(err); + } + }); + // set up periodic fetching of the yellowlist from eff.org + setInterval(self.updateYellowlist.bind(self), utils.oneDay()); + + // get the latest DNT policy hashes from eff.org + self.updateDntPolicyHashes(err => { + if (err) { + console.error(err); + } + }); + // set up periodic fetching of hashes from eff.org + setInterval(self.updateDntPolicyHashes.bind(self), utils.oneDay() * 4); + + if (self.isFirstRun) { + self.showFirstRunPage(); + } + }); + + /** + * WebRTC availability check + */ + function checkWebRTCBrowserSupport() { + if (!(chrome.privacy && chrome.privacy.network && + chrome.privacy.network.webRTCIPHandlingPolicy)) { + return false; + } + + var available = true; + var connection = null; + + try { + var RTCPeerConnection = ( + window.RTCPeerConnection || window.webkitRTCPeerConnection + ); + if (RTCPeerConnection) { + connection = new RTCPeerConnection(null); + } + } catch (ex) { + available = false; + } + + if (connection !== null && connection.close) { + connection.close(); + } + + return available; + } + + /** + * Checks for availability of firstPartyDomain chrome.cookies API parameter. + * https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies/getAll#Parameters + * + * firstPartyDomain is required when privacy.websites.firstPartyIsolate is enabled, + * and is in Firefox since Firefox 59. (firstPartyIsolate is in Firefox since 58). + * + * We don't care whether firstPartyIsolate is enabled, but rather whether + * firstPartyDomain is supported. Assuming firstPartyDomain is supported, + * setting it to null in chrome.cookies.getAll() produces the same result + * regardless of the state of firstPartyIsolate. + * + * firstPartyDomain is not currently supported in Chrome. + */ + function testCookiesFirstPartyDomain() { + try { + chrome.cookies.getAll({ + firstPartyDomain: null + }, function () {}); + } catch (ex) { + return false; + } + return true; + } + +} + +Badger.prototype = { + INITIALIZED: false, + + /** + * Per-tab data that gets cleaned up on tab closing looks like: + tabData = { + : { + blockedFrameUrls: { + : [ + {String} blocked frame URL, + ... + ], + ... + }, + fpData: { + : { + canvas: { + fingerprinting: boolean, + write: boolean + } + }, + ... + }, + frames: { + : { + url: string, + host: string, + parent: int + }, + ... + }, + origins: { + domain.tld: {String} action taken for this domain + ... + } + }, + ... + } + */ + tabData: {}, + + + // Methods + + /** + * Sets various browser privacy overrides. + */ + setPrivacyOverrides: function () { + if (!chrome.privacy) { + return; + } + + let self = this; + + /** + * Sets a browser setting if Privacy Badger is allowed to set it. + */ + function _set_override(name, api, value) { + if (!api) { + return; + } + api.get({}, result => { + if (result.levelOfControl != "controllable_by_this_extension") { + return; + } + api.set({ + value, + scope: 'regular' + }, () => { + if (chrome.runtime.lastError) { + console.error("Privacy setting failed:", chrome.runtime.lastError); + } else { + console.log("Set", name, "to", value); + } + }); + }); + } + + if (self.getSettings().getItem("disableGoogleNavErrorService")) { + if (chrome.privacy.services) { + _set_override( + "alternateErrorPagesEnabled", + chrome.privacy.services.alternateErrorPagesEnabled, + false + ); + } + } + + if (self.getSettings().getItem("disableHyperlinkAuditing")) { + if (chrome.privacy.websites) { + _set_override( + "hyperlinkAuditingEnabled", + chrome.privacy.websites.hyperlinkAuditingEnabled, + false + ); + } + } + }, + + /** + * Loads seed dataset with pre-trained action and snitch maps. + * @param {Function} cb callback + */ + loadSeedData: function (cb) { + let self = this; + + utils.xhrRequest(constants.SEED_DATA_LOCAL_URL, function (err, response) { + if (err) { + return cb(new Error("Failed to fetch seed data")); + } + + let data; + try { + data = JSON.parse(response); + } catch (e) { + console.error(e); + return cb(new Error("Failed to parse seed data JSON")); + } + + self.mergeUserData(data, true); + log("Loaded seed data successfully"); + return cb(null); + }); + }, + + /** + * Loads seed data upon first run. + * + * @returns {Promise} + */ + loadFirstRunSeedData: function () { + let self = this; + + return new Promise(function (resolve, reject) { + if (!self.isFirstRun) { + log("No need to load seed data"); + return resolve(); + } + + self.loadSeedData(err => { + log("Seed data loaded! (err=%o)", err); + return (err ? reject(err) : resolve()); + }); + }); + }, + + showFirstRunPage: function() { + let settings = this.getSettings(); + if (settings.getItem("showIntroPage")) { + chrome.tabs.create({ + url: chrome.runtime.getURL("/skin/firstRun.html") + }); + } else { + // don't remind users to look at the intro page either + settings.setItem("seenComic", true); + } + }, + + /** + * Blocks all widget domains + * to ensure that all widgets that could get replaced + * do get replaced by default for all users. + */ + blockWidgetDomains: function () { + let self = this; + + // compile set of widget domains + let domains = new Set(); + for (let widget of self.widgetList) { + for (let domain of widget.domains) { + if (domain[0] == "*") { + domain = domain.slice(2); + } + domains.add(domain); + } + } + + // block the domains + for (let domain of domains) { + self.heuristicBlocking.blocklistOrigin( + window.getBaseDomain(domain), domain); + } + }, + + /** + * Saves a user preference for an origin, overriding the default setting. + * + * @param {String} userAction enum of block, cookieblock, noaction + * @param {String} origin the third party origin to take action on + */ + saveAction: function(userAction, origin) { + var allUserActions = { + block: constants.USER_BLOCK, + cookieblock: constants.USER_COOKIEBLOCK, + allow: constants.USER_ALLOW + }; + this.storage.setupUserAction(origin, allUserActions[userAction]); + log("Finished saving action " + userAction + " for " + origin); + }, + + /** + * Populate tabs object with currently open tabs when extension is updated or installed. + * + * @returns {Promise} + */ + updateTabList: function () { + let self = this; + + return new Promise(function (resolve) { + chrome.tabs.query({}, tabs => { + tabs.forEach(tab => { + // don't record on special browser pages + if (!utils.isRestrictedUrl(tab.url)) { + self.recordFrame(tab.id, 0, tab.url); + } + }); + resolve(); + }); + }); + }, + + /** + * Generate representation in internal data structure for frame + * + * @param {Integer} tabId ID of the tab + * @param {Integer} frameId ID of the frame + * @param {String} frameUrl The url of the frame + */ + recordFrame: function(tabId, frameId, frameUrl) { + let self = this; + + if (!self.tabData.hasOwnProperty(tabId)) { + self.tabData[tabId] = { + blockedFrameUrls: {}, + frames: {}, + origins: {} + }; + } + + self.tabData[tabId].frames[frameId] = { + url: frameUrl, + host: window.extractHostFromURL(frameUrl) + }; + }, + + /** + * Read the frame data from memory + * + * @param {Integer} tab_id Tab ID to check for + * @param {Integer} [frame_id=0] Frame ID to check for. + * Optional, defaults to frame 0 (the main document frame). + * + * @returns {?Object} Frame data object or null + */ + getFrameData: function (tab_id, frame_id) { + let self = this; + + frame_id = frame_id || 0; + + if (self.tabData.hasOwnProperty(tab_id)) { + if (self.tabData[tab_id].frames.hasOwnProperty(frame_id)) { + return self.tabData[tab_id].frames[frame_id]; + } + } + return null; + }, + + /** + * Initializes the yellowlist from disk. + * + * @returns {Promise} + */ + initializeYellowlist: function () { + let self = this; + + return new Promise(function (resolve, reject) { + + if (self.storage.getStore('cookieblock_list').keys().length) { + log("Yellowlist already initialized from disk"); + return resolve(); + } + + // we don't have the yellowlist initialized yet + // initialize from disk + utils.xhrRequest(constants.YELLOWLIST_LOCAL_URL, (error, response) => { + if (error) { + console.error(error); + return reject(new Error("Failed to fetch local yellowlist")); + } + + self.storage.updateYellowlist(response.trim().split("\n")); + log("Initialized ylist from disk"); + return resolve(); + }); + + }); + }, + + /** + * Updates to the latest yellowlist from eff.org. + * @param {Function} [callback] optional callback + */ + updateYellowlist: function (callback) { + let self = this; + + if (!callback) { + callback = function () {}; + } + + utils.xhrRequest(constants.YELLOWLIST_URL, function (err, response) { + if (err) { + console.error( + "Problem fetching yellowlist at", + constants.YELLOWLIST_URL, + err.status, + err.message + ); + + return callback(new Error("Failed to fetch remote yellowlist")); + } + + // handle empty response + if (!response.trim()) { + return callback(new Error("Empty yellowlist response")); + } + + let domains = response.trim().split("\n").map(domain => domain.trim()); + + // validate the response + if (!domains.every(domain => { + // all domains must contain at least one dot + if (domain.indexOf('.') == -1) { + return false; + } + + // validate character set + // + // regex says: + // - domain starts with lowercase English letter or Arabic numeral + // - following that, it contains one or more + // letter/numeral/dot/dash characters + // - following the previous two requirements, domain ends with a letter + // + // TODO both overly restrictive and inaccurate + // but that's OK for now, we manage the list + if (!/^[a-z0-9][a-z0-9.-]+[a-z]$/.test(domain)) { + return false; + } + + return true; + })) { + return callback(new Error("Invalid yellowlist response")); + } + + self.storage.updateYellowlist(domains); + log("Updated yellowlist from remote"); + + return callback(null); + }); + }, + + /** + * Initializes DNT policy hashes from disk. + * + * @returns {Promise} + */ + initializeDnt: function () { + let self = this; + + return new Promise(function (resolve, reject) { + + if (self.storage.getStore('dnt_hashes').keys().length) { + log("DNT hashes already initialized from disk"); + return resolve(); + } + + // we don't have DNT hashes initialized yet + // initialize from disk + utils.xhrRequest(constants.DNT_POLICIES_LOCAL_URL, (error, response) => { + let hashes; + + if (error) { + console.error(error); + return reject(new Error("Failed to fetch local DNT hashes")); + } + + try { + hashes = JSON.parse(response); + } catch (e) { + console.error(e); + return reject(new Error("Failed to parse DNT hashes JSON")); + } + + self.storage.updateDntHashes(hashes); + log("Initialized hashes from disk"); + return resolve(); + + }); + + }); + }, + + /** + * Fetch acceptable DNT policy hashes from the EFF server + * @param {Function} [cb] optional callback + */ + updateDntPolicyHashes: function (cb) { + let self = this; + + if (!cb) { + cb = function () {}; + } + + if (!self.isCheckingDNTPolicyEnabled()) { + // user has disabled this, we can check when they re-enable + setTimeout(function () { + return cb(null); + }, 0); + } + + utils.xhrRequest(constants.DNT_POLICIES_URL, function (err, response) { + if (err) { + console.error("Problem fetching DNT policy hash list at", + constants.DNT_POLICIES_URL, err.status, err.message); + return cb(new Error("Failed to fetch remote DNT hashes")); + } + + let hashes; + try { + hashes = JSON.parse(response); + } catch (e) { + console.error(e); + return cb(new Error("Failed to parse DNT hashes JSON")); + } + + self.storage.updateDntHashes(hashes); + log("Updated hashes from remote"); + return cb(null); + }); + }, + + /** + * Checks a domain for the EFF DNT policy. + * + * @param {String} domain The domain to check + * @param {Function} [cb] Callback that receives check status boolean (optional) + */ + checkForDNTPolicy: function (domain, cb) { + var self = this, + next_update = self.storage.getNextUpdateForDomain(domain); + + if (Date.now() < next_update) { + // not yet time + return; + } + + if (!self.isCheckingDNTPolicyEnabled()) { + // user has disabled this check + return; + } + + log('Checking', domain, 'for DNT policy.'); + + // update timestamp first; + // avoids queuing the same domain multiple times + var recheckTime = _.random( + utils.oneDayFromNow(), + utils.nDaysFromNow(7) + ); + self.storage.touchDNTRecheckTime(domain, recheckTime); + + self._checkPrivacyBadgerPolicy(domain, function (success) { + if (success) { + log('It looks like', domain, 'has adopted Do Not Track! I am going to unblock them'); + self.storage.setupDNT(domain); + } else { + log('It looks like', domain, 'has NOT adopted Do Not Track'); + self.storage.revertDNT(domain); + } + if (typeof cb == "function") { + cb(success); + } + }); + }, + + + /** + * Asyncronously checks if the domain has /.well-known/dnt-policy.txt. + * + * Rate-limited to at least one second apart. + * + * @param {String} origin The host to check + * @param {Function} callback callback(successStatus) + */ + _checkPrivacyBadgerPolicy: utils.rateLimit(function (origin, callback) { + var successStatus = false; + var url = "https://" + origin + "/.well-known/dnt-policy.txt"; + var dnt_hashes = this.storage.getStore('dnt_hashes'); + + utils.xhrRequest(url,function(err,response) { + if (err) { + callback(successStatus); + return; + } + utils.sha1(response, function(hash) { + if (dnt_hashes.hasItem(hash)) { + successStatus = true; + } + callback(successStatus); + }); + }); + }, constants.DNT_POLICY_CHECK_INTERVAL), + + /** + * Default Privacy Badger settings + */ + defaultSettings: { + checkForDNTPolicy: true, + disabledSites: [], + disableGoogleNavErrorService: true, + disableHyperlinkAuditing: true, + hideBlockedElements: true, + learnInIncognito: false, + learnLocally: false, + migrationLevel: 0, + seenComic: false, + sendDNTSignal: true, + showCounter: true, + showIntroPage: true, + showNonTrackingDomains: false, + showTrackingDomains: false, + socialWidgetReplacementEnabled: true, + widgetReplacementExceptions: [], + widgetSiteAllowlist: {}, + }, + + /** + * Initializes settings with defaults if needed, + * detects whether Badger just got installed or upgraded + */ + initializeSettings: function () { + let self = this, + settings = self.getSettings(); + + for (let key of Object.keys(self.defaultSettings)) { + // if this setting is not yet in storage, + if (!settings.hasItem(key)) { + // set with default value + let value = self.defaultSettings[key]; + log("setting", key, "=", value); + settings.setItem(key, value); + } + } + + let version = chrome.runtime.getManifest().version, + privateStore = self.getPrivateSettings(), + prev_version = privateStore.getItem("badgerVersion"); + + // special case for older badgers that kept isFirstRun in storage + if (settings.hasItem("isFirstRun")) { + self.isUpdate = true; + privateStore.setItem("badgerVersion", version); + privateStore.setItem("showLearningPrompt", true); + settings.deleteItem("isFirstRun"); + + // new install + } else if (!prev_version) { + self.isFirstRun = true; + privateStore.setItem("badgerVersion", version); + + // upgrade + } else if (version != prev_version) { + self.isUpdate = true; + privateStore.setItem("badgerVersion", version); + } + + if (!privateStore.hasItem("showLearningPrompt")) { + privateStore.setItem("showLearningPrompt", false); + } + }, + + runMigrations: function() { + var self = this; + var settings = self.getSettings(); + var migrationLevel = settings.getItem('migrationLevel'); + // TODO do not remove any migration methods + // TODO w/o refactoring migrationLevel handling to work differently + var migrations = [ + Migrations.changePrivacySettings, + Migrations.migrateAbpToStorage, + Migrations.migrateBlockedSubdomainsToCookieblock, + Migrations.migrateLegacyFirefoxData, + Migrations.migrateDntRecheckTimes, + // Need to run this migration again for everyone to #1181 + Migrations.migrateDntRecheckTimes2, + Migrations.forgetMistakenlyBlockedDomains, + Migrations.unblockIncorrectlyBlockedDomains, + Migrations.forgetBlockedDNTDomains, + Migrations.reapplyYellowlist, + Migrations.forgetNontrackingDomains, + Migrations.forgetMistakenlyBlockedDomains, + Migrations.resetWebRTCIPHandlingPolicy, + Migrations.enableShowNonTrackingDomains, + Migrations.forgetFirstPartySnitches, + Migrations.forgetCloudflare, + Migrations.forgetConsensu, + Migrations.resetWebRTCIPHandlingPolicy2, + ]; + + for (var i = migrationLevel; i < migrations.length; i++) { + migrations[i].call(Migrations, self); + settings.setItem('migrationLevel', i+1); + } + + }, + + /** + * Returns the count of tracking domains for a tab. + * @param {Integer} tab_id browser tab ID + * @returns {Integer} tracking domains count + */ + getTrackerCount: function (tab_id) { + let origins = this.tabData[tab_id].origins, + count = 0; + + for (let domain in origins) { + let action = origins[domain]; + if ( + action == constants.BLOCK || + action == constants.COOKIEBLOCK || + action == constants.USER_BLOCK || + action == constants.USER_COOKIEBLOCK + ) { + count++; + } + } + + return count; + }, + + /** + * Update page action badge with current count. + * @param {Integer} tab_id browser tab ID + */ + updateBadge: function (tab_id) { + if (!FirefoxAndroid.hasBadgeSupport) { + return; + } + + let self = this; + + chrome.tabs.get(tab_id, function (tab) { + if (chrome.runtime.lastError) { + // don't set on background (prerendered) tabs to avoid Chrome errors + return; + } + + if (!tab.active) { + // don't set on inactive tabs + return; + } + + if (self.criticalError) { + chrome.browserAction.setBadgeBackgroundColor({tabId: tab_id, color: "#cc0000"}); + chrome.browserAction.setBadgeText({tabId: tab_id, text: "!"}); + return; + } + + // don't show the counter for any of these: + // - the counter is disabled + // - we don't have tabData for whatever reason (special browser pages) + // - Privacy Badger is disabled on the page + if ( + !self.getSettings().getItem("showCounter") || + !self.tabData.hasOwnProperty(tab_id) || + !self.isPrivacyBadgerEnabled(self.getFrameData(tab_id).host) + ) { + chrome.browserAction.setBadgeText({tabId: tab_id, text: ""}); + return; + } + + let count = self.getTrackerCount(tab_id); + + if (count === 0) { + chrome.browserAction.setBadgeText({tabId: tab_id, text: ""}); + return; + } + + chrome.browserAction.setBadgeBackgroundColor({tabId: tab_id, color: "#ec9329"}); + chrome.browserAction.setBadgeText({tabId: tab_id, text: count + ""}); + }); + }, + + /** + * Shortcut helper for user-facing settings + */ + getSettings: function () { + return this.storage.getStore('settings_map'); + }, + + /** + * Shortcut helper for internal settings + */ + getPrivateSettings: function () { + return this.storage.getStore('private_storage'); + }, + + /** + * Check if privacy badger is enabled, take an origin and + * check against the disabledSites list + * + * @param {String} origin the origin to check + * @returns {Boolean} true if enabled + */ + isPrivacyBadgerEnabled: function(origin) { + var settings = this.getSettings(); + var disabledSites = settings.getItem("disabledSites"); + if (disabledSites && disabledSites.length > 0) { + for (var i = 0; i < disabledSites.length; i++) { + var site = disabledSites[i]; + + if (site.startsWith("*")) { + var wildcard = site.slice(1); // remove "*" + + if (origin.endsWith(wildcard)) { + return false; + } + } + + if (disabledSites[i] === origin) { + return false; + } + } + } + return true; + }, + + /** + * Is local learning generally enabled, + * and if tab_id is for an incognito window, + * is learning in incognito windows enabled? + */ + isLearningEnabled(tab_id) { + return ( + this.getSettings().getItem("learnLocally") && + incognito.learningEnabled(tab_id) + ); + }, + + /** + * Check if widget replacement functionality is enabled. + */ + isWidgetReplacementEnabled: function () { + return this.getSettings().getItem("socialWidgetReplacementEnabled"); + }, + + isDNTSignalEnabled: function() { + return this.getSettings().getItem("sendDNTSignal"); + }, + + isCheckingDNTPolicyEnabled: function() { + return this.getSettings().getItem("checkForDNTPolicy"); + }, + + /** + * Add an origin to the disabled sites list + * + * @param {String} origin The origin to disable the PB for + */ + disablePrivacyBadgerForOrigin: function(origin) { + var settings = this.getSettings(); + var disabledSites = settings.getItem('disabledSites'); + if (disabledSites.indexOf(origin) < 0) { + disabledSites.push(origin); + settings.setItem("disabledSites", disabledSites); + } + }, + + /** + * Returns the current list of disabled sites. + * + * @returns {Array} site domains where Privacy Badger is disabled + */ + getDisabledSites: function () { + return this.getSettings().getItem("disabledSites"); + }, + + /** + * Remove an origin from the disabledSites list + * + * @param {String} origin The origin to disable the PB for + */ + enablePrivacyBadgerForOrigin: function(origin) { + var settings = this.getSettings(); + var disabledSites = settings.getItem("disabledSites"); + var idx = disabledSites.indexOf(origin); + if (idx >= 0) { + disabledSites.splice(idx, 1); + settings.setItem("disabledSites", disabledSites); + } + }, + + /** + * Checks if local storage ( in dict) has any high-entropy keys + * + * @param {Object} lsItems Local storage dict + * @returns {boolean} true if it seems there are supercookies + */ + hasLocalStorageSupercookie: function (lsItems) { + var LOCALSTORAGE_ENTROPY_THRESHOLD = 33, // in bits + estimatedEntropy = 0, + lsKey = "", + lsItem = ""; + for (lsKey in lsItems) { + // send both key and value to entropy estimation + lsItem = lsItems[lsKey]; + log("Checking localstorage item", lsKey, lsItem); + estimatedEntropy += utils.estimateMaxEntropy(lsKey + lsItem); + if (estimatedEntropy > LOCALSTORAGE_ENTROPY_THRESHOLD) { + log("Found high-entropy localStorage: ", estimatedEntropy, + " bits, key: ", lsKey); + return true; + } + } + return false; + }, + + /** + * check if there seems to be any type of Super Cookie + * + * @param {Object} storageItems Dict with storage items + * @returns {Boolean} true if there seems to be any Super cookie + */ + hasSupercookie: function (storageItems) { + return ( + this.hasLocalStorageSupercookie(storageItems.localStorageItems) + //|| this.hasLocalStorageSupercookie(storageItems.indexedDBItems) + // TODO: See "Reading a directory's contents" on + // http://www.html5rocks.com/en/tutorials/file/filesystem/ + //|| this.hasLocalStorageSupercookie(storageItems.fileSystemAPIItems) + ); + }, + + /** + * Save third party origins to tabData[tab_id] object for + * use in the popup and, if needed, call updateBadge. + * + * @param {Integer} tab_id the tab we are on + * @param {String} fqdn the third party origin to add + * @param {String} action the action we are taking + */ + logThirdPartyOriginOnTab: function (tab_id, fqdn, action) { + let self = this, + is_blocked = ( + action == constants.BLOCK || + action == constants.COOKIEBLOCK || + action == constants.USER_BLOCK || + action == constants.USER_COOKIEBLOCK + ), + origins = self.tabData[tab_id].origins, + previously_blocked = origins.hasOwnProperty(fqdn) && ( + origins[fqdn] == constants.BLOCK || + origins[fqdn] == constants.COOKIEBLOCK || + origins[fqdn] == constants.USER_BLOCK || + origins[fqdn] == constants.USER_COOKIEBLOCK + ); + + origins[fqdn] = action; + + // no need to update badge if not a (cookie)blocked domain, + // or if we have already seen it as a (cookie)blocked domain + if (!is_blocked || previously_blocked) { + return; + } + + // don't block critical code paths on updating the badge + setTimeout(function () { + self.updateBadge(tab_id); + }, 0); + }, + + /** + * Enables or disables page action icon according to options. + * @param {Integer} tab_id The tab ID to set the badger icon for + * @param {String} tab_url The tab URL to set the badger icon for + */ + updateIcon: function (tab_id, tab_url) { + if (!tab_id || !tab_url || !FirefoxAndroid.hasPopupSupport) { + return; + } + + let self = this, iconFilename; + + // TODO grab hostname from tabData instead + if (!utils.isRestrictedUrl(tab_url) && + self.isPrivacyBadgerEnabled(window.extractHostFromURL(tab_url))) { + iconFilename = { + 19: chrome.runtime.getURL("icons/badger-19.png"), + 38: chrome.runtime.getURL("icons/badger-38.png") + }; + } else { + iconFilename = { + 19: chrome.runtime.getURL("icons/badger-19-disabled.png"), + 38: chrome.runtime.getURL("icons/badger-38-disabled.png") + }; + } + + chrome.browserAction.setIcon({tabId: tab_id, path: iconFilename}); + }, + + /** + * Merge data exported from a different badger into this badger's storage. + * + * @param {Object} data the user data to merge in + * @param {Boolean} [skip_migrations=false] set when running from a migration to avoid infinite loop + */ + mergeUserData: function (data, skip_migrations) { + let self = this; + // The order of these keys is also the order in which they should be imported. + // It's important that snitch_map be imported before action_map (#1972) + ["snitch_map", "action_map", "settings_map"].forEach(function (key) { + if (data.hasOwnProperty(key)) { + self.storage.getStore(key).merge(data[key]); + } + }); + + // for exports from older Privacy Badger versions: + // fix yellowlist getting out of sync, remove non-tracking domains, etc. + if (!skip_migrations) { + self.runMigrations(); + } + } + +}; + +/**************************** Listeners ****************************/ + +function startBackgroundListeners() { + chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { + if (changeInfo.status == "loading" && tab.url) { + badger.updateIcon(tab.id, tab.url); + badger.updateBadge(tabId); + } + }); + + // Update icon if a tab is replaced or loaded from cache + chrome.tabs.onReplaced.addListener(function(addedTabId/*, removedTabId*/) { + chrome.tabs.get(addedTabId, function(tab) { + badger.updateIcon(tab.id, tab.url); + }); + }); + + chrome.tabs.onActivated.addListener(function (activeInfo) { + badger.updateBadge(activeInfo.tabId); + }); +} + +var badger = window.badger = new Badger(); diff --git a/src/js/bootstrap.js b/src/js/bootstrap.js new file mode 100644 index 0000000..7d90ef4 --- /dev/null +++ b/src/js/bootstrap.js @@ -0,0 +1,37 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +window.DEBUG = false; +window.badger = {}; + +/** +* Log a message to the console if debugging is enabled +*/ +window.log = function (/*...*/) { + if (window.DEBUG) { + console.log.apply(console, arguments); + } +}; + +/** + * Basic implementation of requirejs + * for requiring other javascript files + */ +function require(module) { + return require.scopes[module]; +} +require.scopes = {}; diff --git a/src/js/constants.js b/src/js/constants.js new file mode 100644 index 0000000..5a77d02 --- /dev/null +++ b/src/js/constants.js @@ -0,0 +1,54 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +require.scopes.constants = (function() { + +var exports = { + + // Tracking status constants + NO_TRACKING: "noaction", + ALLOW: "allow", + BLOCK: "block", + COOKIEBLOCK: "cookieblock", + DNT: "dnt", + USER_ALLOW: "user_allow", + USER_BLOCK: "user_block", + USER_COOKIEBLOCK: "user_cookieblock", + + // URLS + DNT_POLICIES_URL: "https://www.eff.org/files/dnt-policies.json", + DNT_POLICIES_LOCAL_URL: chrome.runtime.getURL('data/dnt-policies.json'), + YELLOWLIST_URL: "https://www.eff.org/files/cookieblocklist_new.txt", + YELLOWLIST_LOCAL_URL: chrome.runtime.getURL('data/yellowlist.txt'), + SEED_DATA_LOCAL_URL: chrome.runtime.getURL('data/seed.json'), + + // The number of 1st parties a 3rd party can be seen on + TRACKING_THRESHOLD: 3, + MAX_COOKIE_ENTROPY: 12, + + DNT_POLICY_CHECK_INTERVAL: 1000, // one second +}; + +exports.BLOCKED_ACTIONS = new Set([ + exports.BLOCK, + exports.USER_BLOCK, + exports.COOKIEBLOCK, + exports.USER_COOKIEBLOCK, +]); + +return exports; +})(); diff --git a/src/js/contentscripts/clobbercookie.js b/src/js/contentscripts/clobbercookie.js new file mode 100644 index 0000000..402d00e --- /dev/null +++ b/src/js/contentscripts/clobbercookie.js @@ -0,0 +1,60 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +// don't bother asking to run when trivially in first-party context +if (window.top == window) { + return; +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkLocation", + frameUrl: window.FRAME_URL +}, function (blocked) { + if (blocked) { + var code = '('+ function() { + document.__defineSetter__("cookie", function(/*value*/) { }); + document.__defineGetter__("cookie", function() { return ""; }); + + // trim referrer down to origin + let referrer = document.referrer; + if (referrer) { + referrer = referrer.slice( + 0, + referrer.indexOf('/', referrer.indexOf('://') + 3) + ) + '/'; + } + document.__defineGetter__("referrer", function () { return referrer; }); + } +')();'; + + window.injectScript(code); + } + return true; +}); + +}()); diff --git a/src/js/contentscripts/clobberlocalstorage.js b/src/js/contentscripts/clobberlocalstorage.js new file mode 100644 index 0000000..7ff3528 --- /dev/null +++ b/src/js/contentscripts/clobberlocalstorage.js @@ -0,0 +1,94 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +// don't bother asking to run when trivially in first-party context +if (window.top == window) { + return; +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkLocation", + frameUrl: window.FRAME_URL +}, function (blocked) { + if (blocked) { + // https://stackoverflow.com/questions/49092423/how-to-break-on-localstorage-changes + var code = + '('+ function() { + + /* + * If localStorage is inaccessible, such as when "Block third-party cookies" + * in enabled in Chrome or when `dom.storage.enabled` is set to `false` in + * Firefox, do not go any further. + */ + try { + // No localStorage raises an Exception in Chromium-based browsers, while + // it's equal to `null` in Firefox. + if (null === localStorage) { + throw false; + } + } catch (ex) { + return; + } + + let lsProxy = new Proxy(localStorage, { + set: function (/*ls, prop, value*/) { + return true; + }, + get: function (ls, prop) { + if (typeof ls[prop] == 'function') { + let fn = function () {}; + if (prop == 'getItem' || prop == 'key') { + fn = function () { return null; }; + } + return fn.bind(ls); + } else { + if (prop == 'length') { + return 0; + } else if (prop == '__proto__') { + return lsProxy; + } + return; + } + } + }); + + Object.defineProperty(window, 'localStorage', { + configurable: true, + enumerable: true, + value: lsProxy + }); + + } +')()'; + + window.injectScript(code); + } + return true; +}); + +}()); diff --git a/src/js/contentscripts/collapser.js b/src/js/contentscripts/collapser.js new file mode 100644 index 0000000..968905c --- /dev/null +++ b/src/js/contentscripts/collapser.js @@ -0,0 +1,56 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2020 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +function hideFrame(url) { + let sel = "iframe[src='" + CSS.escape(url) + "']"; + let el = document.querySelector(sel); + if (el) { // el could have gotten replaced since the lookup + el.style.setProperty("display", "none", "important"); + } +} + +chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { + if (request.hideFrame) { + hideFrame(request.url); + sendResponse(true); + } +}); + +// check the page for any frames that were blocked before we got here +chrome.runtime.sendMessage({ + type: "getBlockedFrameUrls" +}, function (frameUrls) { + if (!frameUrls) { + return; + } + for (let url of frameUrls) { + hideFrame(url); + } +}); + +}()); diff --git a/src/js/contentscripts/dnt.js b/src/js/contentscripts/dnt.js new file mode 100644 index 0000000..0584748 --- /dev/null +++ b/src/js/contentscripts/dnt.js @@ -0,0 +1,66 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2018 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +function getPageScript() { + + // code below is not a content script: no chrome.* APIs ///////////////////// + + // return a string + return "(" + function (NAVIGATOR, OBJECT) { + + OBJECT.defineProperty(OBJECT.getPrototypeOf(NAVIGATOR), "doNotTrack", { + get: function doNotTrack() { + return "1"; + } + }); + + OBJECT.defineProperty(OBJECT.getPrototypeOf(NAVIGATOR), "globalPrivacyControl", { + get: function globalPrivacyControl() { + return "1"; + } + }); + + // save locally to keep from getting overwritten by site code + } + "(window.navigator, Object));"; + + // code above is not a content script: no chrome.* APIs ///////////////////// + +} + +// END FUNCTION DEFINITIONS /////////////////////////////////////////////////// + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkDNT" +}, function (enabled) { + if (enabled) { + window.injectScript(getPageScript()); + } +}); + +}()); diff --git a/src/js/contentscripts/fingerprinting.js b/src/js/contentscripts/fingerprinting.js new file mode 100644 index 0000000..0891896 --- /dev/null +++ b/src/js/contentscripts/fingerprinting.js @@ -0,0 +1,367 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2015 Electronic Frontier Foundation + * + * Derived from Chameleon + * Copyright (C) 2015 ghostwords + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +function getFpPageScript() { + + // code below is not a content script: no chrome.* APIs ///////////////////// + + // return a string + return "(" + function (DOCUMENT, dispatchEvent, CUSTOM_EVENT, ERROR, DATE, setTimeout, OBJECT) { + + const V8_STACK_TRACE_API = !!(ERROR && ERROR.captureStackTrace); + + if (V8_STACK_TRACE_API) { + ERROR.stackTraceLimit = Infinity; // collect all frames + } else { + // from https://github.com/csnover/TraceKit/blob/b76ad786f84ed0c94701c83d8963458a8da54d57/tracekit.js#L641 + var geckoCallSiteRe = /^\s*(.*?)(?:\((.*?)\))?@?((?:file|https?|chrome):.*?):(\d+)(?::(\d+))?\s*$/i; + } + + var event_id = DOCUMENT.currentScript.getAttribute('data-event-id'); + + // from Underscore v1.6.0 + function debounce(func, wait, immediate) { + var timeout, args, context, timestamp, result; + + var later = function () { + var last = DATE.now() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + context = args = null; + } + } + }; + + return function () { + context = this; // eslint-disable-line consistent-this + args = arguments; + timestamp = DATE.now(); + var callNow = immediate && !timeout; + if (!timeout) { + timeout = setTimeout(later, wait); + } + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; + }; + } + + // messages the injected script + var send = (function () { + var messages = []; + + // debounce sending queued messages + var _send = debounce(function () { + dispatchEvent.call(DOCUMENT, new CUSTOM_EVENT(event_id, { + detail: messages + })); + + // clear the queue + messages = []; + }, 100); + + return function (msg) { + // queue the message + messages.push(msg); + + _send(); + }; + }()); + + /** + * Gets the stack trace by throwing and catching an exception. + * @returns {*} Returns the stack trace + */ + function getStackTraceFirefox() { + let stack; + + try { + throw new ERROR(); + } catch (err) { + stack = err.stack; + } + + return stack.split('\n'); + } + + /** + * Gets the stack trace using the V8 stack trace API: + * https://github.com/v8/v8/wiki/Stack-Trace-API + * @returns {*} Returns the stack trace + */ + function getStackTrace() { + let err = {}, + origFormatter, + stack; + + origFormatter = ERROR.prepareStackTrace; + ERROR.prepareStackTrace = function (_, structuredStackTrace) { + return structuredStackTrace; + }; + + ERROR.captureStackTrace(err, getStackTrace); + stack = err.stack; + + ERROR.prepareStackTrace = origFormatter; + + return stack; + } + + /** + * Strip away the line and column number (from stack trace urls) + * @param script_url The stack trace url to strip + * @returns {String} the pure URL + */ + function stripLineAndColumnNumbers(script_url) { + return script_url.replace(/:\d+:\d+$/, ''); + } + + /** + * Parses the stack trace for the originating script URL + * without using the V8 stack trace API. + * @returns {String} The URL of the originating script + */ + function getOriginatingScriptUrlFirefox() { + let trace = getStackTraceFirefox(); + + if (trace.length < 4) { + return ''; + } + + // this script is at 0, 1 and 2 + let callSite = trace[3]; + + let scriptUrlMatches = callSite.match(geckoCallSiteRe); + return scriptUrlMatches && scriptUrlMatches[3] || ''; + } + + /** + * Parses the stack trace for the originating script URL. + * @returns {String} The URL of the originating script + */ + function getOriginatingScriptUrl() { + let trace = getStackTrace(); + + if (OBJECT.prototype.toString.call(trace) == '[object String]') { + // we failed to get a structured stack trace + trace = trace.split('\n'); + // this script is at 0, 1, 2 and 3 + let script_url_matches = trace[4].match(/\((http.*:\d+:\d+)/); + // TODO do we need stripLineAndColumnNumbers (in both places) here? + return script_url_matches && stripLineAndColumnNumbers(script_url_matches[1]) || stripLineAndColumnNumbers(trace[4]); + } + + if (trace.length < 2) { + return ''; + } + + // this script is at 0 and 1 + let callSite = trace[2]; + + if (callSite.isEval()) { + // argh, getEvalOrigin returns a string ... + let eval_origin = callSite.getEvalOrigin(), + script_url_matches = eval_origin.match(/\((http.*:\d+:\d+)/); + + // TODO do we need stripLineAndColumnNumbers (in both places) here? + return script_url_matches && stripLineAndColumnNumbers(script_url_matches[1]) || stripLineAndColumnNumbers(eval_origin); + } else { + return callSite.getFileName(); + } + } + + /** + * Monitor the writes in a canvas instance + * @param item special item objects + */ + function trapInstanceMethod(item) { + var is_canvas_write = ( + item.propName == 'fillText' || item.propName == 'strokeText' + ); + + item.obj[item.propName] = (function (orig) { + // set to true after the first write, if the method is not + // restorable. Happens if another library also overwrites + // this method. + var skip_monitoring = false; + + function wrapped() { + var args = arguments; + + if (is_canvas_write) { + // to avoid false positives, + // bail if the text being written is too short, + // of if we've already sent a monitoring payload + if (skip_monitoring || !args[0] || args[0].length < 5) { + return orig.apply(this, args); + } + } + + var script_url = ( + V8_STACK_TRACE_API ? + getOriginatingScriptUrl() : + getOriginatingScriptUrlFirefox() + ), + msg = { + obj: item.objName, + prop: item.propName, + scriptUrl: script_url + }; + + if (item.hasOwnProperty('extra')) { + msg.extra = item.extra.apply(this, args); + } + + send(msg); + + if (is_canvas_write) { + // optimization: one canvas write is enough, + // restore original write method + // to this CanvasRenderingContext2D object instance + // Careful! Only restorable if we haven't already been replaced + // by another lib, such as the hidpi polyfill + if (this[item.propName] === wrapped) { + this[item.propName] = orig; + } else { + skip_monitoring = true; + } + } + + return orig.apply(this, args); + } + + OBJECT.defineProperty(wrapped, "name", { value: orig.name }); + OBJECT.defineProperty(wrapped, "length", { value: orig.length }); + OBJECT.defineProperty(wrapped, "toString", { value: orig.toString.bind(orig) }); + + return wrapped; + + }(item.obj[item.propName])); + } + + var methods = []; + + ['getImageData', 'fillText', 'strokeText'].forEach(function (method) { + var item = { + objName: 'CanvasRenderingContext2D.prototype', + propName: method, + obj: CanvasRenderingContext2D.prototype, + extra: function () { + return { + canvas: true + }; + } + }; + + if (method == 'getImageData') { + item.extra = function () { + var args = arguments, + width = args[2], + height = args[3]; + + // "this" is a CanvasRenderingContext2D object + if (width === undefined) { + width = this.canvas.width; + } + if (height === undefined) { + height = this.canvas.height; + } + + return { + canvas: true, + width: width, + height: height + }; + }; + } + + methods.push(item); + }); + + methods.push({ + objName: 'HTMLCanvasElement.prototype', + propName: 'toDataURL', + obj: HTMLCanvasElement.prototype, + extra: function () { + // "this" is a canvas element + return { + canvas: true, + width: this.width, + height: this.height + }; + } + }); + + methods.forEach(trapInstanceMethod); + + // save locally to keep from getting overwritten by site code + } + "(document, document.dispatchEvent, CustomEvent, Error, Date, setTimeout, Object));"; + + // code above is not a content script: no chrome.* APIs ///////////////////// + +} + +// END FUNCTION DEFINITIONS /////////////////////////////////////////////////// + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "detectFingerprinting" +}, function (enabled) { + if (!enabled) { + return; + } + /** + * Communicating to webrequest.js + */ + var event_id = Math.random(); + + // listen for messages from the script we are about to insert + document.addEventListener(event_id, function (e) { + // pass these on to the background page + chrome.runtime.sendMessage({ + type: "fpReport", + data: e.detail + }); + }); + + window.injectScript(getFpPageScript(), { + event_id: event_id + }); +}); + +}()); diff --git a/src/js/contentscripts/socialwidgets.js b/src/js/contentscripts/socialwidgets.js new file mode 100644 index 0000000..14ae2b3 --- /dev/null +++ b/src/js/contentscripts/socialwidgets.js @@ -0,0 +1,641 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * Derived from ShareMeNot + * Copyright (C) 2011-2014 University of Washington + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/* + * ShareMeNot is licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Copyright (c) 2011-2014 University of Washington + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +// widget data +let widgetList; + +// cached chrome.i18n.getMessage() results +const TRANSLATIONS = {}; + +// references to widget page elements +const WIDGET_ELS = {}; + + +/** + * @param {Object} response response to checkWidgetReplacementEnabled + */ +function initialize(response) { + for (const key in response.translations) { + TRANSLATIONS[key] = response.translations[key]; + } + + widgetList = response.widgetList; + + // check for widgets blocked before we got here + replaceInitialTrackerButtonsHelper(response.widgetsToReplace); + + // set up listener for dynamically created widgets + chrome.runtime.onMessage.addListener(function (request) { + if (request.replaceWidget) { + replaceSubsequentTrackerButtonsHelper(request.trackerDomain); + } + }); +} + +/** + * Creates a replacement placeholder element for the given widget. + * + * @param {Object} widget the SocialWidget object + * @param {Element} trackerElem the button/widget element we are replacing + * @param {Function} callback called with the replacement element + */ +function createReplacementElement(widget, trackerElem, callback) { + let buttonData = widget.replacementButton; + + // no image data to fetch + if (!buttonData.hasOwnProperty('imagePath')) { + return setTimeout(function () { + _createReplacementElementCallback(widget, trackerElem, callback); + }, 0); + } + + // already have replacement button image URI cached + if (buttonData.buttonUrl) { + return setTimeout(function () { + _createReplacementElementCallback(widget, trackerElem, callback); + }, 0); + } + + // already messaged for but haven't yet received the image data + if (buttonData.loading) { + // check back in 10 ms + return setTimeout(function () { + createReplacementElement(widget, trackerElem, callback); + }, 10); + } + + // don't have image data cached yet, get it from the background page + buttonData.loading = true; + chrome.runtime.sendMessage({ + type: "getReplacementButton", + widgetName: widget.name + }, function (response) { + if (response) { + buttonData.buttonUrl = response; // cache image data + _createReplacementElementCallback(widget, trackerElem, callback); + } + }); +} + +function _createReplacementElementCallback(widget, trackerElem, callback) { + if (widget.replacementButton.buttonUrl) { + _createButtonReplacement(widget, callback); + } else { + _createWidgetReplacement(widget, trackerElem, callback); + } +} + +function _createButtonReplacement(widget, callback) { + let buttonData = widget.replacementButton, + button_type = buttonData.type; + + let button = document.createElement("img"); + button.setAttribute("src", buttonData.buttonUrl); + + // TODO use custom tooltip to support RTL locales? + button.setAttribute( + "title", + TRANSLATIONS.social_tooltip_pb_has_replaced.replace("XXX", widget.name) + ); + + let styleAttrs = [ + "border: none", + "cursor: pointer", + "height: auto", + "width: auto", + ]; + button.setAttribute("style", styleAttrs.join(" !important;") + " !important"); + + // normal button type; just open a new window when clicked + if (button_type === 0) { + let popup_url = buttonData.details + encodeURIComponent(window.location.href); + + button.addEventListener("click", function () { + window.open(popup_url); + }); + + // in place button type; replace the existing button + // with an iframe when clicked + } else if (button_type == 1) { + let iframe_url = buttonData.details + encodeURIComponent(window.location.href); + + button.addEventListener("click", function () { + replaceButtonWithIframeAndUnblockTracker(button, widget.name, iframe_url); + }, { once: true }); + + // in place button type; replace the existing button with code + // specified in the widgets JSON + } else if (button_type == 2) { + button.addEventListener("click", function () { + replaceButtonWithHtmlCodeAndUnblockTracker(button, widget.name, buttonData.details); + }, { once: true }); + } + + callback(button); +} + +function _createWidgetReplacement(widget, trackerElem, callback) { + let replacementEl; + + // in-place widget type: + // reinitialize the widget by reinserting its element's HTML + if (widget.replacementButton.type == 3) { + replacementEl = createReplacementWidget( + widget, trackerElem, reinitializeWidgetAndUnblockTracker); + + // in-place widget type: + // reinitialize the widget by reinserting its element's HTML + // and activating associated scripts + } else if (widget.replacementButton.type == 4) { + let activationFn = replaceWidgetAndReloadScripts; + + // if there are no matching script elements + if (!document.querySelectorAll(widget.scriptSelectors.join(',')).length) { + // and we don't have a fallback script URL + if (!widget.fallbackScriptUrl) { + // we can't do "in-place" activation; reload the page instead + activationFn = function () { + unblockTracker(widget.name, function () { + location.reload(); + }); + }; + } + } + + replacementEl = createReplacementWidget(widget, trackerElem, activationFn); + } + + callback(replacementEl); +} + +/** + * Unblocks the given widget and replaces the given button with an iframe + * pointing to the given URL. + * + * @param {Element} button the DOM element of the button to replace + * @param {String} widget_name the name of the replacement widget + * @param {String} iframeUrl the URL of the iframe to replace the button + */ +function replaceButtonWithIframeAndUnblockTracker(button, widget_name, iframeUrl) { + unblockTracker(widget_name, function () { + // check is needed as for an unknown reason this callback function is + // executed for buttons that have already been removed; we are trying + // to prevent replacing an already removed button + if (button.parentNode !== null) { + let iframe = document.createElement("iframe"); + + iframe.setAttribute("src", iframeUrl); + iframe.setAttribute("style", "border: none !important; height: 1.5em !important;"); + + button.parentNode.replaceChild(iframe, button); + } + }); +} + +/** + * Unblocks the given widget and replaces the given button with the + * HTML code defined in the provided SocialWidget object. + * + * @param {Element} button the DOM element of the button to replace + * @param {String} widget_name the name of the replacement widget + * @param {String} html the HTML string that should replace the button + */ +function replaceButtonWithHtmlCodeAndUnblockTracker(button, widget_name, html) { + unblockTracker(widget_name, function () { + // check is needed as for an unknown reason this callback function is + // executed for buttons that have already been removed; we are trying + // to prevent replacing an already removed button + if (button.parentNode !== null) { + let codeContainer = document.createElement("div"); + codeContainer.innerHTML = html; + + button.parentNode.replaceChild(codeContainer, button); + + replaceScriptsRecurse(codeContainer); + } + }); +} + +/** + * Unblocks the given widget and replaces our replacement placeholder + * with the original third-party widget element. + * + * The teardown to the initialization defined in createReplacementWidget(). + * + * @param {String} name the name/type of this widget (SoundCloud, Vimeo etc.) + */ +function reinitializeWidgetAndUnblockTracker(name) { + unblockTracker(name, function () { + // restore all widgets of this type + WIDGET_ELS[name].forEach(data => { + data.parent.replaceChild(data.widget, data.replacement); + }); + WIDGET_ELS[name] = []; + }); +} + +/** + * Similar to reinitializeWidgetAndUnblockTracker() above, + * but also reruns scripts defined in scriptSelectors. + * + * @param {String} name the name/type of this widget (Disqus, Google reCAPTCHA) + */ +function replaceWidgetAndReloadScripts(name) { + unblockTracker(name, function () { + // restore all widgets of this type + WIDGET_ELS[name].forEach(data => { + data.parent.replaceChild(data.widget, data.replacement); + reloadScripts(data.scriptSelectors, data.fallbackScriptUrl); + }); + WIDGET_ELS[name] = []; + }); +} + +/** + * Find and replace script elements with their copies to trigger re-running. + */ +function reloadScripts(selectors, fallback_script_url) { + let scripts = document.querySelectorAll(selectors.join(',')); + + // if there are no matches, try a known script URL + if (!scripts.length && fallback_script_url) { + let parent = document.documentElement, + replacement = document.createElement("script"); + replacement.src = fallback_script_url; + parent.insertBefore(replacement, parent.firstChild); + return; + } + + for (let scriptEl of scripts) { + // reinsert script elements only + if (!scriptEl.nodeName || scriptEl.nodeName.toLowerCase() != 'script') { + continue; + } + + let replacement = document.createElement("script"); + for (let attr of scriptEl.attributes) { + replacement.setAttribute(attr.nodeName, attr.value); + } + scriptEl.parentNode.replaceChild(replacement, scriptEl); + // reinsert one script and quit + break; + } +} + +/** + * Dumping scripts into innerHTML won't execute them, so replace them + * with executable scripts. + */ +function replaceScriptsRecurse(node) { + if (node.nodeName && node.nodeName.toLowerCase() == 'script' && + node.getAttribute && node.getAttribute("type") == "text/javascript") { + let script = document.createElement("script"); + script.text = node.innerHTML; + script.src = node.src; + node.parentNode.replaceChild(script, node); + } else { + let i = 0, + children = node.childNodes; + while (i < children.length) { + replaceScriptsRecurse(children[i]); + i++; + } + } + return node; +} + + +/** + * Replaces all tracker buttons on the current web page with the internal + * replacement buttons, respecting the user's blocking settings. + * + * @param {Array} widgetsToReplace a list of widget names to replace + */ +function replaceInitialTrackerButtonsHelper(widgetsToReplace) { + widgetList.forEach(function (widget) { + if (widgetsToReplace.hasOwnProperty(widget.name)) { + replaceIndividualButton(widget); + } + }); +} + +/** + * Individually replaces tracker buttons blocked after initial check. + */ +function replaceSubsequentTrackerButtonsHelper(tracker_domain) { + if (!widgetList) { + return; + } + widgetList.forEach(function (widget) { + let replace = widget.domains.some(domain => { + if (domain == tracker_domain) { + return true; + // leading wildcard + } else if (domain[0] == "*") { + if (tracker_domain.endsWith(domain.slice(1))) { + return true; + } + } + return false; + }); + if (replace) { + replaceIndividualButton(widget); + } + }); +} + +function _make_id(prefix) { + return prefix + "-" + Math.random().toString().replace(".", ""); +} + +function createReplacementWidget(widget, elToReplace, activationFn) { + let name = widget.name; + + let widgetFrame = document.createElement('iframe'); + + // widget replacement frame styles + let border_width = 1; + let styleAttrs = [ + "background-color: #fff", + "border: " + border_width + "px solid #ec9329", + "min-width: 220px", + "min-height: 210px", + "max-height: 600px", + "z-index: 2147483647", + ]; + if (elToReplace.offsetWidth > 0) { + styleAttrs.push(`width: ${elToReplace.offsetWidth - 2*border_width}px`); + } + if (elToReplace.offsetHeight > 0) { + styleAttrs.push(`height: ${elToReplace.offsetHeight - 2*border_width}px`); + } + widgetFrame.style = styleAttrs.join(" !important;") + " !important"; + + let widgetDiv = document.createElement('div'); + + // parent div styles + styleAttrs = [ + "display: flex", + "flex-direction: column", + "align-items: center", + "justify-content: center", + "width: 100%", + "height: 100%", + ]; + if (TRANSLATIONS.rtl) { + styleAttrs.push("direction: rtl"); + } + widgetDiv.style = styleAttrs.join(" !important;") + " !important"; + + // child div styles + styleAttrs = [ + "color: #303030", + "font-family: helvetica, arial, sans-serif", + "font-size: 16px", + "display: flex", + "flex-wrap: wrap", + "justify-content: center", + "text-align: center", + "margin: 10px", + ]; + + let textDiv = document.createElement('div'); + textDiv.style = styleAttrs.join(" !important;") + " !important"; + textDiv.appendChild(document.createTextNode( + TRANSLATIONS.widget_placeholder_pb_has_replaced.replace("XXX", name))); + let infoIcon = document.createElement('a'), + info_icon_id = _make_id("ico-help"); + infoIcon.id = info_icon_id; + infoIcon.href = "https://privacybadger.org/#How-does-Privacy-Badger-handle-social-media-widgets"; + infoIcon.rel = "noreferrer"; + infoIcon.target = "_blank"; + textDiv.appendChild(infoIcon); + widgetDiv.appendChild(textDiv); + + let buttonDiv = document.createElement('div'); + styleAttrs.push("width: 100%"); + buttonDiv.style = styleAttrs.join(" !important;") + " !important"; + + // allow once button + let button = document.createElement('button'), + button_id = _make_id("btn-once"); + button.id = button_id; + styleAttrs = [ + "transition: background-color 0.25s ease-out, border-color 0.25s ease-out, color 0.25s ease-out", + "border-radius: 3px", + "cursor: pointer", + "font-family: 'Lucida Grande', 'Segoe UI', Tahoma, 'DejaVu Sans', Arial, sans-serif", + "font-size: 12px", + "font-weight: bold", + "line-height: 16px", + "padding: 10px", + "margin: 4px", + "text-align: center", + "width: 70%", + "max-width: 280px", + ]; + button.style = styleAttrs.join(" !important;") + " !important"; + + // allow on this site button + let site_button = document.createElement('button'), + site_button_id = _make_id("btn-site"); + site_button.id = site_button_id; + site_button.style = styleAttrs.join(" !important;") + " !important"; + + button.appendChild(document.createTextNode(TRANSLATIONS.allow_once)); + site_button.appendChild(document.createTextNode(TRANSLATIONS.allow_on_site)); + + buttonDiv.appendChild(button); + buttonDiv.appendChild(site_button); + + widgetDiv.appendChild(buttonDiv); + + // save refs. to elements for use in teardown + if (!WIDGET_ELS.hasOwnProperty(name)) { + WIDGET_ELS[name] = []; + } + let data = { + parent: elToReplace.parentNode, + widget: elToReplace, + replacement: widgetFrame + }; + if (widget.scriptSelectors) { + data.scriptSelectors = widget.scriptSelectors; + if (widget.fallbackScriptUrl) { + data.fallbackScriptUrl = widget.fallbackScriptUrl; + } + } + WIDGET_ELS[name].push(data); + + // set up click handler + widgetFrame.addEventListener('load', function () { + let onceButton = widgetFrame.contentDocument.getElementById(button_id), + siteButton = widgetFrame.contentDocument.getElementById(site_button_id); + + onceButton.addEventListener("click", function (e) { + e.preventDefault(); + activationFn(name); + }, { once: true }); + + siteButton.addEventListener("click", function (e) { + e.preventDefault(); + + // first message the background page to record that + // this widget should always be allowed on this site + chrome.runtime.sendMessage({ + type: "allowWidgetOnSite", + widgetName: name + }, function () { + activationFn(name); + }); + }, { once: true }); + + }, false); // end of click handler + + let head_styles = ` +html, body { + height: 100% !important; + overflow: hidden !important; +} +#${button_id} { + border: 2px solid #f06a0a !important; + background-color: #f06a0a !important; + color: #fefefe !important; +} +#${site_button_id} { + border: 2px solid #333 !important; + background-color: #fefefe !important; + color: #333 !important; +} +#${button_id}:hover { + background-color: #fefefe !important; + color: #333 !important; +} +#${site_button_id}:hover { + background-color: #fefefe !important; + border: 2px solid #f06a0a !important; +} +#${info_icon_id} { + position: absolute; + ${TRANSLATIONS.rtl ? "left" : "right"}: 4px; + top: 4px; + line-height: 12px; + text-decoration: none; +} +#${info_icon_id}:before { + border: 2px solid; + border-radius: 50%; + display: inline-block; + color: #555; + content: '?'; + font-size: 12px; + font-weight: bold; + padding: 1px; + height: 1em; + width: 1em; +} +#${info_icon_id}:hover:before { + color: #ec9329; +} + `.trim(); + + widgetFrame.srcdoc = '' + widgetDiv.outerHTML + ''; + + return widgetFrame; +} + +/** + * Replaces buttons/widgets in the DOM. + */ +function replaceIndividualButton(widget) { + let selector = widget.buttonSelectors.join(','), + elsToReplace = document.querySelectorAll(selector); + + elsToReplace.forEach(function (el) { + createReplacementElement(widget, el, function (replacementEl) { + el.parentNode.replaceChild(replacementEl, el); + }); + }); +} + +/** + * Messages the background page to temporarily allow domains associated with a + * given replacement widget. + * Calls the provided callback function upon response. + * + * @param {String} name the name of the replacement widget + * @param {Function} callback the callback function + */ +function unblockTracker(name, callback) { + let request = { + type: "unblockWidget", + widgetName: name + }; + chrome.runtime.sendMessage(request, callback); +} + +// END FUNCTION DEFINITIONS /////////////////////////////////////////////////// + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +chrome.runtime.sendMessage({ + type: "checkWidgetReplacementEnabled" +}, function (response) { + if (!response) { + return; + } + initialize(response); +}); + +}()); diff --git a/src/js/contentscripts/supercookie.js b/src/js/contentscripts/supercookie.js new file mode 100644 index 0000000..0b15211 --- /dev/null +++ b/src/js/contentscripts/supercookie.js @@ -0,0 +1,151 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2015 Electronic Frontier Foundation + * + * Derived from Chameleon + * Copyright (C) 2015 ghostwords + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/** + * Generate script to inject into the page + * + * @returns {string} + */ +function getScPageScript() { + // code below is not a content script: no chrome.* APIs ///////////////////// + + // return a string + return "(" + function () { + + /* + * If localStorage is inaccessible, such as when "Block third-party cookies" + * in enabled in Chrome or when `dom.storage.enabled` is set to `false` in + * Firefox, do not go any further. + */ + try { + // No localStorage raises an Exception in Chromium-based browsers, while + // it's equal to `null` in Firefox. + if (null === localStorage) { + throw false; + } + } catch (ex) { + return; + } + + (function (DOCUMENT, dispatchEvent, CUSTOM_EVENT, LOCAL_STORAGE, OBJECT, keys) { + + var event_id = DOCUMENT.currentScript.getAttribute('data-event-id-super-cookie'); + + /** + * send message to the content script + * + * @param {*} message + */ + var send = function (message) { + dispatchEvent.call(DOCUMENT, new CUSTOM_EVENT(event_id, { + detail: message + })); + }; + + /** + * Read HTML5 local storage and return contents + * @returns {Object} + */ + let getLocalStorageItems = function () { + let lsItems = {}; + for (let i = 0; i < LOCAL_STORAGE.length; i++) { + let key = LOCAL_STORAGE.key(i); + lsItems[key] = LOCAL_STORAGE.getItem(key); + } + return lsItems; + }; + + if (event_id) { // inserted script may run before the event_id is available + let localStorageItems = getLocalStorageItems(); + if (keys.call(OBJECT, localStorageItems).length) { + // send to content script + send({ localStorageItems }); + } + } + + // save locally to keep from getting overwritten by site code + } (document, document.dispatchEvent, CustomEvent, localStorage, Object, Object.keys)); + + } + "());"; + + // code above is not a content script: no chrome.* APIs ///////////////////// + +} + +// END FUNCTION DEFINITIONS /////////////////////////////////////////////////// + +(function () { + +// don't inject into non-HTML documents (such as XML documents) +// but do inject into XHTML documents +if (document instanceof HTMLDocument === false && ( + document instanceof XMLDocument === false || + document.createElement('div') instanceof HTMLDivElement === false +)) { + return; +} + +// don't bother asking to run when trivially in first-party context +if (window.top == window) { + return; +} + +// TODO race condition; fix waiting on https://crbug.com/478183 + +// TODO here we could also be injected too quickly +// and miss localStorage setting upon initial page load +// +// we should eventually switch injection back to document_start +// (reverting https://github.com/EFForg/privacybadger/pull/1522), +// and fix localstorage detection +// (such as by delaying it or peforming it periodically) +// +// could then remove test workarounds like +// https://github.com/EFForg/privacybadger/commit/39d5d0899e22d1c451d429e44553c5f9cad7fc46 + +// TODO sometimes contentscripts/utils.js isn't here?! +// TODO window.FRAME_URL / window.injectScript are undefined ... +chrome.runtime.sendMessage({ + type: "inspectLocalStorage", + frameUrl: window.FRAME_URL +}, function (enabledAndThirdParty) { + if (!enabledAndThirdParty) { + return; + } + + var event_id_super_cookie = Math.random(); + + // listen for messages from the script we are about to insert + document.addEventListener(event_id_super_cookie, function (e) { + // pass these on to the background page (handled by webrequest.js) + chrome.runtime.sendMessage({ + type: "supercookieReport", + data: e.detail, + frameUrl: window.FRAME_URL + }); + }); + + window.injectScript(getScPageScript(), { + event_id_super_cookie: event_id_super_cookie + }); + +}); + +}()); diff --git a/src/js/contentscripts/utils.js b/src/js/contentscripts/utils.js new file mode 100644 index 0000000..9f0a0fa --- /dev/null +++ b/src/js/contentscripts/utils.js @@ -0,0 +1,53 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2018 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/** + * Executes a script in the page's JavaScript context. + * + * @param {String} text The content of the script to insert. + * @param {Object} data Data attributes to set on the inserted script tag. + */ +window.injectScript = function (text, data) { + var parent = document.documentElement, + script = document.createElement('script'); + + script.text = text; + script.async = false; + + for (var key in data) { + script.setAttribute('data-' + key.replace(/_/g, '-'), data[key]); + } + + parent.insertBefore(script, parent.firstChild); + parent.removeChild(script); +}; + +function getFrameUrl() { + let url = document.location.href, + parentFrame = (document != window.top) && window.parent; + while (parentFrame && url && !url.startsWith("http")) { + try { + url = parentFrame.document.location.href; + } catch (ex) { + // ignore 'Blocked a frame with origin "..." + // from accessing a cross-origin frame.' exceptions + } + parentFrame = (parentFrame != window.top) && parentFrame.parent; + } + return url; +} +window.FRAME_URL = getFrameUrl(); diff --git a/src/js/firefoxandroid.js b/src/js/firefoxandroid.js new file mode 100644 index 0000000..07eeb6a --- /dev/null +++ b/src/js/firefoxandroid.js @@ -0,0 +1,90 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/* + * Temporary polyfill for firefox android, + * while it doesn't support the full browserAction API + * Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1330159 + */ + +require.scopes.firefoxandroid = (function() { +var hasPopupSupport = !!( + chrome.browserAction.setPopup && + chrome.browserAction.getPopup +); +var hasBadgeSupport = !!chrome.browserAction.setBadgeText; + +// keeps track of popup id while one is open +var openPopupId = false; +var popup_url = chrome.runtime.getManifest().browser_action.default_popup; + +// fakes a popup +function openPopup() { + chrome.tabs.query({active: true, lastFocusedWindow: true}, (tabs) => { + var url = popup_url + "?tabId=" + tabs[0].id; + chrome.tabs.create({url, index: tabs[0].index + 1}, (tab) => { + openPopupId = tab.id; + }); + }); +} + +// remove the 'popup' when another tab is activated +function onActivated(activeInfo) { + if (openPopupId != false && openPopupId != activeInfo.tabId) { + chrome.tabs.remove(openPopupId, () => { + openPopupId = false; + }); + } +} + +// forgets the popup when the url is overwritten by the user +function onUpdated(tabId, changeInfo, tab) { + if (tab.url && openPopupId == tabId) { + var new_url = new URL(tab.url); + + if (new_url.origin + new_url.pathname != popup_url) { + openPopupId = false; + } + } +} + +// Subscribe to events needed to fake a popup +function startListeners() { + if (!hasPopupSupport) { + chrome.browserAction.onClicked.addListener(openPopup); + chrome.tabs.onActivated.addListener(onActivated); + chrome.tabs.onUpdated.addListener(onUpdated); + } +} + +// Used in popup.js, figures out which tab opened the 'fake' popup +function getParentOfPopup(callback) { + chrome.tabs.query({active: true, currentWindow: true}, function(focusedTab) { + var parentId = parseInt(new URL(focusedTab[0].url).searchParams.get('tabId')); + chrome.tabs.get(parentId, callback); + }); +} + +/************************************** exports */ +var exports = {}; +exports.startListeners = startListeners; +exports.hasPopupSupport = hasPopupSupport; +exports.hasBadgeSupport = hasBadgeSupport; +exports.getParentOfPopup = getParentOfPopup; +return exports; +/************************************** exports */ +})(); diff --git a/src/js/firstparties/facebook.js b/src/js/firstparties/facebook.js new file mode 100644 index 0000000..2c5d299 --- /dev/null +++ b/src/js/firstparties/facebook.js @@ -0,0 +1,56 @@ +/* globals findInAllFrames:false, observeMutations:false */ +// Adapted from https://github.com/mgziminsky/FacebookTrackingRemoval +// this should only run on facebook.com, messenger.com, and +// facebookcorewwwi.onion +let fb_wrapped_link = `a[href*='${document.domain.split(".").slice(-2).join(".")}/l.php?']:not([aria-label])`; + +// remove all attributes from a link except for class and ARIA attributes +function cleanAttrs(elem) { + for (let i = elem.attributes.length - 1; i >= 0; --i) { + const attr = elem.attributes[i]; + if (attr.name !== 'class' && !attr.name.startsWith('aria-')) { + elem.removeAttribute(attr.name); + } + } +} + +// Remove excessive attributes and event listeners from link a and replace +// its destination with href +function cleanLink(a) { + let href = new URL(a.href).searchParams.get('u'); + + // If we can't extract a good URL, abort without breaking the links + if (!window.isURL(href)) { + return; + } + + let href_url = new URL(href); + href_url.searchParams.delete('fbclid'); + href = href_url.toString(); + + cleanAttrs(a); + a.href = href; + a.rel = "noreferrer"; + a.target = "_blank"; + a.addEventListener("click", function (e) { e.stopImmediatePropagation(); }, true); + a.addEventListener("mousedown", function (e) { e.stopImmediatePropagation(); }, true); + a.addEventListener("mouseup", function (e) { e.stopImmediatePropagation(); }, true); + a.addEventListener("mouseover", function (e) { e.stopImmediatePropagation(); }, true); +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkEnabled" +}, function (enabled) { + if (!enabled) { + return; + } + + // unwrap wrapped links in the original page + findInAllFrames(fb_wrapped_link).forEach((link) => { + cleanLink(link); + }); + + // Execute redirect unwrapping each time new content is added to the page + observeMutations(fb_wrapped_link, cleanLink); +}); diff --git a/src/js/firstparties/google-search.js b/src/js/firstparties/google-search.js new file mode 100644 index 0000000..d5eea9a --- /dev/null +++ b/src/js/firstparties/google-search.js @@ -0,0 +1,39 @@ +/* globals findInAllFrames:false */ +// In Firefox, outbound google links have the `rwt(...)` mousedown trigger. +// In Chrome, they just have a `ping` attribute. +let trap_link = "a[onmousedown^='return rwt(this,'], a[ping]"; + +// Remove excessive attributes and event listeners from link a +function cleanLink(a) { + // remove all attributes except for href, + // target (to support "Open each selected result in a new browser window"), + // class, style and ARIA attributes + for (let i = a.attributes.length - 1; i >= 0; --i) { + const attr = a.attributes[i]; + if (attr.name !== 'href' && attr.name !== 'target' && + attr.name !== 'class' && attr.name !== 'style' && + !attr.name.startsWith('aria-')) { + a.removeAttribute(attr.name); + } + } + a.rel = "noreferrer noopener"; + + // block event listeners on the link + a.addEventListener("click", function (e) { e.stopImmediatePropagation(); }, true); + a.addEventListener("mousedown", function (e) { e.stopImmediatePropagation(); }, true); +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkEnabled" +}, function (enabled) { + if (!enabled) { + return; + } + + // since the page is rendered all at once, no need to set up a + // mutationObserver or setInterval + findInAllFrames(trap_link).forEach((link) => { + cleanLink(link); + }); +}); diff --git a/src/js/firstparties/google-static.js b/src/js/firstparties/google-static.js new file mode 100644 index 0000000..cf73004 --- /dev/null +++ b/src/js/firstparties/google-static.js @@ -0,0 +1,41 @@ +let g_wrapped_link = "a[href^='https://www.google.com/url?']"; + +// Unwrap a Hangouts tracking link +function unwrapLink(a) { + let href = new URL(a.href).searchParams.get('q'); + if (!window.isURL(href)) { + return; + } + + // remove all attributes except for target, class, style and aria-* + // attributes. This should prevent the script from breaking styles and + // features for people with disabilities. + for (let i = a.attributes.length - 1; i >= 0; --i) { + const attr = a.attributes[i]; + if (attr.name !== 'target' && attr.name !== 'class' && + attr.name !== 'style' && !attr.name.startsWith('aria-')) { + a.removeAttribute(attr.name); + } + } + + a.rel = "noreferrer"; + a.href = href; +} + +// Scan the page for all wrapped links +function unwrapAll() { + document.querySelectorAll(g_wrapped_link).forEach((a) => { + unwrapLink(a); + }); +} + +// TODO race condition; fix waiting on https://crbug.com/478183 +chrome.runtime.sendMessage({ + type: "checkEnabled" +}, function (enabled) { + if (!enabled) { + return; + } + unwrapAll(); + setInterval(unwrapAll, 2000); +}); diff --git a/src/js/firstparties/lib/utils.js b/src/js/firstparties/lib/utils.js new file mode 100644 index 0000000..3edb0c8 --- /dev/null +++ b/src/js/firstparties/lib/utils.js @@ -0,0 +1,62 @@ +window.isURL = function(url) { + // ensure the URL starts with HTTP or HTTPS; otherwise we might be vulnerable + // to XSS attacks + return (url && (url.startsWith("https://") || url.startsWith("http://"))); +}; + +/** + * Search a window and all IFrames within it for a query selector, then return a + * list of all the elements in any frame that match. + */ +window.findInAllFrames = function(query) { + let out = []; + document.querySelectorAll(query).forEach((node) => { + out.push(node); + }); + Array.from(document.getElementsByTagName('iframe')).forEach((iframe) => { + try { + iframe.contentDocument.querySelectorAll(query).forEach((node) => { + out.push(node); + }); + } catch (e) { + // pass on cross origin iframe errors + } + }); + return out; +}; + +/** + * Listen for mutations on a page. If any nodes that match `selector` are added + * to the page, execute the function `callback` on them. + * Used by first-party scripts to listen for new links being added to the page + * and strip them of tracking code immediately. + */ +window.observeMutations = function(selector, callback) { + // Check all new nodes added by a mutation for tracking links and unwrap them + function onMutation(mutation) { + if (!mutation.addedNodes.length) { + return; + } + for (let node of mutation.addedNodes) { + // Only act on element nodes, otherwise querySelectorAll won't work + if (node.nodeType != Node.ELEMENT_NODE) { + continue; + } + + // check all child nodes against the selector first + node.querySelectorAll(selector).forEach((element) => { + callback(element); + }); + + // then check the node itself + if (node.matches(selector)) { + callback(node); + } + } + } + + // Set up a mutation observer with the constructed callback + new MutationObserver(function(mutations) { + mutations.forEach(onMutation); + }).observe(document, {childList: true, subtree: true, attributes: false, characterData: false}); +}; diff --git a/src/js/heuristicblocking.js b/src/js/heuristicblocking.js new file mode 100644 index 0000000..b0d3bc9 --- /dev/null +++ b/src/js/heuristicblocking.js @@ -0,0 +1,557 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +/* globals badger:false, log:false, URI:false */ + +var constants = require("constants"); +var utils = require("utils"); + +require.scopes.heuristicblocking = (function() { + + + +/*********************** heuristicblocking scope **/ +// make heuristic obj with utils and storage properties and put the things on it +function HeuristicBlocker(pbStorage) { + this.storage = pbStorage; + + // TODO roll into tabData? -- 6/10/2019 not for now, since tabData is populated + // by the synchronous listeners in webrequests.js and tabOrigins is used by the + // async listeners here; there's no way to enforce ordering of requests among + // those two. Also, tabData is cleaned up every time a tab is closed, so + // dangling requests that don't trigger listeners until after the tab closes are + // impossible to attribute to a tab. + this.tabOrigins = {}; + this.tabUrls = {}; +} + +HeuristicBlocker.prototype = { + + /** + * Blocklists an FQDN/origin: + * + * - Blocks or cookieblocks an FQDN. + * - Blocks or cookieblocks its base domain. + * - Cookieblocks any yellowlisted subdomains that share the base domain with the FQDN. + * + * @param {String} base The base domain (etld+1) to blocklist + * @param {String} fqdn The FQDN + */ + blocklistOrigin: function (base, fqdn) { + let self = this, + ylistStorage = self.storage.getStore("cookieblock_list"); + + // cookieblock or block the base domain + if (ylistStorage.hasItem(base)) { + self.storage.setupHeuristicAction(base, constants.COOKIEBLOCK); + } else { + self.storage.setupHeuristicAction(base, constants.BLOCK); + } + + // cookieblock or block the fqdn + // + // cookieblock if a "parent" domain of the fqdn is on the yellowlist + // + // ignore base domains when exploding to work around PSL TLDs: + // still want to cookieblock somedomain.googleapis.com with only + // googleapis.com (and not somedomain.googleapis.com itself) on the ylist + let set = false, + subdomains = utils.explodeSubdomains(fqdn, true); + for (let i = 0; i < subdomains.length; i++) { + if (ylistStorage.hasItem(subdomains[i])) { + set = true; + break; + } + } + if (set) { + self.storage.setupHeuristicAction(fqdn, constants.COOKIEBLOCK); + } else { + self.storage.setupHeuristicAction(fqdn, constants.BLOCK); + } + + // cookieblock any yellowlisted subdomains with the same base domain + // + // for example, when google.com is blocked, + // books.google.com should be cookieblocked + let base_with_dot = '.' + base; + ylistStorage.keys().forEach(domain => { + if (base != domain && domain.endsWith(base_with_dot)) { + self.storage.setupHeuristicAction(domain, constants.COOKIEBLOCK); + } + }); + + }, + + /** + * Wraps _recordPrevalence for use from webRequest listeners. + * Use updateTrackerPrevalence for non-webRequest initiated bookkeeping. + * + * @param {Object} details request/response details + */ + heuristicBlockingAccounting: function (details) { + // ignore requests that are outside a tabbed window + if (details.tabId < 0 || !badger.isLearningEnabled(details.tabId)) { + return {}; + } + + let self = this, + request_host = (new URI(details.url)).host, + request_origin = window.getBaseDomain(request_host); + + // if this is a main window request, update tab data and quit + if (details.type == "main_frame") { + self.tabOrigins[details.tabId] = request_origin; + self.tabUrls[details.tabId] = details.url; + return {}; + } + + let tab_origin = self.tabOrigins[details.tabId]; + + // ignore first-party requests + if (!tab_origin || !utils.isThirdPartyDomain(request_origin, tab_origin)) { + return {}; + } + + // short-circuit if we already observed this origin tracking on this site + let firstParties = self.storage.getStore('snitch_map').getItem(request_origin); + if (firstParties && firstParties.indexOf(tab_origin) > -1) { + return {}; + } + + // abort if we already made a decision for this FQDN + let action = self.storage.getAction(request_host); + if (action != constants.NO_TRACKING && action != constants.ALLOW) { + return {}; + } + + // check if there are tracking cookies + if (hasCookieTracking(details, request_origin)) { + self._recordPrevalence(request_host, request_origin, tab_origin); + return {}; + } + }, + + /** + * Wraps _recordPrevalence for use outside of webRequest listeners. + * + * @param {String} tracker_fqdn The fully qualified domain name of the tracker + * @param {String} tracker_origin Base domain of the third party tracker + * @param {String} page_origin Base domain of page where tracking occurred + */ + updateTrackerPrevalence: function (tracker_fqdn, tracker_origin, page_origin) { + // abort if we already made a decision for this fqdn + let action = this.storage.getAction(tracker_fqdn); + if (action != constants.NO_TRACKING && action != constants.ALLOW) { + return; + } + + this._recordPrevalence( + tracker_fqdn, + tracker_origin, + page_origin + ); + }, + + /** + * Record HTTP request prevalence. Block a tracker if seen on more + * than constants.TRACKING_THRESHOLD pages + * + * NOTE: This is a private function and should never be called directly. + * All calls should be routed through heuristicBlockingAccounting for normal usage + * and updateTrackerPrevalence for manual modifications (e.g. importing + * tracker lists). + * + * @param {String} tracker_fqdn The FQDN of the third party tracker + * @param {String} tracker_origin Base domain of the third party tracker + * @param {String} page_origin Base domain of page where tracking occurred + */ + _recordPrevalence: function (tracker_fqdn, tracker_origin, page_origin) { + var snitchMap = this.storage.getStore('snitch_map'); + var firstParties = []; + if (snitchMap.hasItem(tracker_origin)) { + firstParties = snitchMap.getItem(tracker_origin); + } + + // GDPR Consent Management Provider + // https://github.com/EFForg/privacybadger/pull/2245#issuecomment-545545717 + if (tracker_origin == "consensu.org") { + return; + } + + if (firstParties.indexOf(page_origin) != -1) { + return; // We already know about the presence of this tracker on the given domain + } + + // record that we've seen this tracker on this domain (in snitch map) + firstParties.push(page_origin); + snitchMap.setItem(tracker_origin, firstParties); + + // ALLOW indicates this is a tracker still below TRACKING_THRESHOLD + // (vs. NO_TRACKING for resources we haven't seen perform tracking yet). + // see https://github.com/EFForg/privacybadger/pull/1145#discussion_r96676710 + this.storage.setupHeuristicAction(tracker_fqdn, constants.ALLOW); + this.storage.setupHeuristicAction(tracker_origin, constants.ALLOW); + + // Blocking based on outbound cookies + var httpRequestPrevalence = firstParties.length; + + // block the origin if it has been seen on multiple first party domains + if (httpRequestPrevalence >= constants.TRACKING_THRESHOLD) { + log('blocklisting origin', tracker_fqdn); + this.blocklistOrigin(tracker_origin, tracker_fqdn); + } + } +}; + + +// This maps cookies to a rough estimate of how many bits of +// identifying info we might be letting past by allowing them. +// (map values to lower case before using) +// TODO: We need a better heuristic +var lowEntropyCookieValues = { + "":3, + "nodata":3, + "no_data":3, + "yes":3, + "no":3, + "true":3, + "false":3, + "dnt":3, + "opt-out":3, + "optout":3, + "opt_out":3, + "0":4, + "1":4, + "2":4, + "3":4, + "4":4, + "5":4, + "6":4, + "7":4, + "8":4, + "9":4, + // ISO 639-1 language codes + "aa":8, + "ab":8, + "ae":8, + "af":8, + "ak":8, + "am":8, + "an":8, + "ar":8, + "as":8, + "av":8, + "ay":8, + "az":8, + "ba":8, + "be":8, + "bg":8, + "bh":8, + "bi":8, + "bm":8, + "bn":8, + "bo":8, + "br":8, + "bs":8, + "by":8, + "ca":8, + "ce":8, + "ch":8, + "co":8, + "cr":8, + "cs":8, + "cu":8, + "cv":8, + "cy":8, + "da":8, + "de":8, + "dv":8, + "dz":8, + "ee":8, + "el":8, + "en":8, + "eo":8, + "es":8, + "et":8, + "eu":8, + "fa":8, + "ff":8, + "fi":8, + "fj":8, + "fo":8, + "fr":8, + "fy":8, + "ga":8, + "gd":8, + "gl":8, + "gn":8, + "gu":8, + "gv":8, + "ha":8, + "he":8, + "hi":8, + "ho":8, + "hr":8, + "ht":8, + "hu":8, + "hy":8, + "hz":8, + "ia":8, + "id":8, + "ie":8, + "ig":8, + "ii":8, + "ik":8, + "in":8, + "io":8, + "is":8, + "it":8, + "iu":8, + "ja":8, + "jv":8, + "ka":8, + "kg":8, + "ki":8, + "kj":8, + "kk":8, + "kl":8, + "km":8, + "kn":8, + "ko":8, + "kr":8, + "ks":8, + "ku":8, + "kv":8, + "kw":8, + "ky":8, + "la":8, + "lb":8, + "lg":8, + "li":8, + "ln":8, + "lo":8, + "lt":8, + "lu":8, + "lv":8, + "mg":8, + "mh":8, + "mi":8, + "mk":8, + "ml":8, + "mn":8, + "mr":8, + "ms":8, + "mt":8, + "my":8, + "na":8, + "nb":8, + "nd":8, + "ne":8, + "ng":8, + "nl":8, + "nn":8, + "nr":8, + "nv":8, + "ny":8, + "oc":8, + "of":8, + "oj":8, + "om":8, + "or":8, + "os":8, + "pa":8, + "pi":8, + "pl":8, + "ps":8, + "pt":8, + "qu":8, + "rm":8, + "rn":8, + "ro":8, + "ru":8, + "rw":8, + "sa":8, + "sc":8, + "sd":8, + "se":8, + "sg":8, + "si":8, + "sk":8, + "sl":8, + "sm":8, + "sn":8, + "so":8, + "sq":8, + "sr":8, + "ss":8, + "st":8, + "su":8, + "sv":8, + "sw":8, + "ta":8, + "te":8, + "tg":8, + "th":8, + "ti":8, + "tk":8, + "tl":8, + "tn":8, + "to":8, + "tr":8, + "ts":8, + "tt":8, + "tw":8, + "ty":8, + "ug":8, + "uk":8, + "ur":8, + "uz":8, + "ve":8, + "vi":8, + "vo":8, + "wa":8, + "wo":8, + "xh":8, + "yi":8, + "yo":8, + "za":8, + "zh":8, + "zu":8 +}; + +/** + * Extract cookies from onBeforeSendHeaders + * + * @param details Details for onBeforeSendHeaders + * @returns {*} an array combining all Cookies + */ +function _extractCookies(details) { + let cookies = [], + headers = []; + + if (details.requestHeaders) { + headers = details.requestHeaders; + } else if (details.responseHeaders) { + headers = details.responseHeaders; + } + + for (let i = 0; i < headers.length; i++) { + let header = headers[i]; + if (header.name.toLowerCase() == "cookie" || header.name.toLowerCase() == "set-cookie") { + cookies.push(header.value); + } + } + + return cookies; +} + +/** + * Check if page is doing cookie tracking. Doing this by estimating the entropy of the cookies + * + * @param details details onBeforeSendHeaders details + * @param {String} origin URL + * @returns {boolean} true if it has cookie tracking + */ +function hasCookieTracking(details, origin) { + let cookies = _extractCookies(details); + if (!cookies.length) { + return false; + } + + let estimatedEntropy = 0; + + // loop over every cookie + for (let i = 0; i < cookies.length; i++) { + let cookie = utils.parseCookie(cookies[i], { + noDecode: true, + skipAttributes: true, + skipNonValues: true + }); + + // loop over every name/value pair in every cookie + for (let name in cookie) { + if (!cookie.hasOwnProperty(name)) { + continue; + } + + // ignore CloudFlare + // https://support.cloudflare.com/hc/en-us/articles/200170156-Understanding-the-Cloudflare-Cookies + if (name == "__cfduid" || name == "__cf_bm") { + continue; + } + + let value = cookie[name].toLowerCase(); + + if (!(value in lowEntropyCookieValues)) { + return true; + } + + estimatedEntropy += lowEntropyCookieValues[value]; + } + } + + log("All cookies for " + origin + " deemed low entropy..."); + if (estimatedEntropy > constants.MAX_COOKIE_ENTROPY) { + log("But total estimated entropy is " + estimatedEntropy + " bits, so blocking"); + return true; + } + + return false; +} + +function startListeners() { + /** + * Adds heuristicBlockingAccounting as listened to onBeforeSendHeaders request + */ + let extraInfoSpec = ['requestHeaders']; + if (chrome.webRequest.OnBeforeSendHeadersOptions.hasOwnProperty('EXTRA_HEADERS')) { + extraInfoSpec.push('extraHeaders'); + } + chrome.webRequest.onBeforeSendHeaders.addListener(function(details) { + return badger.heuristicBlocking.heuristicBlockingAccounting(details); + }, {urls: [""]}, extraInfoSpec); + + /** + * Adds onResponseStarted listener. Monitor for cookies + */ + extraInfoSpec = ['responseHeaders']; + if (chrome.webRequest.OnResponseStartedOptions.hasOwnProperty('EXTRA_HEADERS')) { + extraInfoSpec.push('extraHeaders'); + } + chrome.webRequest.onResponseStarted.addListener(function(details) { + var hasSetCookie = false; + for (var i = 0; i < details.responseHeaders.length; i++) { + if (details.responseHeaders[i].name.toLowerCase() == "set-cookie") { + hasSetCookie = true; + break; + } + } + if (hasSetCookie) { + return badger.heuristicBlocking.heuristicBlockingAccounting(details); + } + }, + {urls: [""]}, extraInfoSpec); +} + +/************************************** exports */ +var exports = {}; +exports.HeuristicBlocker = HeuristicBlocker; +exports.startListeners = startListeners; +exports.hasCookieTracking = hasCookieTracking; +return exports; +/************************************** exports */ +})(); diff --git a/src/js/htmlutils.js b/src/js/htmlutils.js new file mode 100644 index 0000000..2c015d4 --- /dev/null +++ b/src/js/htmlutils.js @@ -0,0 +1,283 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +require.scopes.htmlutils = (function() { + +const i18n = chrome.i18n; +const constants = require("constants"); + +let htmlUtils = { + + // default Tooltipster config + TOOLTIPSTER_DEFAULTS: { + // allow per-instance option overriding + functionInit: function (instance, helper) { + let dataOptions = helper.origin.dataset.tooltipster; + + if (dataOptions) { + try { + dataOptions = JSON.parse(dataOptions); + } catch (e) { + console.error(e); + } + + for (let name in dataOptions) { + instance.option(name, dataOptions[name]); + } + } + }, + }, + + // Tooltipster config for domain list tooltips + DOMAIN_TOOLTIP_CONF: { + delay: 100, + side: 'bottom', + }, + + /** + * Gets localized description for given action and origin. + * + * @param {String} action The action to get description for. + * @param {String} origin The origin to get description for. + * @returns {String} Localized action description with origin. + */ + getActionDescription: (function () { + const messages = { + block: i18n.getMessage('badger_status_block', "XXX"), + cookieblock: i18n.getMessage('badger_status_cookieblock', "XXX"), + noaction: i18n.getMessage('badger_status_noaction', "XXX"), + allow: i18n.getMessage('badger_status_allow', "XXX"), + dntTooltip: i18n.getMessage('dnt_tooltip') + }; + return function (action, origin) { + if (action == constants.DNT) { + return messages.dntTooltip; + } + + const rv_action = messages[action]; + + if (!rv_action) { + return origin; + } + + return rv_action.replace("XXX", origin); + }; + }()), + + /** + * Gets HTML for origin action toggle switch (block, block cookies, allow). + * + * @param {String} origin Origin to get toggle for. + * @param {String} action Current action of given origin. + * @returns {String} HTML for toggle switch. + */ + getToggleHtml: (function () { + + function is_checked(input_action, origin_action) { + if ((origin_action == constants.NO_TRACKING) || (origin_action == constants.DNT)) { + origin_action = constants.ALLOW; + } + return (input_action === origin_action ? 'checked' : ''); + } + + let tooltips = { + block: i18n.getMessage('domain_slider_block_tooltip'), + cookieblock: i18n.getMessage('domain_slider_cookieblock_tooltip'), + allow: i18n.getMessage('domain_slider_allow_tooltip') + }; + + return function (origin, action) { + let origin_id = origin.replace(/\./g, '-'); + + return ` +
+
+ + + + + + + +
+
+ `.trim(); + }; + + }()), + + /** + * Get HTML for tracker container. + * + * @returns {String} HTML for empty tracker container. + */ + getTrackerContainerHtml: function() { + return ` +
+
+ +
+
+
+
+ `.trim(); + }, + + /** + * Generates HTML for given origin. + * + * @param {String} origin Origin to get HTML for. + * @param {String} action Action for given origin. + * @param {Boolean} show_breakage_warning + * @returns {String} Origin HTML. + */ + getOriginHtml: (function () { + + const breakage_warning_tooltip = i18n.getMessage('breakage_warning_tooltip'), + undo_arrow_tooltip = i18n.getMessage('feed_the_badger_title'), + dnt_icon_url = chrome.runtime.getURL('/icons/dnt-16.png'); + + return function (origin, action, show_breakage_warning) { + action = _.escape(action); + origin = _.escape(origin); + + // Get classes for main div. + let classes = ['clicker']; + if (action.startsWith('user')) { + classes.push('userset'); + action = action.slice(5); + } + // show warning when manually blocking a domain + // that would have been cookieblocked otherwise + if (show_breakage_warning) { + classes.push('show-breakage-warning'); + } + + // If origin has been whitelisted set text for DNT. + let dnt_html = ''; + if (action == constants.DNT) { + dnt_html = ` +
+ +
+ `.trim(); + } + + // Construct HTML for origin. + let origin_tooltip = htmlUtils.getActionDescription(action, origin); + return ` +
+
+ + ${dnt_html}${origin} +
+ + ${htmlUtils.getToggleHtml(origin, action)} + +
+ `.trim(); + }; + + }()), + + /** + * Toggles undo arrows and breakage warnings in domain slider rows. + * TODO rename/refactor with updateOrigin() + * + * @param {jQuery} $clicker + * @param {Boolean} userset whether to show a revert control arrow + * @param {Boolean} show_breakage_warning whether to show a breakage warning + */ + toggleBlockedStatus: function ($clicker, userset, show_breakage_warning) { + $clicker.removeClass([ + "userset", + "show-breakage-warning", + ].join(" ")); + + // toggles revert control arrow via CSS + if (userset) { + $clicker.addClass("userset"); + } + + // show warning when manually blocking a domain + // that would have been cookieblocked otherwise + if (show_breakage_warning) { + $clicker.addClass("show-breakage-warning"); + } + }, + + /** + * Compare two domains, reversing them to start comparing the least + * significant parts (TLD) first. + * + * @param {Array} domains The domains to sort. + * @returns {Array} Sorted domains. + */ + sortDomains: (domains) => { + // optimization: cache makeSortable output by walking the array once + // to extract the actual values used for sorting into a temporary array + return domains.map((domain, i) => { + return { + index: i, + value: htmlUtils.makeSortable(domain) + }; + // sort the temporary array + }).sort((a, b) => { + if (a.value > b.value) { + return 1; + } + if (a.value < b.value) { + return -1; + } + return 0; + // walk the temporary array to achieve the right order + }).map(item => domains[item.index]); + }, + + /** + * Reverse order of domain items to have the least exact (TLD) first. + * + * @param {String} domain The domain to shuffle + * @returns {String} The 'reversed' domain + */ + makeSortable: (domain) => { + let base = window.getBaseDomain(domain), + base_minus_tld = base, + dot_index = base.indexOf('.'), + rest_of_it_reversed = ''; + + if (domain.length > base.length) { + rest_of_it_reversed = domain + .slice(0, domain.length - base.length - 1) + .split('.').reverse().join('.'); + } + + if (dot_index > -1 && !window.isIPv4(domain) && !window.isIPv6(domain)) { + base_minus_tld = base.slice(0, dot_index); + } + + return (base_minus_tld + '.' + rest_of_it_reversed); + }, + +}; + +let exports = { + htmlUtils, +}; +return exports; + +})(); diff --git a/src/js/incognito.js b/src/js/incognito.js new file mode 100644 index 0000000..56d2d93 --- /dev/null +++ b/src/js/incognito.js @@ -0,0 +1,49 @@ +/* globals badger:false */ + +require.scopes.incognito = (function() { +var tabs = {}; + +// Get all existing tabs +chrome.tabs.query({}, function(results) { + results.forEach(function(tab) { + tabs[tab.id] = tab.incognito; + }); +}); + +// Create tab event listeners +function onUpdatedListener(tabId, changeInfo, tab) { + tabs[tab.id] = tab.incognito; +} + +function onRemovedListener(tabId) { + delete tabs[tabId]; +} + +// Subscribe to tab events +function startListeners() { + chrome.tabs.onUpdated.addListener(onUpdatedListener); + chrome.tabs.onRemoved.addListener(onRemovedListener); +} + +function learningEnabled(tab_id) { + if (badger.getSettings().getItem("learnInIncognito")) { + // treat all pages as if they're not incognito + return true; + } + // if we don't have incognito data for whatever reason, + // default to disabled + if (!tabs.hasOwnProperty(tab_id)) { + return false; + } + // else, do not learn in incognito tabs + return !tabs[tab_id]; +} + +/************************************** exports */ +let exports = { + learningEnabled, + startListeners, +}; +return exports; +/************************************** exports */ +})(); diff --git a/src/js/migrations.js b/src/js/migrations.js new file mode 100644 index 0000000..cea4d37 --- /dev/null +++ b/src/js/migrations.js @@ -0,0 +1,356 @@ +/* + * This file is part of Privacy Badger + * Copyright (C) 2014 Electronic Frontier Foundation + * + * Privacy Badger is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Privacy Badger is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Badger. If not, see . + */ + +require.scopes.migrations = (function () { + +let utils = require("utils"); +let constants = require("constants"); + +let noop = function () {}; + +let exports = {}; + +exports.Migrations= { + changePrivacySettings: noop, + migrateAbpToStorage: noop, + + migrateBlockedSubdomainsToCookieblock: function(badger) { + setTimeout(function() { + console.log('MIGRATING BLOCKED SUBDOMAINS THAT ARE ON COOKIE BLOCK LIST'); + let ylist = badger.storage.getStore('cookieblock_list'); + badger.storage.getAllDomainsByPresumedAction(constants.BLOCK).forEach(fqdn => { + utils.explodeSubdomains(fqdn, true).forEach(domain => { + if (ylist.hasItem(domain)) { + console.log('moving', fqdn, 'from block to cookie block'); + badger.storage.setupHeuristicAction(fqdn, constants.COOKIEBLOCK); + } + }); + }); + }, 1000 * 30); + }, + + migrateLegacyFirefoxData: noop, + + migrateDntRecheckTimes: function(badger) { + var action_map = badger.storage.getStore('action_map'); + for (var domain in action_map.getItemClones()) { + if (badger.storage.getNextUpdateForDomain(domain) === 0) { + // Recheck at a random time in the next week + var recheckTime = _.random(Date.now(), utils.nDaysFromNow(7)); + badger.storage.touchDNTRecheckTime(domain, recheckTime); + } + } + + }, + + // Fixes https://github.com/EFForg/privacybadger/issues/1181 + migrateDntRecheckTimes2: function(badger) { + console.log('fixing DNT check times'); + var action_map = badger.storage.getStore('action_map'); + for (var domain in action_map.getItemClones()) { + // Recheck at a random time in the next week + var recheckTime = _.random(utils.oneDayFromNow(), utils.nDaysFromNow(7)); + badger.storage.touchDNTRecheckTime(domain, recheckTime); + } + }, + + forgetMistakenlyBlockedDomains: function (badger) { + console.log("Running migration to forget mistakenly flagged domains ..."); + + const MISTAKES = new Set([ + '2mdn.net', + 'akamaized.net', + 'bootcss.com', + 'cloudinary.com', + 'edgesuite.net', + 'ehowcdn.com', + 'ewscloud.com', + 'fncstatic.com', + 'fontawesome.com', + 'hgmsites.net', + 'hsforms.net', + 'hubspot.com', + 'jsdelivr.net', + 'jwplayer.com', + 'jwpsrv.com', + 'kinja-img.com', + 'kxcdn.com', + 'ldwgroup.com', + 'metapix.net', + 'optnmstr.com', + 'parastorage.com', + 'polyfill.io', + 'qbox.me', + 'rfdcontent.com', + 'scene7.com', + 'sinaimg.cn', + 'slidesharecdn.com', + 'staticworld.net', + 'taleo.net', + 'techhive.com', + 'unpkg.com', + 'uvcdn.com', + 'washingtonpost.com', + 'wixstatic.com', + 'ykimg.com', + ]); + + const actionMap = badger.storage.getStore("action_map"), + actions = actionMap.getItemClones(), + snitchMap = badger.storage.getStore("snitch_map"); + + for (let domain in actions) { + const base = window.getBaseDomain(domain); + + if (!MISTAKES.has(base)) { + continue; + } + + // remove only if + // user did not set an override + // and domain was seen tracking + const map = actions[domain]; + if (map.userAction != "" || ( + map.heuristicAction != constants.ALLOW && + map.heuristicAction != constants.BLOCK && + map.heuristicAction != constants.COOKIEBLOCK + )) { + continue; + } + + console.log("Removing %s ...", domain); + actionMap.deleteItem(domain); + snitchMap.deleteItem(base); + } + }, + + unblockIncorrectlyBlockedDomains: function (badger) { + console.log("Running migration to unblock likely incorrectly blocked domains ..."); + + let action_map = badger.storage.getStore("action_map"), + snitch_map = badger.storage.getStore("snitch_map"); + + // for every blocked domain + for (let domain in action_map.getItemClones()) { + if (action_map.getItem(domain).heuristicAction != constants.BLOCK) { + continue; + } + + let base_domain = window.getBaseDomain(domain); + + // let's check snitch map + // to see what state the blocked domain should be in instead + let sites = snitch_map.getItem(base_domain); + + // default to "no tracking" + // using "" and not constants.NO_TRACKING to match current behavior + let action = ""; + + if (sites && sites.length) { + if (sites.length >= constants.TRACKING_THRESHOLD) { + // tracking domain over threshold, set it to cookieblock or block + badger.heuristicBlocking.blocklistOrigin(base_domain, domain); + continue; + + } else { + // tracking domain below threshold + action = constants.ALLOW; + } + } + + badger.storage.setupHeuristicAction(domain, action); + } + }, + + forgetBlockedDNTDomains: function(badger) { + console.log('Running migration to forget mistakenly blocked DNT domains'); + + let action_map = badger.storage.getStore("action_map"), + snitch_map = badger.storage.getStore("snitch_map"), + domainsToFix = new Set(['eff.org', 'medium.com']); + + for (let domain in action_map.getItemClones()) { + let base = window.getBaseDomain(domain); + if (domainsToFix.has(base)) { + action_map.deleteItem(domain); + snitch_map.deleteItem(base); + } + } + }, + + reapplyYellowlist: function (badger) { + console.log("(Re)applying yellowlist ..."); + + let blocked = badger.storage.getAllDomainsByPresumedAction( + constants.BLOCK); + + // reblock all blocked domains to trigger yellowlist logic + for (let i = 0; i < blocked.length; i++) { + let domain = blocked[i]; + badger.heuristicBlocking.blocklistOrigin( + window.getBaseDomain(domain), domain); + } + }, + + forgetNontrackingDomains: function (badger) { + console.log("Forgetting non-tracking domains ..."); + + const actionMap = badger.storage.getStore("action_map"), + actions = actionMap.getItemClones(); + + for (let domain in actions) { + const map = actions[domain]; + if (map.userAction == "" && map.heuristicAction == "") { + actionMap.deleteItem(domain); + } + } + }, + + resetWebRTCIPHandlingPolicy: noop, + + enableShowNonTrackingDomains: function (badger) { + console.log("Enabling showNonTrackingDomains for some users"); + + let actionMap = badger.storage.getStore("action_map"), + actions = actionMap.getItemClones(); + + // if we have any customized sliders + if (Object.keys(actions).some(domain => actions[domain].userAction != "")) { + // keep showing non-tracking domains in the popup + badger.getSettings().setItem("showNonTrackingDomains", true); + } + }, + + forgetFirstPartySnitches: function (badger) { + console.log("Removing first parties from snitch map..."); + let snitchMap = badger.storage.getStore("snitch_map"), + actionMap = badger.storage.getStore("action_map"), + snitchClones = snitchMap.getItemClones(), + actionClones = actionMap.getItemClones(), + correctedSites = {}; + + for (let domain in snitchClones) { + // creates new array of domains checking against the isThirdParty utility + let newSnitches = snitchClones[domain].filter( + item => utils.isThirdPartyDomain(item, domain)); + + if (newSnitches.length) { + correctedSites[domain] = newSnitches; + } + } + + // clear existing maps and then use mergeUserData to rebuild them + actionMap.updateObject({}); + snitchMap.updateObject({}); + + const data = { + snitch_map: correctedSites, + action_map: actionClones + }; + + // pass in boolean 2nd parameter to flag that it's run in a migration, preventing infinite loop + badger.mergeUserData(data, true); + }, + + forgetCloudflare: function (badger) { + let config = { + name: '__cfduid' + }; + if (badger.firstPartyDomainPotentiallyRequired) { + config.firstPartyDomain = null; + } + + chrome.cookies.getAll(config, function (cookies) { + console.log("Forgetting Cloudflare domains ..."); + + let actionMap = badger.storage.getStore("action_map"), + actionClones = actionMap.getItemClones(), + snitchMap = badger.storage.getStore("snitch_map"), + snitchClones = snitchMap.getItemClones(), + correctedSites = {}, + // assume the tracking domains seen on these sites are all Cloudflare + cfduidFirstParties = new Set(); + + cookies.forEach(function (cookie) { + // get the base domain (also removes the leading dot) + cfduidFirstParties.add(window.getBaseDomain(cookie.domain)); + }); + + for (let domain in snitchClones) { + let newSnitches = snitchClones[domain].filter( + item => !cfduidFirstParties.has(item)); + + if (newSnitches.length) { + correctedSites[domain] = newSnitches; + } + } + + // clear existing maps and then use mergeUserData to rebuild them + actionMap.updateObject({}); + snitchMap.updateObject({}); + + const data = { + snitch_map: correctedSites, + action_map: actionClones + }; + + // pass in boolean 2nd parameter to flag that it's run in a migration, preventing infinite loop + badger.mergeUserData(data, true); + }); + }, + + // https://github.com/EFForg/privacybadger/pull/2245#issuecomment-545545717 + forgetConsensu: (badger) => { + console.log("Forgetting consensu.org domains (GDPR consent provider) ..."); + badger.storage.forget("consensu.org"); + }, + + resetWebRTCIPHandlingPolicy2: function (badger) { + if (!badger.webRTCAvailable) { + return; + } + + const cpn = chrome.privacy.network; + + cpn.webRTCIPHandlingPolicy.get({}, function (result) { + if (!result.levelOfControl.endsWith('_by_this_extension')) { + return; + } + + // migrate default (disabled) setting for old Badger versions + // from Mode 3 to Mode 1 + if (result.value == 'default_public_interface_only') { + console.log("Resetting webRTCIPHandlingPolicy ..."); + cpn.webRTCIPHandlingPolicy.clear({}); + + // migrate enabled setting for more recent Badger versions + // from Mode 4 to Mode 3 + } else if (result.value == 'disable_non_proxied_udp') { + console.log("Updating WebRTC IP leak protection setting ..."); + cpn.webRTCIPHandlingPolicy.set({ + value: 'default_public_interface_only' + }); + } + }); + } + +}; + + + +return exports; +})(); //require scopes diff --git a/src/js/multiDomainFirstParties.js b/src/js/multiDomainFirstParties.js new file mode 100644 index 0000000..271d9b8 --- /dev/null +++ b/src/js/multiDomainFirstParties.js @@ -0,0 +1,4133 @@ +require.scopes.multiDomainFP = (function () { + +/** + * 2d array of related domains (etld+1), all domains owned by the same entity go into + * an array, this is later transformed for efficient lookups. + */ +let multiDomainFirstPartiesArray = [ + ["1800contacts.com", "800contacts.com"], + ["37signals.com", "basecamp.com", "basecamphq.com", "highrisehq.com"], + ["9gag.com", "9cache.com"], + ["accountonline.com", "citi.com", "citibank.com", "citicards.com", "citibankonline.com"], + [ + "adidas-group.com", + + "adidas.ae", + "adidas.at", + "adidas.be", + "adidas.ca", + "adidas.ch", + "adidas.cl", + "adidas.cn", + "adidas.co", + "adidas.co.id", + "adidas.co.in", + "adidas.co.kr", + "adidas.com", + "adidas.com.ar", + "adidas.com.au", + "adidas.com.br", + "adidas.com.co", + "adidas.com.hk", + "adidas.com.my", + "adidas.com.om", + "adidas.com.pe", + "adidas.com.ph", + "adidas.com.qa", + "adidas.com.sa", + "adidas.com.sg", + "adidas.com.tr", + "adidas.com.tw", + "adidas.com.vn", + "adidas.co.nz", + "adidas.co.th", + "adidas.co.uk", + "adidas.co.za", + "adidas.cz", + "adidas.de", + "adidas.dk", + "adidas.es", + "adidas.fi", + "adidas.fr", + "adidas.gr", + "adidas.hu", + "adidas.ie", + "adidas.it", + "adidas.jp", + "adidas.mx", + "adidas.nl", + "adidas.no", + "adidas.pe", + "adidas.pl", + "adidas.pt", + "adidas.ru", + "adidas.se", + "adidas.sk", + "adidas.us", + ], + [ + "adobe.com", + "adobeexchange.com", + "adobe.io", + "adobelogin.com", + "behance.net", + "mixamo.com", + "myportfolio.com", + "typekit.com", + ], + [ + "airbnb.com", + + "airbnb.ae", + "airbnb.al", + "airbnb.am", + "airbnb.at", + "airbnb.az", + "airbnb.ba", + "airbnb.be", + "airbnb.ca", + "airbnb.cat", + "airbnb.ch", + "airbnb.cl", + "airbnb.co.cr", + "airbnb.co.id", + "airbnb.co.il", + "airbnb.co.in", + "airbnb.co.kr", + "airbnb.com.ar", + "airbnb.com.au", + "airbnb.com.bo", + "airbnb.com.br", + "airbnb.com.bz", + "airbnb.com.co", + "airbnb.com.ec", + "airbnb.com.ee", + "airbnb.com.gt", + "airbnb.com.hk", + "airbnb.com.hn", + "airbnb.com.hr", + "airbnb.com.kh", + "airbnb.com.mt", + "airbnb.com.my", + "airbnb.com.ni", + "airbnb.com.pa", + "airbnb.com.pe", + "airbnb.com.ph", + "airbnb.com.py", + "airbnb.com.ro", + "airbnb.com.sg", + "airbnb.com.sv", + "airbnb.com.tr", + "airbnb.com.tw", + "airbnb.com.ua", + "airbnb.com.vn", + "airbnb.co.nz", + "airbnb.co.uk", + "airbnb.co.ve", + "airbnb.co.za", + "airbnb.cz", + "airbnb.de", + "airbnb.dk", + "airbnb.es", + "airbnb.fi", + "airbnb.fr", + "airbnb.gr", + "airbnb.gy", + "airbnb.hu", + "airbnb.ie", + "airbnb.is", + "airbnb.it", + "airbnb.jp", + "airbnb.la", + "airbnb.lt", + "airbnb.lu", + "airbnb.lv", + "airbnb.me", + "airbnb.mx", + "airbnb.nl", + "airbnb.no", + "airbnb.pl", + "airbnb.pt", + "airbnb.rs", + "airbnb.ru", + "airbnb.se", + "airbnb.si", + + "muscache.com", + ], + [ + "airfranceklm.com", + + "airfrance.cg", + "airfrance.ci", + "airfrance.com.cn", + "airfrance.com.do", + "airfrance.com.gh", + "airfrance.dz", + "airfrance.id", + "airfrance.in", + "airfrance.my", + "airfrance.ng", + "airfrance.pa", + "airfrance.tn", + "airfrance.vn", + + "klm.ae", + "klm.at", + "klm.aw", + "klm.be", + "klm.bg", + "klm.by", + "klm.bz", + "klm.ca", + "klm.ch", + "klm.cl", + "klm.co.ao", + "klm.co.cr", + "klm.co.id", + "klm.co.il", + "klm.co.in", + "klm.co.jp", + "klm.co.ke", + "klm.co.kr", + "klm.com", + "klm.com.ar", + "klm.com.au", + "klm.com.bh", + "klm.com.br", + "klm.com.co", + "klm.com.cy", + "klm.com.ec", + "klm.com.eg", + "klm.com.gh", + "klm.com.hk", + "klm.com.mt", + "klm.com.mx", + "klm.com.my", + "klm.com.na", + "klm.com.ng", + "klm.com.pa", + "klm.com.pe", + "klm.com.ph", + "klm.com.py", + "klm.com.qa", + "klm.com.tr", + "klm.com.tw", + "klm.com.uy", + "klm.co.nz", + "klm.co.th", + "klm.co.tz", + "klm.co.ug", + "klm.co.uk", + "klm.co.za", + "klm.co.zm", + "klm.cw", + "klm.cz", + "klm.de", + "klm.dk", + "klm.do", + "klm.es", + "klm.fi", + "klm.fr", + "klm.ge", + "klm.gr", + "klm.hr", + "klm.hu", + "klm.ie", + "klm.it", + "klm.kz", + "klm.lk", + "klm.lt", + "klm.lu", + "klm.lv", + "klm.mu", + "klm.mw", + "klm.nc", + "klm.nl", + "klm.no", + "klm.pl", + "klm.pt", + "klm.ro", + "klm.ru", + "klm.se", + "klm.sg", + "klm.sk", + "klm.sr", + "klm.sx", + "klm.ua", + "klm.us", + + "static-af.com", + "static-kl.com", + ], + [ + "alibaba.com", + + "1688.com", + "95095.com", + "9game.cn", + "aliapp.org", + "alibabacloud.co.in", + "alibabacloud.com", + "alibabacloud.com.au", + "alibabacloud.com.hk", + "alibabacloud.com.my", + "alibabacloud.com.sg", + "alibabacloud.com.tw", + "alibabacorp.com", + "alibabagroup.com", + "alibaba-inc.com", + "alicdn.com", + "alicdn.net", + "alicloud.com", + "aliexpress.com", + "aliexpress.ru", + "alifanyi.com", + "aligames.com", + "alihealth.cn", + "alihive.com", + "aliimg.com", + "alimama.com", + "alimei.com", + "aliplus.com", + "alitrip.com", + "alitrip.hk", + "aliyun.com", + "aliyuncs.com", + "aliyun-iot-share.com", + "amap.com", + "cainiao.com", + "cainiao.com.cn", + "cibntv.net", + "cnzz.com", + "dayu.com", + "dingtalkapps.com", + "dingtalk.com", + "dongting.com", + "ele.me", + "elenet.me", + "etao.com", + "feizhu.cn", + "feizhu.com", + "fliggy.com", + "fliggy.hk", + "i52hz.com", + "jiaoyimao.com", + "jingguan.ai", + "jiyoujia.com", + "juhuasuan.com", + "kumiao.com", + "laifeng.com", + "liangxinyao.com", + "mappcloud.com", + "mei.com", + "mmstat.com", + "mobmore.com", + "paike.com", + "phpwind.com", + "phpwind.net", + "puata.info", + "soku.com", + "sparenode.com", + "supet.com", + "tanx.com", + "taobao.com", + "taopiaopiao.com", + "tbcdn.cn", + "tburl.in", + "teambitionapis.com", + "teambition.com", + "teambition.net", + "tianchi-global.com", + "tmail.com", + "tmall.com", + "tmall.hk", + "ttpod.com", + "tudou.com", + "uc.cn", + "ucweb.com", + "um0.cn", + "umengcloud.com", + "umeng.co", + "umeng.com", + "umindex.com", + "umsns.com", + "umtrack.com", + "wasu.tv", + "whalecloud.com", + "www.net.cn", + "xiami.com", + "ykimg.com", + "youku.com", + "youkutv.com", + "yousuode.cn", + + + "alipay.com", + + "aliloan.com", + "alipay-cloud.com", + "alipay.cn", + "alipay-eco.com", + "alipay.hk", + "alipayobjects.com", + "alipayplus.com", + "ant-biz.com", + "ant-financial.com", + "antfin.com", + "antfin-inc.com", + "antfortune.com", + "antgroup.com", + "ant-open.com", + "antsdaq.com", + "ebuckler.com", + "fund123.cn", + "huijucai.com", + "koubei.com", + "mayiyunbao.com", + "mybank.cn", + "sinopayment.com.cn", + "ssdata.com", + "xin.xin", + "yidun.com", + "zamcs.com", + "zhisheng.com", + "zmxy.com.cn", + + "lazada.com", + + "lazada.co.id", + "lazada.com.my", + "lazada.com.ph", + "lazada.co.th", + "lazada.sg", + "lazada.vn", + ], + ["allstate.com", "myallstate.com"], + ["altra.org", "altraonline.org"], + [ + "amazon.com", + + "amazon.ae", + "amazon.ca", + "amazon.cn", + "amazon.co.jp", + "amazon.com.au", + "amazon.com.br", + "amazon.com.mx", + "amazon.com.sg", + "amazon.com.tr", + "amazon.co.uk", + "amazon.de", + "amazon.es", + "amazon.fr", + "amazon.in", + "amazon.it", + "amazon.nl", + + "audible.com", + "audible.co.jp", + "audible.com.au", + "audible.co.uk", + "audible.de", + "audible.fr", + "audible.in", + "audible.it", + + "6pm.com", + "acx.com", + "amazoninspire.com", + "aws.training", + "brilliancepublishing.com", + "comixology.com", + "createspace.com", + "dpreview.com", + "eastdane.com", + "fabric.com", + "goodreads.com", + "imdb.com", + "pillpack.com", + "primevideo.com", + "shopbop.com", + "wholefoodsmarket.com", + "woot.com", + "zappos.com", + + "twitch.tv", + "ext-twitch.tv", + "jtvnw.net", + "ttvnw.net", + + "amazonpay.com", + "media-amazon.com", + "ssl-images-amazon.com", + ], + [ + "americanexpress.com", + + "americanexpress.ca", + "americanexpress.ch", + "americanexpress.com.au", + "americanexpress.co.uk", + "americanexpress.no", + + "membershiprewards.ca", + "membershiprewards.com.ar", + "membershiprewards.com.au", + "membershiprewards.com.sg", + "membershiprewards.co.uk", + "membershiprewards.de", + + "aetclocator.com", + "americanexpressfhr.com", + "amexnetwork.com", + "amextravel.com", + "amextravelresources.com", + "thecenturionlounge.com", + "yourcarrentalclaim.com", + + "aexp-static.com", + ], + ["ameritrade.com", "tdameritrade.com"], + [ + "ancestry.com", + + "ancestry.ca", + "ancestry.com.au", + "ancestry.co.uk", + "ancestry.de", + "ancestry.fr", + "ancestry.ie", + "ancestry.it", + "ancestry.mx", + "ancestry.nl", + "ancestry.no", + "ancestry.pl", + "ancestry.se", + + "ancestrylibrary.com", + "archives.com", + "findagrave.com", + "fold3.com", + "newspapers.com", + "progenealogists.com", + "rootsweb.com", + + "ancestrylibrary.ca", + + "mfcreative.com", + "ancestrycdn.com", + ], + ["androidcentral.com", "mobilenations.com"], + [ + "apa.at", + "apa-it.at", + "apa-defacto.at", + "ots.at", + + "orf.at", + "oe24.at", + "wienerzeitung.at", + "kleinezeitung.at", + "vn.at", + "kurier.at", + "schautv.at", + "nachrichten.at", + "derstandard.at", + "sn.at", + "volksblatt.at", + "neue.at", + + "tt.com", + "diepresse.com", + ], + ["apple.com", "icloud.com", "icloud.com.cn", "cdn-apple.com"], + ["applefcu.org", "applefcuonline.org"], + ["archive.org", "openlibrary.org"], + ["asos.com", "asosservices.com"], + [ + "atlassian.com", + + "atlassian.io", + "atlassian.net", + "bitbucket.org", + "customercase.com", + "enso.me", + "hipchat.com", + "jira.com", + "statuspage.io", + "stride.com", + "trello.com", + + "atl-paas.net", + ], + [ + "att.com", + + "att.tv", + "atttvnow.com", + "attwatchtv.com", + "directv.com", + "directvnow.com", + ], + [ + "autodesk.com", + + "autodesk.io", + "autodesk.net", + "circuits.io", + "tinkercad.com", + + "autodesk.ae", + "autodesk.be", + "autodesk.ca", + "autodesk.ch", + "autodesk.co.jp", + "autodesk.co.kr", + "autodesk.com.au", + "autodesk.com.br", + "autodesk.com.cn", + "autodesk.com.hk", + "autodesk.com.my", + "autodesk.com.sg", + "autodesk.com.tr", + "autodesk.com.tw", + "autodesk.co.nz", + "autodesk.co.uk", + "autodesk.co.za", + "autodesk.cz", + "autodesk.de", + "autodesk.dk", + "autodesk.es", + "autodesk.eu", + "autodesk.fi", + "autodesk.fr", + "autodesk.hu", + "autodesk.in", + "autodesk.it", + "autodesk.mx", + "autodesk.nl", + "autodesk.no", + "autodesk.pl", + "autodesk.pt", + "autodesk.ru", + "autodesk.se", + ], + ["avito.ru", "avito.st"], + ["avon.com", "youravon.com"], + [ + "baidu.com", + + "hao123.com", + "tieba.com", + + "baidustatic.com", + "bdimg.com", + "bdstatic.com", + ], + ["balsamiq.com", "balsamiq.cloud"], + ["bancomer.com", "bancomer.com.mx", "bbvanet.com.mx"], + ["bankofamerica.com", "bofa.com", "mbna.com", "usecfo.com"], + ["bank-yahav.co.il", "bankhapoalim.co.il"], + [ + "bauermedia.co.uk", + + "carmagazine.co.uk", + "motorcyclenews.com", + "parkers.co.uk", + + "bauersecure.com", + ], + ["bbc.co.uk", "bbc.com", "bbci.co.uk"], + ["belkin.com", "seedonk.com"], + [ + "bellmedia.ca", + + "9c9media.ca", + "9c9media.com", + "animalplanet.ca", + "bardown.com", + "bnnbloomberg.ca", + "bnn.ca", + "bravo.ca", + "canald.com", + "canalvie.com", + "cinepop.ca", + "cmdy.ca", + "cookieless.ca", + "cp24.com", + "crave.ca", + "crave.com", + "cravetv.ca", + "ctv.ca", + "ctvdigital.net", + "ctvnews.ca", + "discovery.ca", + "discoveryvelocity.ca", + "envedette.ca", + "etalk.ca", + "fraichementpresse.ca", + "investigationdiscovery.ca", + "investigationtele.com", + "lookdujour.ca", + "marilyn.ca", + "mtv.ca", + "much.ca", + "much.com", + "muchmusic.com", + "muramur.ca", + "rds.ca", + "sciencechannel.ca", + "sego-cdn.com", + "space.ca", + "superecran.com", + "superecrango.com", + "sympatico.ca", + "thecomedynetwork.ca", + "theloop.ca", + "thesocial.ca", + "tmngo.ca", + "tsn.ca", + "voyagevoyage.ca", + "vrak.tv", + "ztele.com", + ], + ["bhphotovideo.com", "bandh.com", "bhphoto.com", "bnh.com"], + ["bilibili.com", "acgvideo.com", "biliapi.net", "biliapi.com", "biligame.com", "hdslb.com"], + ["binance.com", "binance.cloud", "binance.vision", "bnbstatic.com"], + ["blizzard.com", "battle.net", "worldofwarcraft.com"], + ["bloomberg.com", "bbthat.com", "bwbx.io"], + ["boardgamearena.com", "boardgamearena.net"], + ["booking.com", "bstatic.com"], + ["box.com", "boxcdn.net"], + [ + "bustle.company", + + "bustle.com", + "elitedaily.com", + "inputmag.com", + "inverse.com", + "mic.com", + "nylon.com", + "romper.com", + "thezoereport.com", + ], + [ + "canada.ca", + + "ceaa-acee.gc.ca", + "collectionscanada.gc.ca", + "cra-arc.gc.ca", + "dfo-mpo.gc.ca", + "ec.gc.ca", + "esdc.gc.ca", + "fcac-acfc.gc.ca", + "hrdc-drhc.gc.ca", + "ic.gc.ca", + "jobbank.gc.ca", + "labour.gc.ca", + "nrcan.gc.ca", + "sac-isc.gc.ca", + "servicecanada.gc.ca", + "services.gc.ca", + "statcan.gc.ca", + "tbs-sct.gc.ca", + "tc.gc.ca", + "tpsgc-pwgsc.gc.ca", + "weather.gc.ca", + + "archives.ca", + "canlearn.ca", + "gcsurplus.ca", + "letstalktransportation.ca", + ], + [ + "canalplus.com", + + "canal.fr", + "canalplay.com", + "canalplus-bo.net", + "canal-plus.com", + "canalplus.fr", + "canalplusinternational.com", + "canal-plus.net", + "canal-plus.pro", + "canalplus.pro", + "canalpro.fr", + "clique.tv", + "cstar.fr", + "mycanal.fr", + ], + ["capitalone.com", "capitalone360.com"], + [ + "cbs.com", + + "cbsi.com", + "cbsig.net", + "cbsimg.net", + "cbsinteractive.com", + "cbsistatic.com", + "cbslocal.com", + "cbsnews.com", + "cbssports.com", + "cbsstatic.com", + "chow.com", + "chowhound.com", + "chowmagazine.com", + "chowstatic.com", + "cnet.com", + "cnetcontent.com", + "cnettv.com", + "collegesports.com", + "com.com", + "comicvine.com", + "download.com", + "etonline.com", + "fansonly.com", + "gamespot.com", + "giantbomb.com", + "insideedition.com", + "last.fm", + "metacritic.com", + "news.com", + "scout.com", + "search.com", + "sho.com", + "sportsline.com", + "techrepublic.com", + "tv.com", + "tvgcdn.net", + "tvguide.com", + "upload.com", + "zdnet.com", + ], + ["cb2.com", "crateandbarrel.com"], + [ + "ccmbenchmark.com", + + "linternaute.com", + "journaldesfemmes.fr", + "journaldunet.com", + "commentcamarche.net", + + "ccmbg.com", + ], + ["century21.com", "21online.com"], + ["chart.io", "chartio.com"], + ["chaturbate.com", "highwebmedia.com"], + [ + "cisco.com", + + "ciscolive.com", + "duo.com", + "netacad.com", + "webex.com", + + "static-cisco.com", + ], + ["cms.gov", "medicare.gov", "mymedicare.gov"], + ["codepen.io", "cdpn.io"], + ["concur.com", "concursolutions.com"], + [ + "cornell.edu", + + "birdsna.org", + "birdsoftheworld.com", + "birdsoftheworld.org", + "ebird.org", + "hbw.com", + "macaulaylibrary.org", + ], + [ + "condenast.com", + + "architecturaldigest.com", + "arstechnica.com", + "bonappetit.com", + "cntraveler.com", + "epicurious.com", + "glamour.com", + "gq.com", + "lennyletter.com", + "newyorker.com", + "pitchfork.com", + "self.com", + "teenvogue.com", + "them.us", + "vanityfair.com", + "vogue.com", + "wired.com", + + "condenastdigital.com", + ], + ["cox.com", "cox.net"], + ["cricketwireless.com", "aiowireless.com"], + ["ctrip.com", "c-ctrip.com", "trip.com"], + ["dcu.org", "dcu-online.org"], + ["dictionary.com", "thesaurus.com", "sfdict.com"], + [ + "digikey.com", + + "digikey.ae", + "digikey.am", + "digikey.at", + "digikey.ba", + "digikey.be", + "digikey.bg", + "digikey.bo", + "digikey.by", + "digikey.ca", + "digikey.ch", + "digikey.cl", + "digikey.cn", + "digikey.co.id", + "digikey.co.il", + "digikey.com.ar", + "digikey.com.au", + "digikey.com.br", + "digikey.com.cn", + "digikey.com.co", + "digikey.com.cy", + "digikey.com.eg", + "digikey.com.gt", + "digikey.com.hr", + "digikey.com.jm", + "digikey.com.lb", + "digikey.com.mk", + "digikey.com.mx", + "digikey.com.pa", + "digikey.com.tr", + "digikey.com.ua", + "digikey.com.uy", + "digikey.com.ve", + "digikey.co.nz", + "digikey.co.th", + "digikey.co.uk", + "digikey.co.za", + "digikey.cr", + "digikey.cz", + "digikey.de", + "digikey.dk", + "digikey.do", + "digikey.ec", + "digikey.ee", + "digikey.es", + "digikey.fi", + "digikey.fr", + "digikey.gr", + "digikey.hk", + "digikey.hu", + "digikey.ie", + "digikey.in", + "digikey.is", + "digikey.it", + "digikey.jp", + "digikey.kr", + "digikey.lk", + "digikey.lt", + "digikey.lu", + "digikey.lv", + "digikey.ma", + "digikey.md", + "digikey.my", + "digikey.nl", + "digikey.no", + "digikey.pe", + "digikey.ph", + "digikey.pk", + "digikey.pl", + "digikey.pr", + "digikey.pt", + "digikey.ro", + "digikey.rs", + "digikey.ru", + "digikey.se", + "digikey.sg", + "digikey.si", + "digikey.sk", + "digikey.tn", + "digikey.tw", + "digikey.vn", + ], + [ + "digitec.ch", + + "galaxus.ch", + "galaxus.de", + "galaxus.fr", + + "digitecgalaxus.ch", + ], + [ + "directferries.com", + + "directferries.at", + "directferries.be", + "directferries.ca", + "directferries.ch", + "directferries.cn", + "directferries.co.id", + "directferries.co.kr", + "directferries.com.au", + "directferries.com.tr", + "directferries.com.ua", + "directferries.co.nz", + "directferries.co.uk", + "directferries.cz", + "directferries.de", + "directferries.dk", + "directferries.es", + "directferries.fi", + "directferries.fr", + "directferries.gr", + "directferries.ie", + "directferries.it", + "directferries.jp", + "directferries.kr", + "directferries.ma", + "directferries.nl", + "directferries.no", + "directferries.nz", + "directferries.pl", + "directferries.pt", + "directferries.ro", + "directferries.ru", + "directferries.se", + "directferries.sk", + "directferries.xyz", + ], + ["discountbank.co.il", "telebank.co.il"], + ["discord.com", "discordapp.com", "discordapp.net"], + ["discover.com", "discovercard.com"], + ["disqus.com", "disquscdn.com"], + [ + "dmgmedia.co.uk", + + "dailymail.co.uk", + "inews.co.uk", + "mailonsunday.co.uk", + "metro.co.uk", + "thisismoney.co.uk", + + "dmgmediaprivacy.co.uk", + ], + [ + "dpgmediagroup.com", + + "persgroep.net", + "persgroep.cloud", + + "7sur7.be", + "ad.nl", + "bd.nl", + "beursrally.be", + "beurswijzer.com", + "bndestem.nl", + "demorgen.be", + "destentor.nl", + "dpgmedia.be", + "dpgmedia.nl", + "ed.nl", + "gelderlander.nl", + "hln.be", + "humo.be", + "parool.nl", + "persgroepinternational.be", + "persgroepinternational.com", + "persgroep.nl", + "pzc.nl", + "tijd.be", + "topics.be", + "topics.nl", + "trouw.nl", + "tubantia.nl", + "volkskrant.nl", + "vtm.be", + + "dpgmedia.net", + ], + ["dropbox.com", "dropboxstatic.com", "dropboxusercontent.com", "getdropbox.com"], + ["d.rip", "kickstarter.com"], + [ + "ea.com", + + "bioware.com", + "masseffect.com", + "origin.com", + "play4free.com", + "tiberiumalliance.com", + ], + [ + "ebay.com", + "ebayinc.com", + + "ebay.at", + "ebay.be", + "ebay.ca", + "ebay.ch", + "ebay.com.au", + "ebay.com.hk", + "ebay.com.my", + "ebay.com.sg", + "ebay.co.uk", + "ebay.de", + "ebay.es", + "ebay.fr", + "ebay.ie", + "ebay.in", + "ebay.it", + "ebay.nl", + "ebay.ph", + "ebay.pl", + "vivanuncios.com.mx", + + "ebaydesc.com", + "ebayimg.com", + "ebayrtm.com", + "ebaystatic.com", + "ebay-us.com", + ], + ["elsevier.com", "sciencedirect.com", "sciencedirectassets.com"], + [ + "enterprise.com", + + "alamo.ca", + "alamo.com", + + "autoshare.com", + "autoshare.biz", + "autoshare.ca", + "autoshare.net", + "autoshare.org", + + "cars.info", + "carsharing.ca", + "carsharingtoronto.com", + "citer.fr", + + "ehi.com", + "ehiaws.com", + + "enterprise.ca", + "enterprise.ch", + "enterprise.com.jm", + "enterprise.co.uk", + "enterprise.de", + "enterprise.dk", + "enterprise.ec", + "enterprise.es", + "enterprise.fr", + "enterprise.gr", + "enterprise.hr", + "enterprise.hu", + "enterprise.ie", + "enterprise.lv", + "enterprise.nl", + "enterprise.no", + "enterprise.pt", + "enterprise.se", + + "enterprisecarclub.co.uk", + "enterprisecarclub.ie", + + "enterprisecarshare.ca", + "enterprisecarshare.com", + "enterprisecarshare.co.uk", + + "enterpriserideshare.com", + + "enterpriserentacar.at", + "enterpriserentacar.be", + "enterpriserentacar.bg", + "enterpriserentacar.ca", + "enterpriserentacar.com.au", + "enterpriserentacar.co.nz", + "enterpriserentacar.cz", + "enterpriserentacar.is", + "enterpriserentacar.it", + "enterpriserentacar.pl", + "enterpriserentacar.se", + + "nationalcar.ca", + "nationalcar.com", + "nationalcar.co.uk", + "nationalcar.de", + "nationalcar.es", + "nationalcar.fr", + "nationalcar.ie", + "nationalcar.it", + "nationalcar.mobi", + + "onewaygo.de", + + "alamo-np.ca", + "alamo-np.com", + "alamo-np.co.uk", + "alamo-np.de", + "alamo-np.es", + "alamo-np.fr", + "alamo-np.ie", + ], + ["epicgames.com", "unrealengine.com"], + [ + "eventbrite.com", + + "eventbrite.at", + "eventbrite.be", + "eventbrite.ca", + "eventbrite.ch", + "eventbrite.cl", + "eventbrite.co", + "eventbrite.com.ar", + "eventbrite.com.au", + "eventbrite.com.br", + "eventbrite.com.mx", + "eventbrite.com.ng", + "eventbrite.com.pe", + "eventbrite.co.nz", + "eventbrite.co.uk", + "eventbrite.co.za", + "eventbrite.de", + "eventbrite.dk", + "eventbrite.es", + "eventbrite.fi", + "eventbrite.fr", + "eventbrite.hk", + "eventbrite.ie", + "eventbrite.in", + "eventbrite.it", + "eventbrite.my", + "eventbrite.nl", + "eventbrite.ph", + "eventbrite.pt", + "eventbrite.se", + "eventbrite.sg", + + "evbstatic.com", + "evbuc.com", + "eventbriteapi.com", + ], + [ + "expedia.com", + + "carrentals.com", + "cheaptickets.com", + "ebookers.com", + "hotels.com", + "hotwire.com", + "mrjet.se", + "orbitz.com", + "travelocity.com", + "wotif.com", + + "expedia-aarp.com", + "expedia-barclays.co.uk", + "expedia-cn.com", + "expedia.at", + "expedia.be", + "expedia.ca", + "expedia.ch", + "expedia.cn", + "expedia.co.id", + "expedia.co.in", + "expedia.co.jp", + "expedia.co.kr", + "expedia.co.nz", + "expedia.co.th", + "expedia.co.uk", + "expedia.com.ar", + "expedia.com.au", + "expedia.com.br", + "expedia.com.hk", + "expedia.com.my", + "expedia.com.ph", + "expedia.com.sg", + "expedia.com.tw", + "expedia.com.vn", + "expedia.de", + "expedia.dk", + "expedia.es", + "expedia.fi", + "expedia.fr", + "expedia.ie", + "expedia.it", + "expedia.mx", + "expedia.nl", + "expedia.no", + "expedia.ru", + "expedia.se", + "expediacorporate.eu", + + "expedia.net", + + "travel-assets.com", + "trvl-media.com", + + "lastminute.com.au", + "lastminute.co.nz", + "wotif.com.au", + "wotif.co.nz", + + "cdn-hotels.com", + "hotels.cn", + + "hotwirestatic.com", + + "ebookers.at", + "ebookers.be", + "ebookers.ch", + "ebookers.co.uk", + "ebookers.de", + "ebookers.fi", + "ebookers.fr", + "ebookers.ie", + "ebookers.nl", + "ebookers.no", + + "mrjet.dk", + + "vrbo.com", + + "abritel.fr", + "aluguetemporada.com.br", + "fewo-direkt.de", + "homeaway.at", + "homeaway.ca", + "homeaway.com", + "homeaway.com.au", + "homeaway.com.mx", + "homeaway.co.nz", + "homeaway.co.uk", + "homeaway.dk", + "homeaway.es", + "homeaway.fi", + "homeaway.gr", + "homeaway.it", + "homeaway.nl", + "homeaway.no", + "homeaway.pl", + "homeaway.pt", + "homeaway.se", + "homelidays.com", + "homelidays.es", + "homelidays.fr", + "homelidays.it", + "ownersdirect.co.uk", + "stayz.com.au", + "vacationrentals.com", + ], + ["express-scripts.com", "medcohealth.com"], + [ + "facebook.com", + + "messenger.com", + "workplace.com", + + "oculus.com", + "oculuscdn.com", + "oculusrift.com", + "oculusvr.com", + "powersunitedvr.com", + + "facebook.net", + "fbcdn.com", + "fbcdn.net", + "fbsbx.com", + ], + [ + "faithlife.com", + + "biblescreen.com", + "biblestudymagazine.com", + "biblia.com", + "didaktikosjournal.com", + "faithlifetv.com", + "kirkdalepress.com", + "lexhampress.com", + "logos.com", + "ministrytracker.com", + "proclaimonline.com", + "verbum.com", + + "bibliacdn.com", + "faithlifecdn.com", + "faithlifesitescdn.com", + "logoscdn.com", + ], + [ + "fandom.com", + "fandom-dev.pl", + "fandom-dev.us", + "nocookie.net", + "wikia.com", + "wikia-dev.com", + "wikia-dev.pl", + "wikia-dev.us", + "wikiafanstudio.com", + "wikia-inc.com", + "wikia.net", + "wikia.org", + "wikia-services.com", + "wikia-staging.com", + ], + [ + "fastcompany.com", + + "fastcocreate.com", + "fastcodesign.com", + "fastcoexist.com", + "fastcolabs.com", + "fast-co.net", + "fcimpactcouncil.com", + "inc.com", + "innovationuncensored.com", + "mansueto.com", + "mvdigitalmedia.com", + "mvlicensing.com", + "nativguard.com", + "retirementcomm.com", + + "fastcompany.net", + ], + ["fastmail.com", "fastmailusercontent.com"], + ["firefox.com", "firefoxusercontent.com", "mozilla.org"], + ["foxnews.com", "foxbusiness.com", "fncstatic.com"], + [ + "futureplc.com", + + "creativebloq.com", + "cyclingnews.com", + "digitalcameraworld.com", + "gamesradar.com", + "gizmodo.co.uk", + "guitarworld.com", + "kotaku.co.uk", + "laptopmag.com", + "lifehacker.co.uk", + "livescience.com", + "loudersound.com", + "musicradar.com", + "pcgamer.com", + "space.com", + "t3.com", + "techradar.com", + "tomsguide.com", + "tomshardware.com", + "toptenreviews.com", + "whathifi.com", + + "futurecdn.net", + "future-fie-assets.co.uk", + "future-fie.co.uk", + "future.net.uk", + ], + ["gamestar.de", "gamepro.de", "cgames.de"], + [ + "gap.com", + + "bananarepublic.com", + "gapfactory.com", + "gapinc.com", + "oldnavy.com", + "piperlime.com", + + "bananarepublic.ca", + "bananarepublic.co.jp", + "bananarepublic.co.uk", + "bananarepublic.eu", + "gapcanada.ca", + "gap.co.jp", + "gap.co.uk", + "gap.eu", + "gap.hk", + "oldnavy.ca", + + "assets-gap.com", + ], + [ + "gedispa.it", + + "capital.it", + "deejay.it", + "gelocal.it", + "ilsecoloxix.it", + "kataweb.it", + "lastampa.it", + "lescienze.it", + "limesonline.com", + "m2o.it", + "mymovies.it", + "repubblica.it", + + "gedidigital.it", + "repstatic.it", + ], + [ + "gettyimages.com", + + "gettyimages.ca", + "gettyimages.com.au", + "gettyimages.co.uk", + "gettyimages.dk", + "gettyimages.fi", + "gettyimages.nl", + + "istockphoto.com", + + "thinkstockphotos.com", + "thinkstockphotos.ca", + ], + ["gitlab.com", "gitlab-static.net"], + [ + "gizmodo.com", + + "avclub.com", + "deadspin.com", + "jalopnik.com", + "jezebel.com", + "kinja.com", + "kinja-img.com", + "kinja-static.com", + "kotaku.com", + "lifehacker.com", + "technoratimedia.com", + "theinventory.com", + "theonion.com", + "theroot.com", + "thetakeout.com", + ], + [ + "glassdoor.com", + + "glassdoor.be", + "glassdoor.ca", + "glassdoor.co.in", + "glassdoor.com.au", + "glassdoor.co.uk", + "glassdoor.de", + "glassdoor.fr", + "glassdoor.ie", + "glassdoor.nl", + ], + ["gogoair.com", "gogoinflight.com"], + [ + "google.com", + "youtube.com", + "gmail.com", + "blogger.com", + "blog.google", + "googleblog.com", + "chromium.org", + + "ggpht.com", + "googleusercontent.com", + "googlevideo.com", + "gstatic.com", + "youtube-nocookie.com", + "ytimg.com", + + "google.ad", + "google.ae", + "google.al", + "google.am", + "google.as", + "google.at", + "google.az", + "google.ba", + "google.be", + "google.bf", + "google.bg", + "google.bi", + "google.bj", + "google.bs", + "google.bt", + "google.by", + "google.ca", + "google.cat", + "google.cd", + "google.cf", + "google.cg", + "google.ch", + "google.ci", + "google.cl", + "google.cm", + "google.cn", + "google.com.af", + "google.com.ag", + "google.com.ai", + "google.com.ar", + "google.com.au", + "google.com.bd", + "google.com.bh", + "google.com.bn", + "google.com.bo", + "google.com.br", + "google.com.bz", + "google.com.co", + "google.com.cu", + "google.com.cy", + "google.com.do", + "google.com.ec", + "google.com.eg", + "google.com.et", + "google.com.fj", + "google.com.gh", + "google.com.gi", + "google.com.gt", + "google.com.hk", + "google.com.jm", + "google.com.kh", + "google.com.kw", + "google.com.lb", + "google.com.ly", + "google.com.mm", + "google.com.mt", + "google.com.mx", + "google.com.my", + "google.com.na", + "google.com.ng", + "google.com.ni", + "google.com.np", + "google.com.om", + "google.com.pa", + "google.com.pe", + "google.com.pg", + "google.com.ph", + "google.com.pk", + "google.com.pr", + "google.com.py", + "google.com.qa", + "google.com.sa", + "google.com.sb", + "google.com.sg", + "google.com.sl", + "google.com.sv", + "google.com.tj", + "google.com.tr", + "google.com.tw", + "google.com.ua", + "google.com.uy", + "google.com.vc", + "google.com.vn", + "google.co.ao", + "google.co.bw", + "google.co.ck", + "google.co.cr", + "google.co.id", + "google.co.il", + "google.co.in", + "google.co.jp", + "google.co.ke", + "google.co.kr", + "google.co.ls", + "google.co.ma", + "google.co.mz", + "google.co.nz", + "google.co.th", + "google.co.tz", + "google.co.ug", + "google.co.uk", + "google.co.uz", + "google.co.ve", + "google.co.vi", + "google.co.za", + "google.co.zm", + "google.co.zw", + "google.cv", + "google.cz", + "google.de", + "google.dj", + "google.dk", + "google.dm", + "google.dz", + "google.ee", + "google.es", + "google.fi", + "google.fm", + "google.fr", + "google.ga", + "google.ge", + "google.gg", + "google.gl", + "google.gm", + "google.gr", + "google.gy", + "google.hn", + "google.hr", + "google.ht", + "google.hu", + "google.ie", + "google.im", + "google.iq", + "google.is", + "google.it", + "google.je", + "google.jo", + "google.kg", + "google.ki", + "google.kz", + "google.la", + "google.li", + "google.lk", + "google.lt", + "google.lu", + "google.lv", + "google.md", + "google.me", + "google.mg", + "google.mk", + "google.ml", + "google.mn", + "google.ms", + "google.mu", + "google.mv", + "google.mw", + "google.ne", + "google.nl", + "google.no", + "google.nr", + "google.nu", + "google.pl", + "google.pn", + "google.ps", + "google.pt", + "google.ro", + "google.rs", + "google.ru", + "google.rw", + "google.sc", + "google.se", + "google.sh", + "google.si", + "google.sk", + "google.sm", + "google.sn", + "google.so", + "google.sr", + "google.st", + "google.td", + "google.tg", + "google.tl", + "google.tm", + "google.tn", + "google.to", + "google.tt", + "google.vg", + "google.vu", + "google.ws", + + "fonts.googleapis.com", + "storage.googleapis.com", + "www.googleapis.com", + + "nest.com", + "codingcompetitions.withgoogle.com", + "nestpowerproject.withgoogle.com", + ], + ["www.gov.uk", "cabinet-office.gov.uk", "publishing.service.gov.uk"], + [ + "gray.tv", + + "1011northplatte.com", + "1011now.com", + "13abc.com", + "26nbc.com", + "abc12.com", + "blackhillsfox.com", + "cbs7.com", + "graydc.com", + "kalb.com", + "kbtx.com", + "kcrg.com", + "kcwy13.com", + "kfyrtv.com", + "kgns.tv", + "kgwn.tv", + "kkco11news.com", + "kktv.com", + "kmot.com", + "kmvt.com", + "knoe.com", + "knopnews2.com", + "kolotv.com", + "kotatv.com", + "kqcd.com", + "ksfy.com", + "ksnblocal4.com", + "kspr.com", + "ktuu.com", + "kumv.com", + "kwch.com", + "kwqc.com", + "kwtx.com", + "kxii.com", + "ky3.com", + "nbc15.com", + "newsplex.com", + "thenewscenter.tv", + "uppermichigansource.com", + "valleynewslive.com", + "wabi.tv", + "wagmtv.com", + "wbay.com", + "wbko.com", + "wcax.com", + "wcjb.com", + "wctv.tv", + "wdbj7.com", + "wdtv.com", + "weau.com", + "webcenter11.com", + "whsv.com", + "wibw.com", + "wifr.com", + "wilx.com", + "witn.com", + "wjhg.com", + "wkyt.com", + "wndu.com", + "wowt.com", + "wrdw.com", + "wsaw.com", + "wsaz.com", + "wswg.tv", + "wtok.com", + "wtvy.com", + "wvlt.tv", + "wymt.com", + + "graytvinc.com", + ], + ["guardian.co.uk", "guim.co.uk", "guardianapps.co.uk", "theguardian.com", "gu-web.net"], + [ + "habr.com", + "habr.ru", + "habrahabr.ru", + "freelansim.ru", + "geektimes.com", + "geektimes.ru", + "moikrug.ru", + "toster.ru", + + "habracdn.net", + "habrastorage.org", + "hsto.org", + ], + ["healthfusion.com", "healthfusionclaims.com"], + [ + "hearst.com", + + "25ans.jp", + "autoweek.com", + "bazaar.com", + "beaumontenterprise.com", + "bestproducts.com", + "bicycling.com", + "caranddriver.com", + "chron.com", + "cosmopolitan.com", + "countryliving.com", + "crfashionbook.com", + "ctnews.com", + "ctpost.com", + "dariennewsonline.com", + "delish.com", + "drozthegoodlife.com", + "elle.com", + "elledecor.com", + "esquire.com", + "expressnews.com", + "fairfieldcitizenonline.com", + "foothillstrader.com", + "fujingaho.jp", + "gametimect.com", + "gearpatrol.com", + "ghsealapplication.com", + "goodhouse.com", + "goodhousekeeping.com", + "greenwichtime.com", + "harpersbazaar.com", + "housebeautiful.com", + "houstonchronicle.com", + "lmtonline.com", + "marieclaire.com", + "menshealth.com", + "michigansthumb.com", + "middletownpress.com", + "mrt.com", + "myjournalcourier.com", + "mylo.id", + "myplainview.com", + "mysanantonio.com", + "newcanaannewsonline.com", + "newmilfordspectrum.com", + "newstimes.com", + "nhregister.com", + "oprahmag.com", + "ourmidland.com", + "popularmechanics.com", + "prevention.com", + "redbookmag.com", + "registercitizen.com", + "roadandtrack.com", + "rodalesorganiclife.com", + "runnersworld.com", + "seattlepi.com", + "seventeen.com", + "sfchronicle.com", + "sfgate.com", + "shondaland.com", + "stamfordadvocate.com", + "s-w-e-e-t.com", + "thehour.com", + "theintelligencer.com", + "thepioneerwoman.com", + "thepioneerwomancooks.com", + "thetelegraph.com", + "timesunion.com", + "todays-rewards.com", + "townandcountrymag.com", + "veranda.com", + "wearesweet.co", + "westport-news.com", + "womansday.com", + "womenshealthmag.com", + "yourconroenews.com", + + "h-cdn.co", + "hdmtech.net", + "hdmtools.com", + "hdnux.com", + "hearst3pcc.com", + "hearstapps.com", + "hearstapps.net", + "hearstdigitalstudios.com", + "hearstdigitalstudios.net", + "hearst.io", + "hearstlabs.com", + "hearstmags.com", + "hearstmobile.com", + "hearstnp.com", + ], + [ + "houzz.com", + + "houzz.at", + "houzz.be", + "houzz.ca", + "houzz.ch", + "houzz.co.jp", + "houzz.com.au", + "houzz.com.sg", + "houzz.co.nz", + "houzz.co.uk", + "houzz.de", + "houzz.dk", + "houzz.es", + "houzz.fi", + "houzz.fr", + "houzz.ie", + "houzz.in", + "houzz.it", + "houzz.jp", + "houzz.no", + "houzz.nz", + "houzz.pt", + "houzz.ru", + "houzz.se", + "houzz.sg", + "houzz.uk", + + "gardenweb.com", + "gwhouzz3.com", + "gwhouzz.com", + "houzz2.com", + "houzz2.com.au", + "houzz2.co.uk", + "houzz3.com", + "houzz3.com.au", + "houzz3.co.uk", + "hzcdn.com", + "stghouzz.com", + "thathomesite.com", + ], + [ + "huobi.com", + + "hbfile.net", + "hbg.com", + "huobiasia.vip", + "huobi.br.com", + "huobi.me", + ], + ["hvfcu.org", "hvfcuonline.org"], + [ + "idealo.de", + + "idealo.at", + "idealo.co.uk", + "idealo.es", + "idealo.fr", + "idealo.it", + "idealo.com", + ], + [ + "ign.fr", + + "cartoradio.fr", + "culture.fr", + "duministeredelaculture.fr", + "gouvernement.fr", + "ignrando.fr", + + "ants.gouv.fr", + "culture.gouv.fr", + "data.gouv.fr", + "education.gouv.fr", + "etalab.gouv.fr", + "geoportail.gouv.fr", + "geoportail-urbanisme.gouv.fr", + "impots.gouv.fr", + "premier-ministre.gouv.fr", + "service-civique.gouv.fr", + "yvelines.gouv.fr", + + "ac-grenoble.fr", + "ac-versailles.fr", + "ac-bordeaux.fr", + "ac-montpellier.fr", + "ac-lille.fr", + ], + [ + "impresa.pt", + + "blitz.pt", + "expresso.pt", + "famashow.pt", + "impresamediacriativa.pt", + "sapo.pt", + "siccaras.pt", + "sickapa.pt", + "sicmulher.pt", + "sicnoticias.pt", + "sic.pt", + "sicradical.pt", + "smack.pt", + "tribunaexpresso.pt", + "volantesic.pt", + ], + [ + "immobilienscout24.de", + "static-immobilienscout24.de", + ], + [ + "indeed.com", + + "indeed.ae", + "indeed.ca", + "indeed.ch", + "indeed.cl", + "indeed.co.in", + "indeed.com.au", + "indeed.com.br", + "indeed.com.co", + "indeed.com.mx", + "indeed.com.my", + "indeed.com.pe", + "indeed.com.ph", + "indeed.com.pk", + "indeed.com.sg", + "indeed.co.uk", + "indeed.co.ve", + "indeed.co.za", + "indeed.de", + "indeed.es", + "indeed.fi", + "indeed.fr", + "indeed.hk", + "indeed.ie", + "indeed.jp", + "indeed.lu", + "indeed.nl", + "indeed.pt", + ], + ["independent.co.uk", "indy100.com"], + [ + "iu.edu", + + "indiana.edu", + "iue.edu", + "iufw.edu", + "iuk.edu", + "iun.edu", + "iupuc.edu", + "iupui.edu", + "iusb.edu", + "ius.edu", + "myiu.org", + ], + [ + "jd.com", + "3.cn", + "360buy.com", + "360buyimg.com", + "7fresh.com", + "baitiao.com", + "caiyu.com", + "chinabank.com.cn", + "jd.co.th", + "jd.hk", + "jd.id", + "jd.ru", + "jdpay.com", + "jdwl.com", + "jdx.com", + "jkcsjd.com", + "joybuy.com", + "joybuy.es", + "ocwms.com", + "paipai.com", + "toplife.com", + "wangyin.com", + "yhd.com", + "yihaodianimg.com", + "yiyaojd.com", + "yizhitou.com", + ], + [ + "jetbrains.com", + + "datalore.io", + "intellij.net", + "jetbrains.dev", + "kotlinconf.com", + "kotlinlang.org", + "ktor.io", + "talkingkotlin.com", + ], + ["jpmorganchase.com", "jpmorgan.com", "chase.com"], + ["jobware.de", "jobware.com", "jobware.net"], + ["jotform.com", "jotfor.ms"], + [ + "kayak.com", + + "kayak.ae", + "kayak.cat", + "kayak.ch", + "kayak.cl", + "kayak.co.id", + "kayak.co.in", + "kayak.co.jp", + "kayak.co.kr", + "kayak.com.ar", + "kayak.com.au", + "kayak.com.br", + "kayak.com.co", + "kayak.com.hk", + "kayak.com.mx", + "kayak.com.my", + "kayak.com.pe", + "kayak.com.ph", + "kayak.com.tr", + "kayak.co.th", + "kayak.co.uk", + "kayak.de", + "kayak.dk", + "kayak.es", + "kayak.eu", + "kayak.fr", + "kayak.ie", + "kayak.it", + "kayak.nl", + "kayak.no", + "kayak.ph", + "kayak.pl", + "kayak.pt", + "kayak.qa", + "kayak.ru", + "kayak.se", + "kayak.sg", + + "checkfelix.com", + "checkfelix.co.uk", + "checkfelix.es", + "checkfelix.fr", + "checkfelix.it", + + "momondo.at", + "momondo.be", + "momondo.by", + "momondo.ca", + "momondo.ch", + "momondo.cl", + "momondo.com", + "momondo.com.ar", + "momondo.com.au", + "momondo.com.br", + "momondo.com.cn", + "momondo.com.co", + "momondo.com.pe", + "momondo.com.tr", + "momondo.co.nz", + "momondo.co.uk", + "momondo.co.za", + "momondo.cz", + "momondo.de", + "momondo.dk", + "momondo.ee", + "momondo.es", + "momondo.fi", + "momondo.fr", + "momondogroup.com", + "momondo.hk", + "momondo.ie", + "momondo.in", + "momondo.it", + "momondo.kz", + "momondo.lt", + "momondo.mx", + "momondo.net", + "momondo.nl", + "momondo.no", + "momondo.pl", + "momondo.pro", + "momondo.pt", + "momondo.ro", + "momondo.ru", + "momondo.se", + "momondo.tw", + "momondo.ua", + + "mundi.com.br", + + "speedfares.com", + + "swoodoo.at", + "swoodoo.ch", + "swoodoo.com", + + "r9cdn.net", + ], + ["kiwi.com", "skypicker.com"], + [ + "kogan.com", + + "dicksmith.com.au", + "dicksmith.co.nz", + "koganinternet.com.au", + "koganmobile.co.nz", + "kogansuper.com.au", + "kogantravel.com", + "mattblatt.com.au", + "tandy.com.au", + "zazz.com.au", + ], + ["linkedin.com", "licdn.com"], + ["livejournal.com", "livejournal.net", "lj-toys.com"], + ["lnk.to", "tix.to", "tck.to", "ticket.to", "linkfire.com", "assetlab.io", "linkfire.co", "lnkfi.re"], + [ + "logmeininc.com", + + "citrixonline.com", + "gotomeeting.com", + "gotomeet.me", + "gotomypc.com", + "gotostage.com", + "gotowebinar.com", + "logme.in", + "logmein.com", + + "getgo.com", + ], + [ + "loveholidays.com", + "loveholidays.be", + "loveholidays.dk", + "loveholidays.es", + "loveholidays.fi", + "loveholidays.fr", + "loveholidays.ie", + "loveholidays.nl", + "loveholidays.no", + "loveholidays.co.nz", + "loveholidays.pt", + "loveholidays.se", + "lovevacations.com", + ], + ["macys.com", "macysassets.com"], + [ + "mafra.cz", + + "idnes.cz", + "lidovky.cz", + "expres.cz", + + "1gr.cz", + ], + [ + "mail.ru", + "imgsmail.ru", + + "ok.ru", + "mycdn.me", + "odnoklassniki.ru", + "oklive.app", + "ok.me", + "tamtam.chat", + "tt.me", + + "vk.com", + "vk.me", + "vkontakte.ru", + ], + ["mandtbank.com", "mtb.com"], + ["mathletics.com", "mathletics.com.au", "mathletics.co.uk"], + ["mdsol.com", "imedidata.com"], + [ + "mediamarktsaturn.com", + + "mediamarkt.at", + "mediamarkt.be", + "mediamarkt.ch", + "mediamarkt.com.tr", + "mediamarkt.de", + "mediamarkt.es", + "mediamarkt.gr", + "mediamarkt.hu", + "mediamarkt.nl", + "mediamarkt.se", + + "saturn.at", + "saturn.de", + "saturn.lu", + + "redblue.de", + + "mediamarkt.pl", + "redcoon.pl", + "saturn.pl", + "ms-online.pl", + ], + ["meetup.com", "meetupstatic.com"], + [ + "mercadolibre.com", + + "mercadolibre.cl", + "mercadolibre.co.cr", + "mercadolibre.com.ar", + "mercadolibre.com.bo", + "mercadolibre.com.co", + "mercadolibre.com.do", + "mercadolibre.com.ec", + "mercadolibre.com.gt", + "mercadolibre.com.hn", + "mercadolibre.com.mx", + "mercadolibre.com.ni", + "mercadolibre.com.pa", + "mercadolibre.com.pe", + "mercadolibre.com.py", + "mercadolibre.com.sv", + "mercadolibre.com.uy", + "mercadolibre.com.ve", + "mercadolivre.com", + "mercadolivre.com.br", + + "mercadopago.com", + "mercadopago.com.ar", + "mercadopago.com.br", + "mercadopago.com.co", + "mercadopago.com.mx", + + "mercadoshops.com", + "mercadoshops.cl", + "mercadoshops.com.ar", + "mercadoshops.com.br", + "mercadoshops.com.co", + "mercadoshops.com.mx", + "mercadoshops.com.ve", + + "mercadoclics.com", + "mlstatic.com", + ], + [ + "mercedes-benz.com", + + "mercedes-benz-africa.com", + "mercedes-benz-asia.com", + "mercedes-benz.at", + "mercedes-benz.ba", + "mercedes-benz.be", + "mercedes-benz.bg", + "mercedes-benz.ca", + "mercedes-benz.ch", + "mercedes-benz.cl", + "mercedes-benz.co.id", + "mercedes-benz.co.in", + "mercedes-benz.co.jp", + "mercedes-benz.co.kr", + "mercedes-benz.com.ar", + "mercedes-benz.com.au", + "mercedes-benz.com.br", + "mercedes-benz.com.cn", + "mercedes-benz.com.co", + "mercedes-benz.com.cy", + "mercedes-benz.com.eg", + "mercedes-benz.com.gt", + "mercedes-benz.com.hk", + "mercedes-benz.com.lk", + "mercedes-benz.com.mt", + "mercedes-benz.com.mx", + "mercedes-benz.com.my", + "mercedes-benz.com.pe", + "mercedes-benz.com.ph", + "mercedes-benz.com.sg", + "mercedes-benz.com.tr", + "mercedes-benz.com.tt", + "mercedes-benz.com.tw", + "mercedes-benz.com.uy", + "mercedes-benz.com.vn", + "mercedes-benz.co.nz", + "mercedes-benz.co.th", + "mercedes-benz.co.uk", + "mercedes-benz.co.ve", + "mercedes-benz.co.za", + "mercedes-benz.cz", + "mercedes-benz.de", + "mercedes-benz.dk", + "mercedes-benz-eastern-europe.com", + "mercedes-benz.ee", + "mercedes-benz.es", + "mercedes-benz.fi", + "mercedes-benz.fr", + "mercedes-benz.gr", + "mercedes-benz.hr", + "mercedes-benz.hu", + "mercedes-benz.ie", + "mercedes-benz.is", + "mercedes-benz.it", + "mercedes-benz.li", + "mercedes-benz.lt", + "mercedes-benz.lu", + "mercedes-benz.lv", + "mercedes-benz-mena.com", + "mercedes-benz.nl", + "mercedes-benz.no", + "mercedes-benz-north-cyprus.com", + "mercedes-benz.pl", + "mercedes-benz.pt", + "mercedes-benz.ro", + "mercedes-benz.rs", + "mercedes-benz.ru", + "mercedes-benz.se", + "mercedes-benz.si", + "mercedes-benz.sk", + "mercedes-benz.ua", + ], + ["mi.com", "xiaomi.com"], + [ + "microsoft.com", + + "1drv.ms", + "aadrm.com", + "acompli.net", + "adbureau.net", + "adecn.com", + "aka.ms", + "aquantive.com", + "aspnetcdn.com", + "assets-yammer.com", + "azure.com", + "azureedge.net", + "azure.net", + "azurerms.com", + "bing.com", + "bing.net", + "cloudappsecurity.com", + "dynamics.com", + "gamesforwindows.com", + "getgamesmart.com", + "gfx.ms", + "healthvault.com", + "hockeyapp.net", + "hotmail.com", + "ieaddons.com", + "iegallery.com", + "live.com", + "live.net", + "lync.com", + "microsoftalumni.com", + "microsoftalumni.org", + "microsoftazuread-sso.com", + "microsoftedgeinsiders.com", + "microsoftonline.com", + "microsoftonline-p.com", + "microsoftonline-p.net", + "microsoftstore.com", + "microsoftstream.com", + "msads.net", + "msappproxy.net", + "msauthimages.net", + "msecnd.net", + "msedge.net", + "msftidentity.com", + "msft.net", + "msidentity.com", + "msn.com", + "msndirect.com", + "msocdn.com", + "netconversions.com", + "o365weve.com", + "oaspapps.com", + "office365.com", + "office.com", + "officelive.com", + "office.net", + "olsvc.com", + "onedrive.com", + "onenote.com", + "onenote.net", + "onestore.ms", + "onmicrosoft.com", + "outlook.com", + "outlookmobile.com", + "passport.net", + "phonefactor.net", + "powerapps.com", + "roiservice.com", + "sfbassets.com", + "sfx.ms", + "sharepoint.com", + "sharepoint-df.com", + "sharept.ms", + "skypeassets.com", + "skype.com", + "skypeforbusiness.com", + "s-microsoft.com", + "s-msn.com", + "staffhub.ms", + "svc.ms", + "sway-cdn.com", + "sway.com", + "sway-extensions.com", + "trafficmanager.net", + "virtualearth.net", + "visualstudio.com", + "vsallin.net", + "vsassets.io", + "windowsazure.com", + "windows.com", + "windows.net", + "windowsphone.com", + "worldwidetelescope.org", + "wunderlist.com", + "xbox.com", + "xboxlive.com", + "yammer.com", + "yammerusercontent.com", + + "github.com", + "githubapp.com", + "githubassets.com", + "github.dev", + + "avatars0.githubusercontent.com", + "avatars1.githubusercontent.com", + "avatars2.githubusercontent.com", + "avatars3.githubusercontent.com", + "camo.githubusercontent.com", + "cloud.githubusercontent.com", + "raw.githubusercontent.com", + ], + ["mobilism.org.in", "mobilism.org"], + ["morganstanley.com", "morganstanleyclientserv.com", "stockplanconnect.com", "ms.com"], + [ + "morningstar.com", + + "morningstar.at", + "morningstar.be", + "morningstarbr.com", + "morningstar.ca", + "morningstar.ch", + "morningstar.cl", + "morningstar.co.il", + "morningstar.com.mx", + "morningstar.co.uk", + "morningstar.de", + "morningstar.dk", + "morningstar.es", + "morningstar.fi", + "morningstar.fr", + "morningstarfunds.ie", + "morningstar.it", + "morningstar.nl", + "morningstar.no", + "morningstar.pt", + "morningstar.se", + "morningstarthailand.com", + ], + [ + "mtv.fi", + + "cmore.fi", + "lumijapyry.fi", + "luukku.com", + "mtvuutiset.fi", + "salatutelamat.fi", + "studio55.fi", + "suomiareena.fi", + ], + ["my-bookings.org", "my-bookings.cc"], + [ + "myheritage.com", + + "myheritageadn.be", + "myheritageadn.fr", + "myheritageadn.it", + "myheritageadn.pt", + "myheritage.am", + "myheritage.at", + "myheritage.be", + "myheritage.cat", + "myheritage.ch", + "myheritage.cn", + "myheritage.co.il", + "myheritage.co.in", + "myheritage.co.kr", + "myheritage.com.br", + "myheritage.com.hr", + "myheritage.com.pt", + "myheritage.com.tr", + "myheritage.com.ua", + "myheritage.cz", + "myheritage.de", + "myheritage.dk", + "myheritagedna.be", + "myheritagedna.com", + "myheritagedna.fr", + "myheritagedna.it", + "myheritagedna.pt", + "myheritage.ee", + "myheritage.es", + "myheritage.fi", + "myheritage.fr", + "myheritage.gr", + "myheritage.hu", + "myheritage.it", + "myheritage.jp", + "myheritagelibraryedition.com", + "myheritage.lt", + "myheritage.lv", + "myheritage.mk", + "myheritage.nl", + "myheritage.no", + "myheritage.pl", + "myheritage.pt", + "myheritage.ro", + "myheritage.rs", + "myheritage.se", + "myheritage.si", + "myheritage.sk", + "myheritage.tw", + + "dnaquest.org", + "familygraph.com", + "familygraphql.com", + "familytreebuilder.com", + "tribalquest.org", + + "mhcache.com", + "myheritage-container.com", + "myheritagefiles.com", + "myheritageimages.com", + ], + ["mymerrill.com", "ml.com", "merrilledge.com"], + ["mynortonaccount.com", "norton.com"], + ["mysmartedu.com", "mysmartabc.com"], + ["myuv.com", "uvvu.com"], + [ + "naver.com", + + "grafolio.com", + "plug.game", + "vlive.tv", + "webtoons.com", + + "naver.net", + "pstatic.net", + + "blog.jp", + "blogos.com", + "doorblog.jp", + "ldblog.jp", + "linecorp.com", + "line.me", + "livedoor.com", + "livedoor.jp", + + "blogcms.jp", + "blogimg.jp", + "blogsys.jp", + "line-apps.com", + "line.biz", + "line-scdn.net", + "livedoor.net", + "naver.jp", + ], + [ + "nbcnews.com", + + "msnbc.com", + "today.com", + + "newsvine.com", + "s-nbcnews.com", + ], + ["nefcuonline.com", "nefcu.com"], + [ + "netease.com", + + "126.com", + "126.net", + "127.net", + "163.com", + + "icourse163.org", + "kada.com", + "kaola.com", + "kaola.com.hk", + ], + ["netflix.com", "nflxext.com", "nflximg.net", "nflxvideo.net"], + [ + "nettix.fi", + + "nettiauto.com", + "nettikaravaani.com", + "nettikone.com", + "nettimarkkina.com", + "nettimokki.com", + "nettimoto.com", + "nettivaraosa.com", + "nettivene.com", + "nettivuokraus.com", + ], + ["newegg.com", "neweggbusiness.com", "neweggimages.com", "newegg.ca"], + [ + "newscorpaustralia.com", + + "1degree.com.au", + "adelaidenow.com.au", + "api.news", + "bestrecipes.com.au", + "bodyandsoul.com.au", + "brisbanenews.com.au", + "cairnspost.com.au", + "couriermail.com.au", + "dailytelegraph.com.au", + "delicious.com.au", + "escape.com.au", + "foxsports.com.au", + "geelongadvertiser.com.au", + "goldcoastbulletin.com.au", + "gq.com.au", + "heraldsun.com.au", + "homelife.com.au", + "insideout.com.au", + "kidspot.com.au", + "nativeincolour.com.au", + "newsadds.com.au", + "newsapi.com.au", + "newscdn.com.au", + "news.com.au", + "news.net.au", + "newsprestigenetwork.com.au", + "newsxtend.com.au", + "nlm.io", + "ntnews.com.au", + "supercoach.com.au", + "taste.com.au", + "theaustralian.com.au", + "themercury.com.au", + "townsvillebulletin.com.au", + "vogue.com.au", + "weeklytimesnow.com.au", + "whereilive.com.au", + "whimn.com.au", + ], + [ + "nintendo.com", + "nintendo.net", + "nintendo-europe.com", + "nintendonyc.com", + + "nintendo.at", + "nintendo.be", + "nintendo.ch", + "nintendo.co.uk", + "nintendo.co.za", + "nintendo.de", + "nintendo.es", + "nintendo.eu", + "nintendo.fr", + "nintendo.it", + "nintendo.nl", + "nintendo.pt", + "nintendo.ru", + + "animal-crossing.com", + "smashbros.com", + "zelda.com", + ], + ["norsk-tipping.no", "buypass.no"], + [ + "npo.nl", + + "2doc.nl", + "3fm.nl", + "avrotros.nl", + "bnnvara.nl", + "brainwash.nl", + "delagarde.nl", + "eo.nl", + "funx.nl", + "human.nl", + "jeugdjournaal.nl", + "joop.nl", + "kro-ncrv.nl", + "kro.nl", + "npo3fm.nl", + "npo3.nl", + "npoplus.nl", + "nporadio1.nl", + "nporadio2.nl", + "nporadio4.nl", + "nporadio5.nl", + "npostart.nl", + "ntr.nl", + "omroep.nl", + "powned.tv", + "publiekeomroep.nl", + "radio4.nl", + "schooltv.nl", + "vara.nl", + "vpro.nl", + "zappelin.nl", + "zapp.nl", + ], + ["nymag.com", "vulture.com", "grubstreet.com", "thecut.com"], + [ + "nypublicradio.org", + + "newsounds.org", + "radiolab.org", + "thegreenespace.org", + "wnycstudios.org", + "wqxr.org", + + "wnyc.org", + ], + ["nytimes.com", "newyorktimes.com", "thewirecutter.com", "nyt.com"], + ["nyu.edu", "nyupress.org"], + [ + "nvidia.com", + + "nvidia.at", + "nvidia.be", + "nvidia.ch", + "nvidia.cn", + "nvidia.co.at", + "nvidia.co.in", + "nvidia.co.jp", + "nvidia.co.kr", + "nvidia.com.au", + "nvidia.com.br", + "nvidia.com.mx", + "nvidia.com.pe", + "nvidia.com.pl", + "nvidia.com.tr", + "nvidia.com.tw", + "nvidia.com.ua", + "nvidia.com.ve", + "nvidia.co.uk", + "nvidia.cz", + "nvidia.de", + "nvidia.dk", + "nvidia.es", + "nvidia.eu", + "nvidia.fi", + "nvidia.fr", + "nvidia.in", + "nvidia.it", + "nvidia.jp", + "nvidia.lu", + "nvidia.mx", + "nvidia.nl", + "nvidia.no", + "nvidia.pl", + "nvidia.ro", + "nvidia.ru", + "nvidia.se", + "nvidia.tw", + + "nvidiagrid.net", + "nvidia.partners", + + "geforce.com", + "geforcenow.com", + "gputechconf.com", + + "geforce.cn", + "geforce.com.tw", + "geforce.co.uk", + ], + ["onlineatnsb.com", "norwaysavingsbank.com"], + ["openstreetmap.org", "osmfoundation.org"], + [ + "oracle.com", + + "ateam-oracle.com", + "java.com", + "mysql.com", + + "oracleimg.com", + ], + ["orange.fr", "sosh.fr", "woopic.com"], + [ + "osf.io", + + "agrixiv.org", + "arabixiv.org", + "eartharxiv.org", + "ecsarxiv.org", + "engrxiv.org", + "frenxiv.org", + "marxiv.org", + "mindrxiv.org", + "paleorxiv.org", + "psyarxiv.com", + "thesiscommons.org" + ], + ["osu.edu", "osumc.edu", "ohio-state.edu"], + [ + "ovh.com", + + "kimsufi.com", + "ovhcloud.com", + "ovhtelecom.fr", + "soyoustart.com", + + "ovh.com.au", + "ovh.co.uk", + "ovh.cz", + "ovh.de", + "ovh.es", + "ovh-hosting.fi", + "ovh.ie", + "ovh.it", + "ovh.lt", + "ovh.nl", + "ovh.pl", + "ovh.pt", + "ovh.sn", + + "ovh.net", + ], + ["paypal.com", "paypal-search.com", "paypalobjects.com"], + ["pcworld.com", "staticworld.net", "idg.com", "idg.net", "infoworld.com", "macworld.com", "techhive.com", "idg.tv"], + [ + "pearson.com", + + "connexus.com", + "ecollege.com", + "english.com", + "masteringchemistry.com", + "masteringengineering.com", + "masteringgeography.com", + "masteringhealthandnutrition.com", + "masteringphysics.com", + "mathxl.com", + "mathxlforschool.com", + "mypearson.com", + "pearsonassessments.com", + "pearsoned.com", + "pearsonelt.com", + "pearsonhighered.com", + "pearsonmylabandmastering.com", + + "pearsoncmg.com", + ], + ["pepco.com", "pepcoholdings.com"], + ["philips.com", "philips.nl"], + [ + "pinterest.com", + + "pinterest.at", + "pinterest.be", + "pinterest.ca", + "pinterest.ch", + "pinterest.cl", + "pinterest.co", + "pinterest.co.at", + "pinterest.co.in", + "pinterest.co.kr", + "pinterest.com.au", + "pinterest.com.bo", + "pinterest.com.ec", + "pinterest.com.mx", + "pinterest.com.pe", + "pinterest.com.py", + "pinterest.com.uy", + "pinterest.com.vn", + "pinterest.co.nz", + "pinterest.co.uk", + "pinterest.de", + "pinterest.dk", + "pinterest.ec", + "pinterest.engineering", + "pinterest.es", + "pinterest.fr", + "pinterest.hu", + "pinterest.id", + "pinterest.ie", + "pinterest.in", + "pinterest.info", + "pinterest.it", + "pinterest.jp", + "pinterest.kr", + "pinterestmail.com", + "pinterest.mx", + "pinterest.nz", + "pinterest.pe", + "pinterest.ph", + "pinterest.pt", + "pinterest.ru", + "pinterest.se", + "pinterest.th", + "pinterest.tw", + "pinterest.uk", + "pinterest.vn", + + "pinimg.com", + "pin.it", + ], + ["plex.tv", "plex.direct"], + ["pokemon-gl.com", "pokemon.com"], + ["pornhub.com", "phncdn.com"], + ["postepay.it", "poste.it"], + ["postimees.ee", "city24.ee", "city24.lv", "pmo.ee"], + [ + "pricerunner.com", + + "pricerunner.co.uk", + "pricerunner.de", + "pricerunner.dk", + "pricerunner.net", + "pricerunner.se", + "pricerunner.uk", + ], + [ + "prosiebensat1.de", + "prosiebensat1.com", + + "atv.at", + "atv2.at", + "galileo.tv", + "kabeleins.at", + "kabeleins.ch", + "kabeleins.de", + "kabeleinsdoku.at", + "kabeleinsdoku.ch", + "kabeleinsdoku.de", + "prosieben.at", + "prosieben.ch", + "prosieben.de", + "prosiebenmaxx.at", + "prosiebenmaxx.ch", + "prosiebenmaxx.de", + "puls24.at", + "puls4.com", + "puls8.ch", + "ran.de", + "sat1.at", + "sat1.ch", + "sat1.de", + "sat1gold.at", + "sat1gold.ch", + "sat1gold.de", + "sixx.at", + "sixx.ch", + "sixx.de", + "the-voice-of-germany.at", + "the-voice-of-germany.ch", + "the-voice-of-germany.de", + "zappn.tv", + + "p7s1.io", + ], + [ + "qantas.com", + + "jetstar.com", + "qantas.com.au", + "qantascourier.com.au", + "qantasfutureplanet.com.au", + "qantasgrouptravel.com", + "qfcrew.com", + "qfflightcrew.com", + + "aquire.com.au", + "qantasassure.com", + "qantasbusinessrewards.com", + "qantasbusinessrewards.com.au", + "qantasepiqure.com", + "qantasepiqure.com.au", + "qantasgolfclub.com", + "qantasgolfclub.com.au", + "qantasloyalty.com", + "qantasloyalty.net", + "qantasmall.com", + "qantasmall.com.au", + "qantasmall.co.nz", + "qantaspoints.com", + "qantaspoints.com.au", + "qantasshopping.com", + "qantasshopping.com.au", + "qantasshopping.co.nz", + "qantasstore.com.au", + "qantasstore.co.nz", + "redplanetgroup.com.au", + "redplanetportal.com.au", + + "qantascash.com", + "qantascash.com.au", + "qantasmoney.com", + "qantastravelmoney.com", + ], + [ + "qq.com", + + "aitangyou.com", + "cdntips.com", + "dnspod.cn", + "extqq.com", + "gdtimg.com", + "gtimg.cn", + "gtimg.com", + "idqqimg.com", + "imqq.com", + "myapp.com", + "myqcloud.com", + "qcloud.com", + "qpic.cn", + "qqmail.com", + "qzone.com", + "tencent.com", + "tenpay.com", + "ugdtimg.com", + "url.cn", + "wechat.com", + "wegame.com", + "weiyun.com", + ], + [ + "rai.it", + + "comunitaitalofona.org", + "raicinema.it", + "raicultura.it", + "raimemo.it", + "rainews24.it", + "rainews.it", + "raiplay.it", + "raiplayradio.it", + "raiplayyoyo.it", + "raipubblicita.it", + "raisport.it", + "raitalia.it", + "rai.tv", + "raiway.it", + ], + ["railnation.ru", "railnation.de", "rail-nation.com", "railnation.gr", "railnation.us", "trucknation.de", "traviangames.com"], + ["rakuten.com", "buy.com"], + [ + "realestate.com.au", + + "property.com.au", + "realcommercial.com.au", + "spacely.com.au", + + "reastatic.net", + ], + ["reddit.com", "redditmedia.com", "redditstatic.com", "redd.it", "redditenhancementsuite.com", "reddituploads.com", "imgur.com"], + ["redhat.com", "openshift.com", "openshift.org", "okd.io"], + [ + "reebok.at", + "reebok.be", + "reebok.ca", + "reebok.ch", + "reebok.cl", + "reebok.co", + "reebok.com", + "reebok.com.ar", + "reebok.com.br", + "reebok.com.tr", + "reebok.co.uk", + "reebok.cz", + "reebok.de", + "reebok.dk", + "reebok.es", + "reebok.fi", + "reebok.fr", + "reebok.ie", + "reebok.it", + "reebok.mx", + "reebok.nl", + "reebok.pe", + "reebok.pl", + "reebok.ru", + "reebok.se", + "reebok.sk", + ], + [ + "reuters.com", + "reuters.tv", + "reutersmedia.net", + "thomsonreuters.com", + + "reutersagency.cn", + + "thomsonreuters.ca", + "thomsonreuters.cn", + "thomsonreuters.co.jp", + "thomsonreuters.co.kr", + "thomsonreuters.com.ar", + "thomsonreuters.com.au", + "thomsonreuters.com.br", + "thomsonreuters.com.hk", + "thomsonreuters.com.my", + "thomsonreuters.com.pe", + "thomsonreuters.com.sg", + "thomsonreuters.com.tr", + "thomsonreuters.co.uk", + "thomsonreuters.es", + "thomsonreuters.in", + "thomsonreuters.ru", + ], + [ + "riotgames.com", + + "leagueoflegends.com", + "lolesports.com", + "lolstatic.com", + "lolusercontent.com", + + "playruneterra.com", + + "riotcdn.net", + "rdatasrv.net", + ], + [ + "rtl.nl", + + "bright.nl", + "buienradar.nl", + "healthyfest.nl", + "rtlboulevard.nl", + "rtllatenight.nl", + "rtlnieuws.nl", + "rtlxl.nl", + "rtlz.nl", + "videoland.com", + "vtbl.nl", + ], + [ + "s-kanava.fi", + + "abcasemat.fi", + "raflaamo.fi", + "s-mobiili.fi", + "sokoshotels.fi", + "yhteishyva.fi", + + "sok.fi", + "s-palvelut.fi", + ], + [ + "salesforce.com", + + "documentforce.com", + "einstein.com", + "force.com", + "pardot.com", + "salesforceliveagent.com", + "visualforce.com", + ], + ["sanguosha.com", "bianfeng.com"], + ["schwab.com", "schwabplan.com"], + ["scmp.com", "i-scmp.com"], + ["sears.com", "shld.net"], + [ + "seznam.cz", + + "firmy.cz", + "garaz.cz", + "kupi.cz", + "lide.cz", + "mapy.cz", + "novinky.cz", + "prozeny.cz", + "sauto.cz", + "sbazar.cz", + "sdovolena.cz", + "seznamzpravy.cz", + "sport.cz", + "sreality.cz", + "stream.cz", + "super.cz", + "sweb.cz", + "televizeseznam.cz", + "volnamista.cz", + "zbozi.cz", + + "szn.cz", + ], + [ + "shopify.com", + "myshopify.com", + "shopifycdn.com", + "shopifyapps.com", + "shopifycloud.com", + "shopifyadmin.com", + "shopifypreview.com", + ], + ["siriusxm.com", "sirius.com"], + ["skygo.co.nz", "skytv.co.nz"], + ["skysports.com", "skybet.com", "skyvegas.com"], + ["slashdot.org", "sourceforge.net", "fsdn.com"], + ["slickdeals.net", "slickdealscdn.com"], + [ + "smh.com.au", + + "afr.com", + "brisbanetimes.com.au", + "canberratimes.com.au", + "fairfaxmedia.com.au", + "theage.com.au", + "watoday.com.au", + + "ffx.io", + ], + ["snapfish.com", "snapfish.ca"], + [ + "sony.com", + + "sonyentertainmentnetwork.com", + "sonyrewards.com", + + "playstation.com", + "playstation.net", + + "sony-africa.com", + "sony-asia.com", + "sony.at", + "sony.ba", + "sony.be", + "sony.bg", + "sony.ca", + "sony.ch", + "sony.cl", + "sony.co.cr", + "sony.co.id", + "sony.co.in", + "sony.co.kr", + "sony.com.ar", + "sony.com.au", + "sony.com.bo", + "sony.com.br", + "sony.com.co", + "sony.com.do", + "sony.com.ec", + "sony.com.gt", + "sony.com.hk", + "sony.com.hn", + "sony.com.mk", + "sony.com.mx", + "sony.com.my", + "sony.com.ni", + "sony.com.pa", + "sony.com.pe", + "sony.com.ph", + "sony.com.sg", + "sony.com.sv", + "sony.com.tr", + "sony.com.tw", + "sony.com.vn", + "sony.co.nz", + "sony.co.th", + "sony.co.uk", + "sony.cz", + "sony.de", + "sony.dk", + "sony.ee", + "sony.es", + "sony.eu", + "sony-europe.com", + "sony.fi", + "sony.fr", + "sony.gr", + "sony.hr", + "sony.hu", + "sony.ie", + "sony.it", + "sony.kz", + "sony-latin.com", + "sonylatvija.com", + "sony.lt", + "sony.lu", + "sony.lv", + "sony-mea.com", + "sony.nl", + "sony.no", + "sony.pl", + "sony-promotion.eu", + "sony.pt", + "sony.ro", + "sony.rs", + "sony.ru", + "sony.se", + "sony.si", + "sony.sk", + "sony.ua", + + "sony.net", + ], + ["soundcloud.com", "sndcdn.com"], + ["soundcu.com", "netteller.com"], + ["southerncompany.com", "southernco.com"], + ["southparkstudios.com", "cc.com", "comedycentral.com"], + ["spiceworks.com", "spiceworksstatic.com"], + [ + "spotify.com", + + "scdn.co", + "spotifyforbrands.com", + "spotifyforartists.com", + "spotify.net", + ], + [ + "springernature.com", + + "adis.com", + "apress.com", + "biomedcentral.com", + "bsl.nl", + "dgim-eakademie.de", + "kardiologie.org", + "macmillaneducation.com", + "macmillanexplorers.com", + "medengine.com", + "medicinematters.com", + "medicinematters.in", + "medwirenews.com", + "metzlerverlag.de", + "nature.com", + "natureindex.com", + "palgrave.com", + "scientificamerican.com", + "springer.com", + "springeraesthetik.de", + "springerhealthcare.com", + "springermedizin.at", + "springermedizin.de", + "springeropen.com", + "springerpflege.de", + "springerprofessional.de", + ], + ["sprint.com", "sprintpcs.com", "nextel.com"], + ["squareup.com", "cash.app", "mkt.com", "squarecdn.com"], + ["steampowered.com", "steamstatic.com", "steamcommunity.com"], + ["suning.com", "suning.cn", "hksuning.com"], + ["target.com", "targetimg1.com"], + ["techdata.com", "techdata.ch"], + ["telegram.org", "telegram.me", "t.me"], + ["telekom.com", "t-online.de"], + ["tesla.com", "teslamotors.com"], + [ + "toyota.com", + + "lexus.com", + + "toyota.am", + "toyota.at", + "toyota.az", + "toyota.ba", + "toyota.be", + "toyota.bg", + "toyota-canarias.es", + "toyotacg.me", + "toyota.ch", + "toyota.co.il", + "toyota.com.cy", + "toyota.com.mk", + "toyota.com.mt", + "toyota.com.tr", + "toyota.co.uk", + "toyota.cz", + "toyota.de", + "toyota.dk", + "toyota.ee", + "toyota.es", + "toyota.fi", + "toyota.fr", + "toyota.ge", + "toyota-gib.com", + "toyota.gr", + "toyota.hr", + "toyota.hu", + "toyota.ie", + "toyota.is", + "toyota.it", + "toyota-kosovo.com", + "toyota.kz", + "toyota.lt", + "toyota.lu", + "toyota.lv", + "toyota.md", + "toyota.nl", + "toyota.no", + "toyota.pl", + "toyota.pt", + "toyota.ro", + "toyota.rs", + "toyota.ru", + "toyota.se", + "toyota.si", + "toyota.sk", + "toyota.ua", + + "toyota-europe.com", + ], + [ + "tripadvisor.com", + + "tripadvisor.at", + "tripadvisor.be", + "tripadvisor.ca", + "tripadvisor.ch", + "tripadvisor.co.hu", + "tripadvisor.co.id", + "tripadvisor.com.ar", + "tripadvisor.com.au", + "tripadvisor.com.br", + "tripadvisor.com.gr", + "tripadvisor.com.hk", + "tripadvisor.com.mx", + "tripadvisor.com.my", + "tripadvisor.com.pe", + "tripadvisor.com.ph", + "tripadvisor.com.sg", + "tripadvisor.com.tr", + "tripadvisor.com.tw", + "tripadvisor.co.nz", + "tripadvisor.co.uk", + "tripadvisor.co.za", + "tripadvisor.de", + "tripadvisor.dk", + "tripadvisor.es", + "tripadvisor.fi", + "tripadvisor.fr", + "tripadvisor.ie", + "tripadvisor.in", + "tripadvisor.it", + "tripadvisor.jp", + "tripadvisor.nl", + "tripadvisor.pt", + "tripadvisor.ru", + "tripadvisor.se", + "tripadvisor.sk", + + "seatguru.com", + + "tacdn.com", + "tamgrt.com", + ], + [ + "trivago.com", + + "trivago.ae", + "trivago.at", + "trivago.be", + "trivago.bg", + "trivago.ca", + "trivago.ch", + "trivago.cl", + "trivago.co.id", + "trivago.co.il", + "trivago.co.kr", + "trivago.com.ar", + "trivago.com.au", + "trivago.com.br", + "trivago.com.co", + "trivago.com.ec", + "trivago.com.mx", + "trivago.com.my", + "trivago.com.ph", + "trivago.com.tr", + "trivago.com.tw", + "trivago.com.uy", + "trivago.co.nz", + "trivago.co.th", + "trivago.co.uk", + "trivago.co.za", + "trivago.cz", + "trivago.dk", + "trivago.es", + "trivago.fi", + "trivago.fr", + "trivago.gr", + "trivago.hk", + "trivago.hr", + "trivago.hu", + "trivago.ie", + "trivago.in", + "trivago.it", + "trivago.jp", + "trivago.nl", + "trivago.no", + "trivago.pe", + "trivago.pl", + "trivago.pt", + "trivago.ro", + "trivago.rs", + "trivago.ru", + "trivago.se", + "trivago.sg", + "trivago.si", + "trivago.sk", + "trivago.vn", + "youzhan.com", + ], + ["trsretire.com", "divinvest.com"], + ["turbotax.com", "intuit.com"], + [ + "tvn.pl", + + "player.pl", + "tvn24bis.pl", + "tvn24.pl", + + "cdntvn.pl", + ], + ["tvp.pl", "tvp.info"], + ["twitter.com", "twimg.com", "t.co", "periscope.tv", "pscp.tv"], + ["ua2go.com", "ual.com", "united.com", "unitedwifi.com"], + ["ubisoft.com", "ubi.com", "anno-union.com", "thesettlers-alliance.com"], + ["ui.com", "ubnt.com"], + [ + "unitedhealthgroup.com", + + "myprotectwell.com", + "protectwellapp.com", + "protectwell.org", + "uhg.com", + "unitedhealthgroup.net", + "unitedhealthgroup.org", + "weprotectwell.com", + + "healthyourway.com", + "healthyourwaynow.com", + "joinatyourbest.com", + "mypersonalizedsupport.com", + "myrenewactive.com", + "mywellbeingsolution.com", + "optummessenger.co", + "personalhealthmessagecenter.com", + "phs.com", + "pwrfitness.com", + "takechargeatwork.com", + "wellnesscoachingnow.com", + + "aarpmedicareplans.com", + "careimprovementplus.com", + "health4me.com", + "healthsafe-id.com", + "myaarpmedicare.com", + "myaarpmedicareplans.com", + "myaarprenew.com", + "myaarprenewma.com", + "myaarprenewmapd.com", + "myaarprenewpdp.com", + "myaarpsupplementalhealthinsurance.com", + "mymedicamedicare.com", + "mymedicareaccount.com", + "mypcpmedicare.com", + "myuhc.com", + "myuhcdental.com", + "myuhcmedicare.com", + "uhc.com", + "uhcmedicaresolutions.com", + "uhcmycarepath.com", + "uhcretiree.com", + "uhcservices.com", + "yourdentalplan.com", + + "werally.com", + + "liveandworkwell.com", + "myoptum.com", + "optum.com", + "optumrx.com", + "ppconline.info", + "ppconlineinfo.com", + "wellbeing-4life.com", + ], + ["vanguard.com", "investornews.vanguard", "vanguardblog.com", "vanguardcanada.ca", "vanguardinvestor.co.uk", "vgcontent.info"], + [ + "verizonmedia.com", + + "verizon.com", + "verizon.net", + "verizonwireless.com", + "vzw.com", + + "aol.com", + "autoblog.com", + "engadget.com", + "oath.com", + "overture.com", + "techcrunch.com", + "yahoo.com", + + "huffpost.com", + "huffingtonpost.ca", + "huffingtonpost.com", + "huffingtonpost.com.au", + "huffingtonpost.com.mx", + "huffingtonpost.co.uk", + "huffingtonpost.co.za", + "huffingtonpost.de", + "huffingtonpost.es", + "huffingtonpost.fr", + "huffingtonpost.gr", + "huffingtonpost.in", + "huffingtonpost.it", + "huffingtonpost.jp", + "huffingtonpost.kr", + "huffpostarabi.com", + "huffpostbrasil.com", + "huffpostmaghreb.com", + + "yahooapis.com", + "yimg.com", + ], + ["vimeo.com", "vimeocdn.com"], + [ + "vinted.com", + + "kleiderkreisel.de", + "mamikreisel.de", + + "vinted.co.uk", + "vinted.cz", + "vinted.es", + "vinted.fr", + "vinted.lt", + "vinted.nl", + "vinted.pl", + ], + ["volvooceanrace.com", "virtualregatta.com"], + ["vonage.com", "vonagebusiness.com"], + [ + "vrt.be", + + "canvas.be", + "een.be", + "ketnet.be", + "klara.be", + "mnm.be", + "radio1.be", + "radio2.be", + "sporza.be", + "stubru.be", + ], + ["wa.gov", "wsdot.com", "wsdot.gov"], + ["walmart.com", "wal.co", "walmartimages.com", "walmart.ca"], + [ + "thewaltdisneycompany.com", + + "6abc.com", + "abc7.com", + "abc7ny.com", + "abc.com", + "abcnews.com", + + "go.com", + + "espn.com", + "espncdn.com", + + "espn.com.au", + "espn.com.br", + "espn.co.uk", + + "espncricinfo.com", + + "espnfc.com", + "espnfc.us", + + "fivethirtyeight.com", + + "babble.com", + "dadt.com", + "disneybaby.com", + "disneyinteractive.com", + "disneyinternationalhd.com", + "disneymoviesanywhere.com", + "disneyplus.com", + "ilm.com", + "marvel.com", + "readriordan.com", + "skysound.com", + "starwars.com", + + "disney.asia", + "disney.be", + "disney.bg", + "disney.co.il", + "disney.com", + "disney.com.au", + "disney.com.br", + "disney.com.hk", + "disney.com.tw", + "disney.co.th", + "disney.co.uk", + "disney.co.za", + "disney.cz", + "disney.de", + "disney.dk", + "disney.es", + "disney.fi", + "disney.fr", + "disney.gr", + "disney.hu", + "disney.id", + "disney.in", + "disney.it", + "disneylatino.com", + "disneyme.com", + "disney.my", + "disney.nl", + "disney.no", + "disney.ph", + "disney.pl", + "disney.pt", + "disney.ro", + "disney.se", + "disney.sg", + "disneyturkiye.com.tr", + + "dilcdn.com", + "disney.io", + ], + [ + "wargaming.com", + "wargaming.net", + "worldoftanks.asia", + "worldoftanks.com", + "worldoftanks.eu", + "worldoftanks.kr", + "worldoftanks.ru", + "worldofwarplanes.com", + "worldofwarplanes.eu", + "worldofwarplanes.ru", + "worldofwarships.com", + "worldofwarships.eu", + "worldofwarships.ru", + "wotblitz.com", + ], + [ + "warnermediagroup.com", + + "adultswim.com", + "adventuretime.com", + "atgamewiz.com", + "ben10.com", + "bleacherreport.com", + "bleacherreportlive.com", + "br.live", + "brlive.com", + "brlive.io", + "cartoonnetwork.asia", + "cartoonnetworkasia.com", + "cartoonnetwork.com", + "cartoonnetworkhotel.com", + "cartoonnetworkpr.com", + "catchsports.com", + "chasingthecurelive.com", + "cnn.com", + "cnn.io", + "cnnmoney.ch", + "cnn.net", + "d2c-ott.com", + "d-league.com", + "e-league.com", + "eleague.com", + "filmstruck.com", + "greatbig.com", + "greatbigstory.com", + "hbo.com", + "hbogo.com", + "hbomax.com", + "hbonow.com", + "heaveninc.com", + "hlntv.com", + "iamthenight.com", + "juniorrydercup.com", + "maxgo.com", + "nba.com", + "nba.net", + "ncaa.com", + "ngtv.io", + "penis-map.com", + "pgachampionship.com", + "pga.com", + "pga-events.com", + "pga.net", + "powerpuffgirls.com", + "powerpufftheworld.com", + "robotunicornattack.com", + "rydercup.com", + "samanthabee.com", + "sambee.com", + "shaqtoons.com", + "stevenuniverseselfesteem.com", + "stevenuniversethemovie.com", + "summercampisland.com", + "superstation.com", + "suspensecollection.com", + "tbs.com", + "tcm.com", + "teamcococdn.com", + "thealienist.com", + "thesuspensecollection.com", + "ti-platform.com", + "tntdrama.com", + "tnt.tv", + "trutv.com", + "vgtf.net", + "warnermediacdn.com", + "warnermediafitnation.com", + "warnermediaready.com", + "warnermediasupplierdiversity.com", + "warnermediaupfront.com", + "wbtvd.com", + "webarebears.com", + "wnba.com", + "yzzerdd.com", + + "turner.com", + "ugdturner.com", + ], + [ + "weather.com", + "wunderground.com", + + "imwx.com", + "wfxtriggers.com", + "wsi.com", + "w-x.co", + "wxug.com", + ], + [ + "webmd.com", + + "emedicinehealth.com", + "medicinenet.com", + "medscape.com", + "medscape.org", + "onhealth.com", + "rxlist.com", + + "medscapestatic.com", + ], + ["weebly.com", "editmysite.com"], + [ + "weibo.com", + + "sina.cn", + "sina.com", + "sina.com.cn", + "sinaedge.com", + "sinaimg.cn", + "sinaimg.com", + "sinaimg.com.cn", + "sinajs.cn", + "sina.net", + "wbimg.cn", + "wbimg.com", + "wcdn.cn", + "weibocdn.com", + "weibo.cn", + "weibopay.com", + ], + ["wellsfargo.com", "wf.com"], + ["wetter.com", "tiempo.es", "wettercomassets.com"], + ["wikipedia.org", "wikimedia.org", "wikimediafoundation.org", "wiktionary.org", + "wikiquote.org", "wikibooks.org", "wikisource.org", "wikinews.org", + "wikiversity.org", "mediawiki.org", "wikidata.org", "wikivoyage.org", + "wmfusercontent.org", "tools.wmflabs.org"], + ["wisconsin.gov", "wi.gov"], + ["wix.com", "wixapps.net", "wixstatic.com", "parastorage.com"], + ["wordpress.com", "wp.com"], + [ + "wp.pl", + + "abczdrowie.pl", + "allani.pl", + "autokult.pl", + "dobreprogramy.pl", + "domodi.pl", + "eholiday.pl", + "finansowysupermarket.pl", + "fotoblogia.pl", + "gadzetomania.pl", + "homebook.pl", + "jedenwniosek.pl", + "komorkomania.pl", + "money.pl", + "nocowanie.pl", + "o2.pl", + "open.fm", + "parenting.pl", + "pudelek.pl", + "pudelek.tv", + "totalmoney.pl", + "wakacje.pl", + "wawalove.pl", + "wp.tv", + + "wpcdn.pl", + "wpimg.pl", + ], + ["wpcu.coop", "wpcuonline.com"], + ["wsj.com", "wsj.net", "barrons.com", "dowjones.com", "dowjoneson.com", "mansionglobal.com", "marketwatch.com"], + ["xda-developers.com", "xda-cdn.com"], + ["xfinity.com", "comcast.net", "comcast.com"], + ["xhamster.com", "xhcdn.com"], + ["yahoo.co.jp", "yimg.jp"], + [ + "yandex.com", + + "auto.ru", + "beru.ru", + "bringly.ru", + "kinopoisk.ru", + "mykp.ru", + "yadi.sk", + + "yandex.net", + "yastatic.net", + + "yandex.az", + "yandex.by", + "yandex.co.il", + "yandex.com.am", + "yandex.com.ge", + "yandex.com.tr", + "yandex.com.ua", + "yandex.ee", + "yandex.fr", + "yandex.kg", + "yandex.kz", + "yandex.lt", + "yandex.lv", + "yandex.md", + "yandex.ru", + "yandex.tj", + "yandex.tm", + "yandex.ua", + "yandex.uz", + "ya.ru", + ], + ["yoox.com", "mrporter.com", "theoutnet.com", "yoox.it"], + [ + "sph.com.sg", + + "sphdigital.com", + + "beritaharian.sg", + "businesstimes.com.sg", + "shinmin.sg", + "straitstimes.com", + "tabla.com.sg", + "tamilmurasu.com.sg", + "tnp.sg", + "wanbao.com.sg", + "zaobao.com", + "zaobao.com.sg", + "zaobao.sg" + ], + ["zendesk.com", "zopim.com"], + ["zhaopin.com", "zhaopin.cn"], + ["zillow.com", "zillowstatic.com", "zillowcloud.com", "zg-api.com"], + [ + "zoho.com", + + "zoho.com.au", + "zoho.eu", + + "zohositescontent.com", + "zohositescontent.com.au", + "zohositescontent.eu", + + "manageengine.com", + + "zohocdn.com", + "zohocorp.com", + "zohocreator.com", + "zohopublic.com", + "zohostatic.com", + ], + ["zonealarm.com", "zonelabs.com"], +]; + +/** + * Make a data structure for quick lookups of whether two domains are the same first party + */ +function makeDomainLookup(mdfpArray) { + let out = {}, + arrLength = mdfpArray.length; + for (let i = 0; i < arrLength; i++) { + let inner = new Set(mdfpArray[i]); + for (let domain of inner) { + out[domain] = inner; + } + } + return out; +} + +function makeIsMultiDomainFirstParty(domainLookup) { + return function (domain1, domain2) { + if (domain1 in domainLookup) { + return (domainLookup[domain1].has(domain2)); + } + return false; + }; +} + +let _domainLookup = makeDomainLookup(multiDomainFirstPartiesArray); +/** + * Check if two domains belong to the same effective first party + * @param {String} domain1 a base doamin + * @param {String} domain2 a second base doamin + * + * @return boolean true if the domains are the same first party + */ +let isMultiDomainFirstParty = makeIsMultiDomainFirstParty(_domainLookup); +/************************************** exports */ +return { + isMultiDomainFirstParty, + makeDomainLookup, + makeIsMultiDomainFirstParty, + multiDomainFirstPartiesArray, +}; +})(); //require scopes diff --git a/src/js/options.js b/src/js/options.js new file mode 100644 index 0000000..7ca7008 --- /dev/null +++ b/src/js/options.js @@ -0,0 +1,976 @@ +/* + * This file is part of Adblock Plus , + * Copyright (C) 2006-2013 Eyeo GmbH + * + * Adblock Plus is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * Adblock Plus is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Adblock Plus. If not, see . + */ + +window.OPTIONS_INITIALIZED = false; +window.SLIDERS_DONE = false; + +const TOOLTIP_CONF = { + maxWidth: 400 +}; +const USER_DATA_EXPORT_KEYS = ["action_map", "snitch_map", "settings_map"]; + +let i18n = chrome.i18n; + +let constants = require("constants"); +let { getOriginsArray } = require("optionslib"); +let htmlUtils = require("htmlutils").htmlUtils; +let utils = require("utils"); + +let OPTIONS_DATA = {}; + +/* + * Loads options from pb storage and sets UI elements accordingly. + */ +function loadOptions() { + // Set page title to i18n version of "Privacy Badger Options" + document.title = i18n.getMessage("options_title"); + + // Add event listeners + $("#allowlist-form").on("submit", addDisabledSite); + $("#remove-disabled-site").on("click", removeDisabledSite); + $("#cloud-upload").on("click", uploadCloud); + $("#cloud-download").on("click", downloadCloud); + $('#importTrackerButton').on("click", loadFileChooser); + $('#importTrackers').on("change", importTrackerList); + $('#exportTrackers').on("click", exportUserData); + $('#resetData').on("click", resetData); + $('#removeAllData').on("click", removeAllData); + + if (OPTIONS_DATA.settings.showTrackingDomains) { + $('#tracking-domains-overlay').hide(); + } else { + $('#blockedResourcesContainer').hide(); + + $('#show-tracking-domains-checkbox').on("click", () => { + $('#tracking-domains-overlay').hide(); + $('#blockedResourcesContainer').show(); + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + showTrackingDomains: true + } + }); + }); + } + + // Set up input for searching through tracking domains. + $("#trackingDomainSearch").on("input", filterTrackingDomains); + $("#tracking-domains-type-filter").on("change", filterTrackingDomains); + $("#tracking-domains-status-filter").on("change", filterTrackingDomains); + $("#tracking-domains-show-not-yet-blocked").on("change", filterTrackingDomains); + + // Add event listeners for origins container. + $('#blockedResourcesContainer').on('change', 'input:radio', function () { + let $radio = $(this), + $clicker = $radio.parents('.clicker').first(), + origin = $clicker.data('origin'), + action = $radio.val(); + + // update domain slider row tooltip/status indicators + updateOrigin(origin, action, true); + + // persist the change + saveToggle(origin, action); + }); + $('#blockedResourcesContainer').on('click', '.userset .honeybadgerPowered', revertDomainControl); + $('#blockedResourcesContainer').on('click', '.removeOrigin', removeOrigin); + + // Display jQuery UI elements + $("#tabs").tabs({ + activate: function (event, ui) { + // update options page URL fragment identifier + // to preserve selected tab on page reload + history.replaceState(null, null, "#" + ui.newPanel.attr('id')); + } + }); + $("button").button(); + $("#add-disabled-site").button("option", "icons", {primary: "ui-icon-plus"}); + $("#remove-disabled-site").button("option", "icons", {primary: "ui-icon-minus"}); + $("#cloud-upload").button("option", "icons", {primary: "ui-icon-arrowreturnthick-1-n"}); + $("#cloud-download").button("option", "icons", {primary: "ui-icon-arrowreturnthick-1-s"}); + $(".importButton").button("option", "icons", {primary: "ui-icon-plus"}); + $("#exportTrackers").button("option", "icons", {primary: "ui-icon-extlink"}); + $("#resetData").button("option", "icons", {primary: "ui-icon-arrowrefresh-1-w"}); + $("#removeAllData").button("option", "icons", {primary: "ui-icon-closethick"}); + $("#show_counter_checkbox").on("click", updateShowCounter); + $("#show_counter_checkbox").prop("checked", OPTIONS_DATA.settings.showCounter); + $("#replace-widgets-checkbox") + .on("click", updateWidgetReplacement) + .prop("checked", OPTIONS_DATA.isWidgetReplacementEnabled); + $("#enable_dnt_checkbox").on("click", updateDNTCheckboxClicked); + $("#enable_dnt_checkbox").prop("checked", OPTIONS_DATA.settings.sendDNTSignal); + $("#check_dnt_policy_checkbox").on("click", updateCheckingDNTPolicy); + $("#check_dnt_policy_checkbox").prop("checked", OPTIONS_DATA.settings.checkForDNTPolicy).prop("disabled", !OPTIONS_DATA.settings.sendDNTSignal); + + // only show the alternateErrorPagesEnabled override if browser supports it + if (chrome.privacy && chrome.privacy.services && chrome.privacy.services.alternateErrorPagesEnabled) { + $("#privacy-settings-header").show(); + $("#disable-google-nav-error-service").show(); + $('#disable-google-nav-error-service-checkbox') + .prop("checked", OPTIONS_DATA.settings.disableGoogleNavErrorService) + .on("click", overrideAlternateErrorPagesSetting); + } + + // only show the hyperlinkAuditingEnabled override if browser supports it + if (chrome.privacy && chrome.privacy.websites && chrome.privacy.websites.hyperlinkAuditingEnabled) { + $("#privacy-settings-header").show(); + $("#disable-hyperlink-auditing").show(); + $("#disable-hyperlink-auditing-checkbox") + .prop("checked", OPTIONS_DATA.settings.disableHyperlinkAuditing) + .on("click", overrideHyperlinkAuditingSetting); + } + + if (OPTIONS_DATA.webRTCAvailable) { + $("#webRTCToggle").show(); + $("#toggle_webrtc_mode").on("click", toggleWebRTCIPProtection); + + chrome.privacy.network.webRTCIPHandlingPolicy.get({}, result => { + // auto check the option box if ip leak is already protected at diff levels, via pb or another extension + if (result.value == "default_public_interface_only" || result.value == "disable_non_proxied_udp") { + $("#toggle_webrtc_mode").prop("checked", true); + } + }); + } + + $('#local-learning-checkbox') + .prop("checked", OPTIONS_DATA.settings.learnLocally) + .on("click", (event) => { + const enabled = $(event.currentTarget).prop("checked"); + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + learnLocally: enabled + } + }, function () { + $("#learn-in-incognito-checkbox") + .prop("disabled", (enabled ? false : "disabled")) + .prop("checked", (enabled ? OPTIONS_DATA.settings.learnInIncognito : false)); + $("#show-nontracking-domains-checkbox") + .prop("disabled", (enabled ? false : "disabled")) + .prop("checked", (enabled ? OPTIONS_DATA.settings.showNonTrackingDomains : false)); + + $("#learning-setting-divs").slideToggle(enabled); + $("#not-yet-blocked-filter").toggle(enabled); + }); + }); + if (OPTIONS_DATA.settings.learnLocally) { + $("#learning-setting-divs").show(); + $("#not-yet-blocked-filter").show(); + } + + $("#learn-in-incognito-checkbox") + .prop("disabled", OPTIONS_DATA.settings.learnLocally ? false : "disabled") + .prop("checked", ( + OPTIONS_DATA.settings.learnLocally ? + OPTIONS_DATA.settings.learnInIncognito : false + )) + .on("click", (event) => { + const enabled = $(event.currentTarget).prop("checked"); + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + learnInIncognito: enabled + } + }, function () { + OPTIONS_DATA.settings.learnInIncognito = enabled; + }); + }); + + $('#show-nontracking-domains-checkbox') + .prop("disabled", OPTIONS_DATA.settings.learnLocally ? false : "disabled") + .prop("checked", ( + OPTIONS_DATA.settings.learnLocally ? + OPTIONS_DATA.settings.showNonTrackingDomains : false + )) + .on("click", (event) => { + const enabled = $(event.currentTarget).prop("checked"); + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + showNonTrackingDomains: enabled + } + }, function () { + OPTIONS_DATA.settings.showNonTrackingDomains = enabled; + }); + }); + + const widgetSelector = $("#hide-widgets-select"); + widgetSelector.prop("disabled", + OPTIONS_DATA.isWidgetReplacementEnabled ? false : "disabled"); + + $("#replace-widgets-checkbox").change(function () { + if ($(this).is(":checked")) { + widgetSelector.prop("disabled", false); + } else { + widgetSelector.prop("disabled", "disabled"); + } + }); + + // Initialize Select2 and populate options + widgetSelector.select2(); + OPTIONS_DATA.widgets.forEach(function (key) { + const isSelected = OPTIONS_DATA.settings.widgetReplacementExceptions.includes(key); + const option = new Option(key, key, false, isSelected); + widgetSelector.append(option).trigger("change"); + }); + + widgetSelector.on('select2:select', updateWidgetReplacementExceptions); + widgetSelector.on('select2:unselect', updateWidgetReplacementExceptions); + widgetSelector.on('select2:clear', updateWidgetReplacementExceptions); + + reloadDisabledSites(); + reloadTrackingDomainsTab(); + + $('html').css({ + overflow: 'visible', + visibility: 'visible' + }); + + window.OPTIONS_INITIALIZED = true; +} + +/** + * Opens the file chooser to allow a user to select + * a file to import. + */ +function loadFileChooser() { + var fileChooser = document.getElementById('importTrackers'); + fileChooser.click(); +} + +/** + * Import a list of trackers supplied by the user + * NOTE: list must be in JSON format to be parsable + */ +function importTrackerList() { + var file = this.files[0]; + + if (file) { + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function(e) { + parseUserDataFile(e.target.result); + }; + } else { + var selectFile = i18n.getMessage("import_select_file"); + confirm(selectFile); + } + + document.getElementById("importTrackers").value = ''; +} + +/** + * Parses Privacy Badger data uploaded by the user. + * + * @param {String} storageMapsList data from JSON file that user provided + */ +function parseUserDataFile(storageMapsList) { + let lists; + + try { + lists = JSON.parse(storageMapsList); + } catch (e) { + return confirm(i18n.getMessage("invalid_json")); + } + + // validate by checking we have the same keys in the import as in the export + if (!_.isEqual( + Object.keys(lists).sort(), + USER_DATA_EXPORT_KEYS.sort() + )) { + return confirm(i18n.getMessage("invalid_json")); + } + + // check for webrtc setting in the imported settings map + if (lists.settings_map.preventWebRTCIPLeak) { + // verify that the user hasn't already enabled this option + if (!$("#toggle_webrtc_mode").prop("checked")) { + toggleWebRTCIPProtection(); + } + // this browser-controlled setting doesn't belong in Badger's settings object + delete lists.settings_map.preventWebRTCIPLeak; + } + + chrome.runtime.sendMessage({ + type: "mergeUserData", + data: lists + }, (response) => { + OPTIONS_DATA.settings.disabledSites = response.disabledSites; + OPTIONS_DATA.origins = response.origins; + + reloadDisabledSites(); + reloadTrackingDomainsTab(); + // TODO general settings are not updated + + confirm(i18n.getMessage("import_successful")); + }); +} + +function resetData() { + var resetWarn = i18n.getMessage("reset_data_confirm"); + if (confirm(resetWarn)) { + chrome.runtime.sendMessage({type: "resetData"}, () => { + // reload page to refresh tracker list + location.reload(); + }); + } +} + +function removeAllData() { + var removeWarn = i18n.getMessage("remove_all_data_confirm"); + if (confirm(removeWarn)) { + chrome.runtime.sendMessage({type: "removeAllData"}, () => { + location.reload(); + }); + } +} + +function downloadCloud() { + chrome.runtime.sendMessage({type: "downloadCloud"}, + function (response) { + if (response.success) { + alert(i18n.getMessage("download_cloud_success")); + OPTIONS_DATA.settings.disabledSites = response.disabledSites; + reloadDisabledSites(); + } else { + console.error("Cloud sync error:", response.message); + if (response.message === i18n.getMessage("download_cloud_no_data")) { + alert(response.message); + } else { + alert(i18n.getMessage("download_cloud_failure")); + } + } + } + ); +} + +function uploadCloud() { + chrome.runtime.sendMessage({type: "uploadCloud"}, + function (status) { + if (status.success) { + alert(i18n.getMessage("upload_cloud_success")); + } else { + console.error("Cloud sync error:", status.message); + alert(i18n.getMessage("upload_cloud_failure")); + } + } + ); +} + +/** + * Export the user's data, including their list of trackers from + * action_map and snitch_map, along with their settings. + * List will be in JSON format that can be edited and reimported + * in another instance of Privacy Badger. + */ +function exportUserData() { + chrome.storage.local.get(USER_DATA_EXPORT_KEYS, function (maps) { + + // exports the user's prevent webrtc leak setting if it's checked + if ($("#toggle_webrtc_mode").prop("checked")) { + maps.settings_map.preventWebRTCIPLeak = true; + } + + let mapJSON = JSON.stringify(maps); + + // Append the formatted date to the exported file name + let currDate = new Date().toLocaleString(); + let escapedDate = currDate + // illegal filename charset regex from + // https://github.com/parshap/node-sanitize-filename/blob/ef1e8ad58e95eb90f8a01f209edf55cd4176e9c8/index.js + .replace(/[\/\?<>\\:\*\|"]/g, '_') /* eslint no-useless-escape:off */ + // also collapse-replace commas and spaces + .replace(/[, ]+/g, '_'); + let filename = 'PrivacyBadger_user_data-' + escapedDate + '.json'; + + // Download workaround taken from uBlock Origin + // https://github.com/gorhill/uBlock/blob/40a85f8c04840ae5f5875c1e8b5fa17578c5bd1a/platform/chromium/vapi-common.js + let a = document.createElement('a'); + a.setAttribute('download', filename || ''); + + let blob = new Blob([mapJSON], { type: 'application/json' }); // pass a useful mime type here + a.href = URL.createObjectURL(blob); + + function clickBlobLink() { + a.dispatchEvent(new MouseEvent('click')); + URL.revokeObjectURL(blob); + } + + /** + * Firefox workaround to insert the blob link in an iFrame + * https://bugzilla.mozilla.org/show_bug.cgi?id=1420419#c18 + */ + function addBlobWorkAroundForFirefox() { + // Create or use existing iframe for the blob 'a' element + let iframe = document.getElementById('exportUserDataIframe'); + if (!iframe) { + iframe = document.createElement('iframe'); + iframe.id = "exportUserDataIframe"; + iframe.setAttribute("style", "visibility: hidden; height: 0; width: 0"); + document.getElementById('export').appendChild(iframe); + + iframe.contentWindow.document.open(); + iframe.contentWindow.document.write(''); + iframe.contentWindow.document.close(); + } else { + // Remove the old 'a' element from the iframe + let oldElement = iframe.contentWindow.document.body.lastChild; + iframe.contentWindow.document.body.removeChild(oldElement); + } + iframe.contentWindow.document.body.appendChild(a); + } + + // TODO remove browser check and simplify code once Firefox 58 goes away + // https://bugzilla.mozilla.org/show_bug.cgi?id=1420419 + if (chrome.runtime.getBrowserInfo) { + chrome.runtime.getBrowserInfo((info) => { + if (info.name == "Firefox" || info.name == "Waterfox") { + addBlobWorkAroundForFirefox(); + } + clickBlobLink(); + }); + } else { + clickBlobLink(); + } + }); +} + +/** + * Update setting for whether or not to show counter on Privacy Badger badge. + */ +function updateShowCounter() { + const showCounter = $("#show_counter_checkbox").prop("checked"); + + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { showCounter } + }, () => { + // Refresh display for each tab's PB badge. + chrome.tabs.query({}, function(tabs) { + tabs.forEach(function(tab) { + chrome.runtime.sendMessage({ + type: "updateBadge", + tab_id: tab.id + }); + }); + }); + }); +} + +/** + * Update setting for whether or not to replace + * social buttons/video players/commenting widgets. + */ +function updateWidgetReplacement() { + const socialWidgetReplacementEnabled = $("#replace-widgets-checkbox").prop("checked"); + + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { socialWidgetReplacementEnabled } + }); +} + +/** + * Update DNT checkbox clicked + */ +function updateDNTCheckboxClicked() { + const enabled = $("#enable_dnt_checkbox").prop("checked"); + + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + sendDNTSignal: enabled + } + }); + + $("#check_dnt_policy_checkbox").prop("checked", enabled).prop("disabled", !enabled); + updateCheckingDNTPolicy(); +} + +function updateCheckingDNTPolicy() { + const enabled = $("#check_dnt_policy_checkbox").prop("checked"); + + chrome.runtime.sendMessage({ + type: "updateSettings", + data: { + checkForDNTPolicy: enabled + } + }); +} + +function reloadDisabledSites() { + let sites = OPTIONS_DATA.settings.disabledSites, + $select = $('#allowlist-select'); + + // sort disabled sites the same way blocked sites are sorted + sites = htmlUtils.sortDomains(sites); + + $select.empty(); + for (let i = 0; i < sites.length; i++) { + $('